Aura.Channel.Scripting.Scripts.ItemScript.SummonBrownie C# (CSharp) Метод

SummonBrownie() защищенный Метод

Spawns brownie for creature's personal shop.
protected SummonBrownie ( Creature creature, Item item, string typeName ) : void
creature Aura.Channel.World.Entities.Creature
item Item
typeName string
Результат void
		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);
			}
		}