/// <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); }
/// <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); }
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(); }
/// <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); }
/// <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); }
/// <summary> /// Calculate crafting time /// </summary> protected static int GetRepairTime(GamePlayer player, GameSiegeWeapon siegeWeapon) { return 15; // wrong but don't know the correct formula }
/// <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; }
/// <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; }
public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time) { }
public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer) { }
public void SendSiegeWeaponFireAnimation(GameSiegeWeapon siegeWeapon, int timer) { if (SendSiegeWeaponFireAnimationMethod != null) SendSiegeWeaponFireAnimationMethod(this, siegeWeapon, timer); }
/// <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); }
/// <summary> /// Constructs a new UseSlotAction /// </summary> /// <param name="siegeWeapon">The siege weapon</param> public SiegeTimer(GameSiegeWeapon siegeWeapon) : base(siegeWeapon) { m_siegeWeapon = siegeWeapon; }
/// <summary> /// Calculate crafting time /// </summary> protected static int GetRepairTime(GamePlayer player, GameSiegeWeapon siegeWeapon) { return(15); // wrong but don't know the correct formula }
public void SendSiegeWeaponInterface(GameSiegeWeapon siegeWeapon, int time) { if (SendSiegeWeaponInterfaceMethod != null) SendSiegeWeaponInterfaceMethod(this, siegeWeapon, time); }
/// <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; }
/// <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; }
public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon) { }
public void SendSiegeWeaponAnimation(GameSiegeWeapon siegeWeapon) { if (SendSiegeWeaponAnimationMethod != null) SendSiegeWeaponAnimationMethod(this, siegeWeapon); }