protected void SummonBrownie(Creature creature, Item item, string typeName)
{
var shop = creature.Temp.ActivePersonalShop;
if (shop == null)
{
Send.MsgBox(creature, Localization.Get("The Personal Shop does not exist."));
return;
}
// Get type
var type = ChannelServer.Instance.ScriptManager.GetScriptType(typeName);
if (type == null)
{
Log.Error("SpawnBrownie: Type '{0}' not found.", typeName);
Send.MsgBox(creature, Localization.Get("Unable to summon brownie."));
return;
}
// Check script type
var obj = Activator.CreateInstance(type);
var npcScript = obj as NpcScript;
if (npcScript == null)
{
Log.Error("SpawnBrownie: Type '{0}' is not an NpcScript.", typeName);
Send.MsgBox(creature, Localization.Get("Unable to summon brownie."));
return;
}
var loc = shop.Prop.GetLocation();
var angle = shop.Prop.Info.Direction + Math.PI / 2;
var x = loc.X + 50 * Math.Cos(angle);
var y = loc.Y + 50 * Math.Sin(angle);
loc.X = (int)x;
loc.Y = (int)y;
var direction = MabiMath.RadianToByte(shop.Prop.Info.Direction);
npcScript.Load();
npcScript.NPC.Name += "@" + Interlocked.Increment(ref _brownieCopyId);
npcScript.NPC.SetLocation(loc);
npcScript.NPC.Direction = direction;
npcScript.NPC.ScriptType = type;
shop.Region.AddCreature(npcScript.NPC);
shop.SetOverseer(npcScript.NPC, item.EntityId);
// Set expiration if it's not set yet
if (item.OptionInfo.ExpireTime == 0)
{
// For some reason the client shows "365 days" more than it should...
// reducing them for now.
var seconds = (int)(DateTime.Now.AddHours(24).AddDays(-365) - new DateTime(1970, 1, 1)).TotalSeconds;
item.OptionInfo.ExpireTime = seconds;
Send.ItemUpdate(creature, item);
}
}