Ejemplo n.º 1
0
        public void Invoke(GamePlayer player, int payType, GameKeepHookPoint hookpoint, GameKeepComponent component)
        {
            if (!hookpoint.IsFree)
            {
                player.Out.SendMessage("The hookpoint is already used!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                return;
            }
            //1=or 2=BP 3=GuildBP 4=contract
            //todo enum
            switch (payType)
            {
            case 1:
            {
                if (!player.RemoveMoney(Gold * 100 * 100, "You buy " + this.GetName(1, false) + "."))
                {
                    InventoryLogging.LogInventoryAction(player, "(keep)", eInventoryActionType.Merchant, Gold * 10000);
                    player.Out.SendMessage("You dont have enough money!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                    return;
                }
            } break;

            case 2:
            {
                if (!player.RemoveBountyPoints(Gold, "You buy " + this.GetName(1, false) + "."))
                {
                    player.Out.SendMessage("You dont have enough bounty point!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                    return;
                }
            } break;

            case 3:
            {
                if (player.Guild == null)
                {
                    return;
                }
                if (!player.Guild.RemoveBountyPoints(Gold))
                {
                    player.Out.SendMessage("You dont have enough bounty point!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                    return;
                }
                else
                {
                    player.Out.SendMessage("You buy " + this.GetName(1, false) + ".", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                }
            } break;

            case 4:
            {
                player.Out.SendMessage("NOT IMPLEMENTED YET, SORRY", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
                return;
            }
            }

            GameLiving hookPointObj = CreateHPInstance(this.GameObjectType);

            if (hookPointObj == null)
            {
                return;
            }
            //use default value so no need to load
            //hookPointObj.LoadFromDatabase(this.ObjectTemplate);
            hookPointObj.CurrentRegion = player.CurrentRegion;
            hookPointObj.Realm         = hookpoint.Component.AbstractKeep.Realm;

            if (hookPointObj is GameSiegeWeapon)
            {
                ((GameSiegeWeapon)hookPointObj).EnableToMove = false;
            }
            hookPointObj.X       = hookpoint.X;
            hookPointObj.Y       = hookpoint.Y;
            hookPointObj.Z       = hookpoint.Z;
            hookPointObj.Heading = hookpoint.Heading;

            if (hookPointObj is GameSiegeWeapon)
            {
                (hookPointObj as GameSiegeWeapon).HookPoint = hookpoint;
            }
            if (hookPointObj is IKeepItem)
            {
                (hookPointObj as IKeepItem).Component = component;
            }
            if (hookPointObj is GameSiegeCauldron)
            {
                (hookPointObj as GameSiegeCauldron).Component = component;
            }
            if (hookPointObj is GameKeepGuard)
            {
                (hookPointObj as GameKeepGuard).HookPoint = hookpoint;
                Keeps.TemplateMgr.RefreshTemplate(hookPointObj as GameKeepGuard);
            }
            if (hookPointObj is GameNPC)
            {
                ((GameNPC)hookPointObj).RespawnInterval = -1;                //do not respawn
            }
            hookPointObj.AddToWorld();
            if (hookPointObj is GuardLord lord)
            {
                lord.Component.AbstractKeep.Guards.Add(hookPointObj.ObjectID.ToString(), lord);
                lord.RespawnInterval = 60 * 1000;
            }
            else if (hookPointObj is GameKeepGuard guard)
            {
                guard.Component.AbstractKeep.Guards.Add(hookPointObj.ObjectID.ToString(), guard);
                guard.RespawnInterval = Util.Random(60, 120) * 60 * 1000;
            }

            hookpoint.Object = hookPointObj;

            //create the db entry
            Database.DBKeepHookPointItem item = new DOL.Database.DBKeepHookPointItem(component.AbstractKeep.KeepID, component.ID, hookpoint.ID, GameObjectType);
            GameServer.Database.AddObject(item);
        }
Ejemplo n.º 2
0
		public void Invoke(GamePlayer player, int payType, GameKeepHookPoint hookpoint, GameKeepComponent component)
		{
			if (!hookpoint.IsFree)
			{
				player.Out.SendMessage("The hookpoint is already used!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
				return;
			}
			//1=or 2=BP 3=GuildBP 4=contract
			//todo enum
			switch (payType)
			{
				case 1:
					{
						if (!player.RemoveMoney(Gold * 100 * 100, "You buy " + this.GetName(1, false) + "."))
						{
                            InventoryLogging.LogInventoryAction(player, "(keep)", eInventoryActionType.Merchant, Gold * 10000);
							player.Out.SendMessage("You dont have enough money!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
							return;
						}
					} break;
				case 2:
					{
						if (!player.RemoveBountyPoints(Gold, "You buy " + this.GetName(1, false) + "."))
						{
							player.Out.SendMessage("You dont have enough bounty point!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
							return;
						}
					} break;
				case 3:
					{
						if (player.Guild == null) return;
						if (!player.Guild.RemoveBountyPoints(Gold))
						{
							player.Out.SendMessage("You dont have enough bounty point!", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
							return;
						}
						else
							player.Out.SendMessage("You buy " + this.GetName(1, false) + ".", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);

					} break;
				case 4:
					{
						player.Out.SendMessage("NOT IMPLEMENTED YET, SORRY", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow);
						return;
					}

			}

			GameLiving hookPointObj = CreateHPInstance(this.GameObjectType);
			if (hookPointObj == null) return;
			//use default value so no need to load
			//hookPointObj.LoadFromDatabase(this.ObjectTemplate);
			hookPointObj.CurrentRegion = player.CurrentRegion;
			hookPointObj.Realm = hookpoint.Component.Keep.Realm;

			if (hookPointObj is GameSiegeWeapon)
				((GameSiegeWeapon)hookPointObj).EnableToMove = false;
			hookPointObj.X = hookpoint.X;
			hookPointObj.Y = hookpoint.Y;
			hookPointObj.Z = hookpoint.Z;
			hookPointObj.Heading = hookpoint.Heading;

			if (hookPointObj is GameSiegeWeapon)
				(hookPointObj as GameSiegeWeapon).HookPoint = hookpoint;
			if (hookPointObj is IKeepItem)
				(hookPointObj as IKeepItem).Component = component;
			if (hookPointObj is GameSiegeCauldron)
				(hookPointObj as GameSiegeCauldron).Component = component;
			if (hookPointObj is GameKeepGuard)
			{
				(hookPointObj as GameKeepGuard).HookPoint = hookpoint;
				Keeps.TemplateMgr.RefreshTemplate(hookPointObj as GameKeepGuard);
			}
			if (hookPointObj is GameNPC)
			{
				((GameNPC)hookPointObj).RespawnInterval = -1;//do not respawn
			}
			hookPointObj.AddToWorld();
			if (hookPointObj is GameKeepGuard)
			{
				(hookPointObj as GameKeepGuard).Component.Keep.Guards.Add(hookPointObj.ObjectID, hookPointObj);
				((GameNPC)hookPointObj).RespawnInterval = Util.Random(10, 30) * 60 * 1000;
			}
			hookpoint.Object = hookPointObj;

			//create the db entry
			Database.DBKeepHookPointItem item = new DOL.Database.DBKeepHookPointItem(component.Keep.KeepID, component.ID, hookpoint.ID, GameObjectType);
			GameServer.Database.AddObject(item);
		}