Ejemplo n.º 1
0
        /// <summary>
        /// Called when craft time is finished
        /// </summary>
        /// <param name="timer"></param>
        /// <returns></returns>
        protected static int ProceedSiegeWeapon(RegionTimer timer)
        {
            GamePlayer      player      = (GamePlayer)timer.Properties.getProperty <object>(AbstractCraftingSkill.PLAYER_CRAFTER, null);
            GameSiegeWeapon siegeWeapon = (GameSiegeWeapon)timer.Properties.getProperty <object>(AbstractCraftingSkill.RECIPE_BEING_CRAFTED, null);

            if (player == null || siegeWeapon == null)
            {
                if (log.IsWarnEnabled)
                {
                    log.Warn("There was a problem getting back the item to the player in the secondary craft system.");
                }
                return(0);
            }
            if (!Util.Chance(CalculateSuccessChances(player, siegeWeapon)))
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.ProceedSiegeWeapon.FailRepair", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return(0);
            }
            siegeWeapon.Health = siegeWeapon.MaxHealth;
            player.CraftTimer.Stop();
            player.Out.SendCloseTimerWindow();
            player.Out.SendObjectUpdate(siegeWeapon);            //not sure if good packet for update
            player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.Proceed.FullyRepaired1", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
            return(0);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Called when player try to use a secondary crafting skill
        /// </summary>
        /// <param name="siegeWeapon"></param>
        /// <param name="player"></param>
        /// <returns></returns>
        public static int BeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon)
        {
            if (!IsAllowedToBeginWork(player, siegeWeapon, 50))
            {
                return(0);
            }
            //chance with Woodworking
            if (player.IsMoving || player.IsStrafing)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.StopRepair1", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return(0);
            }

            player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.BeginRepair", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);

            int workDuration = GetRepairTime(player, siegeWeapon);

            player.Out.SendTimerWindow(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.Repairing", siegeWeapon.Name), workDuration);
            player.CraftTimer          = new RegionTimer(player);
            player.CraftTimer.Callback = new RegionTimerCallback(ProceedSiegeWeapon);
            player.CraftTimer.Properties.setProperty(AbstractCraftingSkill.PLAYER_CRAFTER, player);
            player.CraftTimer.Properties.setProperty(AbstractCraftingSkill.RECIPE_BEING_CRAFTED, siegeWeapon);
            player.CraftTimer.Start(workDuration * 1000);
            return(1);
        }
Ejemplo n.º 3
0
        protected override void BuildCraftedItem(GamePlayer player, DBCraftedItem recipe, ItemTemplate itemToCraft)
        {
            GameSiegeWeapon siegeweapon = null;

            switch ((eObjectType)itemToCraft.Object_Type)
            {
            case eObjectType.SiegeBalista:
            {
                siegeweapon = new GameSiegeBallista();
            }

            break;

            case eObjectType.SiegeCatapult:
            {
                siegeweapon = new GameSiegeCatapult();
            }

            break;

            case eObjectType.SiegeCauldron:
            {
                siegeweapon = new GameSiegeCauldron();
            }

            break;

            case eObjectType.SiegeRam:
            {
                siegeweapon = new GameSiegeRam();
            }

            break;

            case eObjectType.SiegeTrebuchet:
            {
                siegeweapon = new GameSiegeTrebuchet();
            }

            break;

            default:
            {
                base.BuildCraftedItem(player, recipe, itemToCraft);
                return;
            }
            }

            // actually stores the Id_nb of the siegeweapon
            siegeweapon.ItemId = itemToCraft.Id_nb;

            siegeweapon.LoadFromDatabase(itemToCraft);
            siegeweapon.CurrentRegion = player.CurrentRegion;
            siegeweapon.Heading       = player.Heading;
            siegeweapon.X             = player.X;
            siegeweapon.Y             = player.Y;
            siegeweapon.Z             = player.Z;
            siegeweapon.Realm         = player.Realm;
            siegeweapon.AddToWorld();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Calculate the chance of sucess
        /// </summary>
        protected static int CalculateSuccessChances(GamePlayer player, GameSiegeWeapon siegeWeapon)
        {
            player.GetCraftingSkillValue(eCraftingSkill.WoodWorking);
            int chancePercent = 90 - 50 / player.GetCraftingSkillValue(eCraftingSkill.WoodWorking);

            if (chancePercent > 100)
            {
                chancePercent = 100;
            }
            else if (chancePercent < 0)
            {
                chancePercent = 0;
            }
            return(chancePercent);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Check if the player own can enchant the item
        /// </summary>
        /// <param name="player"></param>
        /// <param name="siegeWeapon"></param>
        /// <param name="percentNeeded">min 50 max 100</param>
        /// <returns></returns>
        public static bool IsAllowedToBeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon, int percentNeeded)
        {
            if (player.GetCraftingSkillValue(eCraftingSkill.WeaponCrafting) < 301)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.WeaponCrafter"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                return(false);
            }

            if (player.IsCrafting)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.EndCurrentAction"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return(false);
            }

            if (siegeWeapon.Health >= siegeWeapon.MaxHealth)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.FullyRepaired", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return(false);
            }
            return(true);
        }
Ejemplo n.º 6
0
		/// <summary>
		/// Calculate crafting time
		/// </summary>
		protected static int GetRepairTime(GamePlayer player, GameSiegeWeapon siegeWeapon)
		{
			return 15; // wrong but don't know the correct formula
		}
Ejemplo n.º 7
0
		/// <summary>
		/// Check if the player own can enchant the item
		/// </summary>
		/// <param name="player"></param>
		/// <param name="siegeWeapon"></param>
		/// <param name="percentNeeded">min 50 max 100</param>
		/// <returns></returns>
		public static bool IsAllowedToBeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon, int percentNeeded)
		{
			if (player.GetCraftingSkillValue(eCraftingSkill.WeaponCrafting) < 301)
			{
				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.WeaponCrafter"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
				return false;
			}

			if (player.IsCrafting)
			{
				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.EndCurrentAction"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
				return false;
			}

			if (siegeWeapon.Health >= siegeWeapon.MaxHealth)
			{
				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.IsAllowedToBeginWork.FullyRepaired", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
				return false;
			}
			return true;
		}
Ejemplo n.º 8
0
		/// <summary>
		/// Called when player try to use a secondary crafting skill
		/// </summary>
		/// <param name="siegeWeapon"></param>
		/// <param name="player"></param>
		/// <returns></returns>
		public static int BeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon)
		{
			if (!IsAllowedToBeginWork(player, siegeWeapon, 50))
			{
				return 0;
			}
			//chance with Woodworking
			if (player.IsMoving || player.IsStrafing)
			{
				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.StopRepair1", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);
				return 0;
			}

			player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.BeginRepair", siegeWeapon.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow);

			int workDuration = GetRepairTime(player, siegeWeapon);
			player.Out.SendTimerWindow(LanguageMgr.GetTranslation(player.Client.Account.Language, "Repair.BeginWork.Repairing", siegeWeapon.Name), workDuration);
			player.CraftTimer = new RegionTimer(player);
			player.CraftTimer.Callback = new RegionTimerCallback(ProceedSiegeWeapon);
			player.CraftTimer.Properties.setProperty(AbstractCraftingSkill.PLAYER_CRAFTER, player);
			player.CraftTimer.Properties.setProperty(AbstractCraftingSkill.RECIPE_BEING_CRAFTED, siegeWeapon);
			player.CraftTimer.Start(workDuration * 1000);
			return 1;
		}
Ejemplo n.º 9
0
		public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time) { }
Ejemplo n.º 10
0
		public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer) { }
Ejemplo n.º 11
0
		public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer)
		{
			if (SendSiegeWeaponFireAnimationMethod != null) SendSiegeWeaponFireAnimationMethod(this, siegeWeapon, timer);
		}
Ejemplo n.º 12
0
        /// <summary>
        /// Begin salvaging a siege weapon
        /// </summary>
        /// <param name="player"></param>
        /// <param name="siegeWeapon"></param>
        /// <returns></returns>
        public static int BeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon)
        {
            if (siegeWeapon == null)
            {
                return(0);
            }
            // Galenas
            siegeWeapon.ReleaseControl();
            siegeWeapon.RemoveFromWorld();
            bool          error  = false;
            DBCraftedItem recipe = GameServer.Database.SelectObject <DBCraftedItem>("Id_nb ='" + siegeWeapon.ItemId + "'");

            if (recipe == null)
            {
                player.Out.SendMessage("Error retrieving salvage data!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
                log.Error("Salvage Siege Error: DBCraftedItem is null for" + siegeWeapon.ItemId);
                return(1);
            }

            IList <DBCraftedXItem> rawMaterials = GameServer.Database.SelectObjects <DBCraftedXItem>("`CraftedItemId_nb` = '" + recipe.Id_nb + "'");

            if (rawMaterials == null || rawMaterials.Count == 0)
            {
                player.Out.SendMessage("No raw materials provided for this siege weapon!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
                log.Error("Salvage Siege Error: No Raw Materials found for " + siegeWeapon.ItemId);
                return(1);
            }

            if (player.IsCrafting)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Salvage.IsAllowedToBeginWork.EndCurrentAction"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return(0);
            }
            InventoryItem item;
            ItemTemplate  template;

            foreach (DBCraftedXItem material in rawMaterials)
            {
                template = GameServer.Database.FindObjectByKey <ItemTemplate>(material.IngredientId_nb);

                if (template == null)
                {
                    player.Out.SendMessage("Missing raw material " + material.IngredientId_nb + "!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
                    log.Error("Salvage Siege Error: Raw Material not found " + material.IngredientId_nb);
                    return(1);
                }

                item       = GameInventoryItem.Create <ItemTemplate>(template);
                item.Count = material.Count;
                if (!player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item))
                {
                    error = true;
                    break;
                }
                InventoryLogging.LogInventoryAction("(salvage)", player, eInventoryActionType.Craft, item.Template, item.Count);
            }

            if (error)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Salvage.BeginWork.NoRoom"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
            }

            return(1);
        }
Ejemplo n.º 13
0
 /// <summary>
 /// Constructs a new UseSlotAction
 /// </summary>
 /// <param name="siegeWeapon">The siege weapon</param>
 public SiegeTimer(GameSiegeWeapon siegeWeapon)
     : base(siegeWeapon)
 {
     m_siegeWeapon = siegeWeapon;
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Calculate crafting time
 /// </summary>
 protected static int GetRepairTime(GamePlayer player, GameSiegeWeapon siegeWeapon)
 {
     return(15);            // wrong but don't know the correct formula
 }
Ejemplo n.º 15
0
		public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time)
		{
			if (SendSiegeWeaponInterfaceMethod != null) SendSiegeWeaponInterfaceMethod(this, siegeWeapon, time);
		}
Ejemplo n.º 16
0
		/// <summary>
		/// Calculate the chance of sucess
		/// </summary>
		protected static int CalculateSuccessChances(GamePlayer player, GameSiegeWeapon siegeWeapon)
		{
			player.GetCraftingSkillValue(eCraftingSkill.WoodWorking);
			int chancePercent = 90 - 50 / player.GetCraftingSkillValue(eCraftingSkill.WoodWorking);

			if (chancePercent > 100)
				chancePercent = 100;
			else if (chancePercent < 0)
				chancePercent = 0;
			return chancePercent;
		}
Ejemplo n.º 17
0
		/// <summary>
		/// Begin salvaging a siege weapon
		/// </summary>
		/// <param name="player"></param>
		/// <param name="siegeWeapon"></param>
		/// <returns></returns>
		public static int BeginWork(GamePlayer player, GameSiegeWeapon siegeWeapon)
		{
			if (siegeWeapon == null)
				return 0;
			// Galenas
			siegeWeapon.ReleaseControl();
			siegeWeapon.RemoveFromWorld();
			bool error = false;
            DBCraftedItem recipe = GameServer.Database.SelectObject<DBCraftedItem>("Id_nb ='" + siegeWeapon.ItemId + "'");

			if (recipe == null)
            {
				player.Out.SendMessage("Error retrieving salvage data!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
				log.Error("Salvage Siege Error: DBCraftedItem is null for" + siegeWeapon.ItemId);
				return 1;
            }

			IList<DBCraftedXItem> rawMaterials = GameServer.Database.SelectObjects<DBCraftedXItem>("`CraftedItemId_nb` = '" + recipe.Id_nb + "'");

			if (rawMaterials == null || rawMaterials.Count == 0)
            {
				player.Out.SendMessage("No raw materials provided for this siege weapon!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
				log.Error("Salvage Siege Error: No Raw Materials found for " + siegeWeapon.ItemId);
				return 1;
            }

            if (player.IsCrafting)
            {
                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Salvage.IsAllowedToBeginWork.EndCurrentAction"), eChatType.CT_System, eChatLoc.CL_SystemWindow);
                return 0;
            }
			InventoryItem item;
			ItemTemplate template;
			foreach (DBCraftedXItem material in rawMaterials)
			{
				template = GameServer.Database.FindObjectByKey<ItemTemplate>(material.IngredientId_nb);

				if (template == null)
				{
					player.Out.SendMessage("Missing raw material " + material.IngredientId_nb + "!", eChatType.CT_Important, eChatLoc.CL_SystemWindow);
					log.Error("Salvage Siege Error: Raw Material not found " + material.IngredientId_nb);
					return 1;
				}

				item = GameInventoryItem.Create<ItemTemplate>(template);
				item.Count = material.Count;
				if (!player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item))
				{
					error = true;
					break;
				}
				InventoryLogging.LogInventoryAction("(salvage)", player, eInventoryActionType.Craft, item.Template, item.Count);
			}

			if (error)
				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Salvage.BeginWork.NoRoom"), eChatType.CT_System, eChatLoc.CL_SystemWindow);

			return 1;
		}
Ejemplo n.º 18
0
		public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon) { }
Ejemplo n.º 19
0
		/// <summary>
		/// Constructs a new UseSlotAction
		/// </summary>
		/// <param name="siegeWeapon">The siege weapon</param>
		public SiegeTimer(GameSiegeWeapon siegeWeapon)
			: base(siegeWeapon)
		{
			m_siegeWeapon = siegeWeapon;
		}
Ejemplo n.º 20
0
		public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon)
		{
			if (SendSiegeWeaponAnimationMethod != null) SendSiegeWeaponAnimationMethod(this, siegeWeapon);
		}