From 8e3a82d821316b573a7c07589943f803e1ef9e63 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 8 Jan 2023 22:44:01 +0000 Subject: [PATCH] Addition of RequestHuntPassReward index checks and logic corrections. --- .../huntpass/RequestHuntPassReward.java | 57 ++++++++++----- .../huntpass/RequestHuntPassReward.java | 71 ++++++++++++------- .../huntpass/RequestHuntPassReward.java | 71 ++++++++++++------- 3 files changed, 131 insertions(+), 68 deletions(-) diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java index 45e3968d23..16a1ace6d3 100644 --- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java +++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java @@ -17,10 +17,12 @@ package org.l2jmobius.gameserver.network.clientpackets.huntpass; import org.l2jmobius.commons.network.ReadablePacket; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.request.RewardRequest; import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.network.GameClient; @@ -54,46 +56,61 @@ public class RequestHuntPassReward implements ClientPacket return; } - final HuntPass huntPass = player.getHuntPass(); - final int normalReward = huntPass.getRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); - final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); + if (player.hasRequest(RewardRequest.class)) + { + return; + } + player.addRequest(new RewardRequest(player)); + final HuntPass huntPass = player.getHuntPass(); + final int rewardIndex = huntPass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); + final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); final long weight = itemTemplate.getWeight() * reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_2); + player.sendPacket(SystemMessageId.YOUR_INVENTORY_S_WEIGHT_SLOT_LIMIT_HAS_BEEN_EXCEEDED_SO_YOU_CAN_T_RECEIVE_THE_REWARD_PLEASE_FREE_UP_SOME_SPACE_AND_TRY_AGAIN); return; } updateSayhaTime(player); premiumReward(player); - huntPass.setRewardStep(normalReward + 1); + huntPass.setRewardStep(rewardIndex + 1); huntPass.setRewardAlert(false); player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player)); + + ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50); } private void updateSayhaTime(Player player) { final HuntPass huntpass = player.getHuntPass(); - final int normalreward = huntpass.getRewardStep(); - final int premiumreward = huntpass.getPremiumRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalreward); - - final boolean isPremium = huntpass.isPremium(); - if (isPremium && (premiumreward < normalreward)) + final int rewardIndex = huntpass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) { return; } + if (huntpass.isPremium() && ((huntpass.getPremiumRewardStep() < rewardIndex) || (huntpass.getPremiumRewardStep() >= HuntPassData.getInstance().getPremiumRewardsCount()))) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); if (reward.getId() == 60306) // Vitality Sustention Points { final int count = (int) reward.getCount(); huntpass.addSayhaTime(count); - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_2); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_VE_GOT_S1_VITALITY_SUSTENTION_POINT_S); msg.addInt(count); player.sendPacket(msg); } @@ -106,13 +123,17 @@ public class RequestHuntPassReward implements ClientPacket private void premiumReward(Player player) { final HuntPass huntPass = player.getHuntPass(); - final int rewardStep = huntPass.getPremiumRewardStep(); - final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); - final boolean isPremium = huntPass.isPremium(); - if (isPremium) + final int rewardIndex = huntPass.getPremiumRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount()) + { + return; + } + + final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex); + if (huntPass.isPremium()) { player.addItem("SeasonPassReward", premiumReward, player, true); - huntPass.setPremiumRewardStep(rewardStep + 1); + huntPass.setPremiumRewardStep(rewardIndex + 1); } } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java index 0e998b318e..e4e4dd2e87 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java @@ -17,10 +17,12 @@ package org.l2jmobius.gameserver.network.clientpackets.huntpass; import org.l2jmobius.commons.network.ReadablePacket; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.request.RewardRequest; import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.network.GameClient; @@ -54,11 +56,21 @@ public class RequestHuntPassReward implements ClientPacket return; } - final HuntPass huntPass = player.getHuntPass(); - final int normalReward = huntPass.getRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); - final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); + if (player.hasRequest(RewardRequest.class)) + { + return; + } + player.addRequest(new RewardRequest(player)); + final HuntPass huntPass = player.getHuntPass(); + final int rewardIndex = huntPass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); + final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); final long weight = itemTemplate.getWeight() * reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) @@ -69,50 +81,59 @@ public class RequestHuntPassReward implements ClientPacket updateSayhaTime(player); premiumReward(player); - huntPass.setRewardStep(normalReward + 1); + huntPass.setRewardStep(rewardIndex + 1); huntPass.setRewardAlert(false); player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player)); + + ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50); } private void updateSayhaTime(Player player) { final HuntPass huntpass = player.getHuntPass(); - final int normalreward = huntpass.getRewardStep(); - final int premiumreward = huntpass.getPremiumRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalreward); - - final int sayhaPoints = 0; // TODO: 0? - final long count = reward.getCount(); - final int calc = (int) (sayhaPoints + count); - final boolean isPremium = huntpass.isPremium(); - if (isPremium && (premiumreward < normalreward)) + final int rewardIndex = huntpass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) { return; } - huntpass.addSayhaTime(calc); - if (reward.getId() != 72286) // Sayha's Grace Sustention Points + if (huntpass.isPremium() && ((huntpass.getPremiumRewardStep() < rewardIndex) || (huntpass.getPremiumRewardStep() >= HuntPassData.getInstance().getPremiumRewardsCount()))) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); + if (reward.getId() == 72286) // Sayha's Grace Sustention Points + { + final int count = (int) reward.getCount(); + huntpass.addSayhaTime(count); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_RECEIVED_S1_SAYHA_S_GRACE_SUSTENTION_POINTS); + msg.addInt(count); + player.sendPacket(msg); + } + else { player.addItem("HuntPassReward", reward, player, true); } - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_RECEIVED_S1_SAYHA_S_GRACE_SUSTENTION_POINTS); - msg.addInt((int) (count)); - player.sendPacket(msg); } private void premiumReward(Player player) { final HuntPass huntPass = player.getHuntPass(); - final int rewardStep = huntPass.getPremiumRewardStep(); - final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); - final boolean isPremium = huntPass.isPremium(); - if (isPremium) + final int rewardIndex = huntPass.getPremiumRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount()) + { + return; + } + + final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex); + if (huntPass.isPremium()) { player.addItem("SeasonPassReward", premiumReward, player, true); - huntPass.setPremiumRewardStep(rewardStep + 1); + huntPass.setPremiumRewardStep(rewardIndex + 1); } } } diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java index 37ae915c25..5fc7d78f47 100644 --- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java +++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/clientpackets/huntpass/RequestHuntPassReward.java @@ -17,10 +17,12 @@ package org.l2jmobius.gameserver.network.clientpackets.huntpass; import org.l2jmobius.commons.network.ReadablePacket; +import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.request.RewardRequest; import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.network.GameClient; @@ -54,11 +56,21 @@ public class RequestHuntPassReward implements ClientPacket return; } - final HuntPass huntPass = player.getHuntPass(); - final int normalReward = huntPass.getRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); - final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); + if (player.hasRequest(RewardRequest.class)) + { + return; + } + player.addRequest(new RewardRequest(player)); + final HuntPass huntPass = player.getHuntPass(); + final int rewardIndex = huntPass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); + final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); final long weight = itemTemplate.getWeight() * reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) @@ -69,50 +81,59 @@ public class RequestHuntPassReward implements ClientPacket updateSayhaTime(player); premiumReward(player); - huntPass.setRewardStep(normalReward + 1); + huntPass.setRewardStep(rewardIndex + 1); huntPass.setRewardAlert(false); player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player)); + + ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50); } private void updateSayhaTime(Player player) { final HuntPass huntpass = player.getHuntPass(); - final int normalreward = huntpass.getRewardStep(); - final int premiumreward = huntpass.getPremiumRewardStep(); - final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalreward); - - final int sayhaPoints = 0; // TODO: 0? - final long count = reward.getCount(); - final int calc = (int) (sayhaPoints + count); - final boolean isPremium = huntpass.isPremium(); - if (isPremium && (premiumreward < normalreward)) + final int rewardIndex = huntpass.getRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getRewardsCount()) { return; } - huntpass.addSayhaTime(calc); - if (reward.getId() != 72286) // Sayha's Grace Sustention Points + if (huntpass.isPremium() && ((huntpass.getPremiumRewardStep() < rewardIndex) || (huntpass.getPremiumRewardStep() >= HuntPassData.getInstance().getPremiumRewardsCount()))) + { + return; + } + + final ItemHolder reward = HuntPassData.getInstance().getRewards().get(rewardIndex); + if (reward.getId() == 72286) // Sayha's Grace Sustention Points + { + final int count = (int) reward.getCount(); + huntpass.addSayhaTime(count); + + final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_VE_GOT_S1_SAYHA_S_GRACE_SUSTENTION_POINT_S); + msg.addInt(count); + player.sendPacket(msg); + } + else { player.addItem("HuntPassReward", reward, player, true); } - - final SystemMessage msg = new SystemMessage(SystemMessageId.YOU_VE_GOT_S1_SAYHA_S_GRACE_SUSTENTION_POINT_S); - msg.addInt((int) (count)); - player.sendPacket(msg); } private void premiumReward(Player player) { final HuntPass huntPass = player.getHuntPass(); - final int rewardStep = huntPass.getPremiumRewardStep(); - final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); - final boolean isPremium = huntPass.isPremium(); - if (isPremium) + final int rewardIndex = huntPass.getPremiumRewardStep(); + if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount()) + { + return; + } + + final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex); + if (huntPass.isPremium()) { player.addItem("SeasonPassReward", premiumReward, player, true); - huntPass.setPremiumRewardStep(rewardStep + 1); + huntPass.setPremiumRewardStep(rewardIndex + 1); } } }