Addition of RequestHuntPassReward index checks and logic corrections.

This commit is contained in:
MobiusDevelopment
2023-01-08 22:44:01 +00:00
parent a5c731bc30
commit 8e3a82d821
3 changed files with 131 additions and 68 deletions

View File

@@ -17,10 +17,12 @@
package org.l2jmobius.gameserver.network.clientpackets.huntpass; package org.l2jmobius.gameserver.network.clientpackets.huntpass;
import org.l2jmobius.commons.network.ReadablePacket; import org.l2jmobius.commons.network.ReadablePacket;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.data.xml.HuntPassData;
import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.HuntPass;
import org.l2jmobius.gameserver.model.actor.Player; 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.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -54,46 +56,61 @@ public class RequestHuntPassReward implements ClientPacket
return; return;
} }
final HuntPass huntPass = player.getHuntPass(); if (player.hasRequest(RewardRequest.class))
final int normalReward = huntPass.getRewardStep(); {
final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); return;
final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); }
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 weight = itemTemplate.getWeight() * reward.getCount();
final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount();
if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) 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; return;
} }
updateSayhaTime(player); updateSayhaTime(player);
premiumReward(player); premiumReward(player);
huntPass.setRewardStep(normalReward + 1); huntPass.setRewardStep(rewardIndex + 1);
huntPass.setRewardAlert(false); huntPass.setRewardAlert(false);
player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassInfo(player, _huntPassType));
player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSayhasSupportInfo(player));
player.sendPacket(new HuntPassSimpleInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player));
ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50);
} }
private void updateSayhaTime(Player player) private void updateSayhaTime(Player player)
{ {
final HuntPass huntpass = player.getHuntPass(); final HuntPass huntpass = player.getHuntPass();
final int normalreward = huntpass.getRewardStep(); final int rewardIndex = huntpass.getRewardStep();
final int premiumreward = huntpass.getPremiumRewardStep(); if (rewardIndex >= HuntPassData.getInstance().getRewardsCount())
final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalreward);
final boolean isPremium = huntpass.isPremium();
if (isPremium && (premiumreward < normalreward))
{ {
return; 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 if (reward.getId() == 60306) // Vitality Sustention Points
{ {
final int count = (int) reward.getCount(); final int count = (int) reward.getCount();
huntpass.addSayhaTime(count); 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); msg.addInt(count);
player.sendPacket(msg); player.sendPacket(msg);
} }
@@ -106,13 +123,17 @@ public class RequestHuntPassReward implements ClientPacket
private void premiumReward(Player player) private void premiumReward(Player player)
{ {
final HuntPass huntPass = player.getHuntPass(); final HuntPass huntPass = player.getHuntPass();
final int rewardStep = huntPass.getPremiumRewardStep(); final int rewardIndex = huntPass.getPremiumRewardStep();
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount())
final boolean isPremium = huntPass.isPremium(); {
if (isPremium) return;
}
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex);
if (huntPass.isPremium())
{ {
player.addItem("SeasonPassReward", premiumReward, player, true); player.addItem("SeasonPassReward", premiumReward, player, true);
huntPass.setPremiumRewardStep(rewardStep + 1); huntPass.setPremiumRewardStep(rewardIndex + 1);
} }
} }
} }

View File

@@ -17,10 +17,12 @@
package org.l2jmobius.gameserver.network.clientpackets.huntpass; package org.l2jmobius.gameserver.network.clientpackets.huntpass;
import org.l2jmobius.commons.network.ReadablePacket; import org.l2jmobius.commons.network.ReadablePacket;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.data.xml.HuntPassData;
import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.HuntPass;
import org.l2jmobius.gameserver.model.actor.Player; 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.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -54,11 +56,21 @@ public class RequestHuntPassReward implements ClientPacket
return; return;
} }
final HuntPass huntPass = player.getHuntPass(); if (player.hasRequest(RewardRequest.class))
final int normalReward = huntPass.getRewardStep(); {
final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); return;
final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); }
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 weight = itemTemplate.getWeight() * reward.getCount();
final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount();
if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots))
@@ -69,50 +81,59 @@ public class RequestHuntPassReward implements ClientPacket
updateSayhaTime(player); updateSayhaTime(player);
premiumReward(player); premiumReward(player);
huntPass.setRewardStep(normalReward + 1); huntPass.setRewardStep(rewardIndex + 1);
huntPass.setRewardAlert(false); huntPass.setRewardAlert(false);
player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassInfo(player, _huntPassType));
player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSayhasSupportInfo(player));
player.sendPacket(new HuntPassSimpleInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player));
ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50);
} }
private void updateSayhaTime(Player player) private void updateSayhaTime(Player player)
{ {
final HuntPass huntpass = player.getHuntPass(); final HuntPass huntpass = player.getHuntPass();
final int normalreward = huntpass.getRewardStep(); final int rewardIndex = huntpass.getRewardStep();
final int premiumreward = huntpass.getPremiumRewardStep(); if (rewardIndex >= HuntPassData.getInstance().getRewardsCount())
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))
{ {
return; return;
} }
huntpass.addSayhaTime(calc); if (huntpass.isPremium() && ((huntpass.getPremiumRewardStep() < rewardIndex) || (huntpass.getPremiumRewardStep() >= HuntPassData.getInstance().getPremiumRewardsCount())))
if (reward.getId() != 72286) // Sayha's Grace Sustention Points {
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); 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) private void premiumReward(Player player)
{ {
final HuntPass huntPass = player.getHuntPass(); final HuntPass huntPass = player.getHuntPass();
final int rewardStep = huntPass.getPremiumRewardStep(); final int rewardIndex = huntPass.getPremiumRewardStep();
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount())
final boolean isPremium = huntPass.isPremium(); {
if (isPremium) return;
}
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex);
if (huntPass.isPremium())
{ {
player.addItem("SeasonPassReward", premiumReward, player, true); player.addItem("SeasonPassReward", premiumReward, player, true);
huntPass.setPremiumRewardStep(rewardStep + 1); huntPass.setPremiumRewardStep(rewardIndex + 1);
} }
} }
} }

View File

@@ -17,10 +17,12 @@
package org.l2jmobius.gameserver.network.clientpackets.huntpass; package org.l2jmobius.gameserver.network.clientpackets.huntpass;
import org.l2jmobius.commons.network.ReadablePacket; import org.l2jmobius.commons.network.ReadablePacket;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.ItemTable; import org.l2jmobius.gameserver.data.ItemTable;
import org.l2jmobius.gameserver.data.xml.HuntPassData; import org.l2jmobius.gameserver.data.xml.HuntPassData;
import org.l2jmobius.gameserver.model.HuntPass; import org.l2jmobius.gameserver.model.HuntPass;
import org.l2jmobius.gameserver.model.actor.Player; 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.holders.ItemHolder;
import org.l2jmobius.gameserver.model.item.ItemTemplate; import org.l2jmobius.gameserver.model.item.ItemTemplate;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
@@ -54,11 +56,21 @@ public class RequestHuntPassReward implements ClientPacket
return; return;
} }
final HuntPass huntPass = player.getHuntPass(); if (player.hasRequest(RewardRequest.class))
final int normalReward = huntPass.getRewardStep(); {
final ItemHolder reward = HuntPassData.getInstance().getRewards().get(normalReward); return;
final ItemTemplate itemTemplate = ItemTable.getInstance().getTemplate(reward.getId()); }
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 weight = itemTemplate.getWeight() * reward.getCount();
final long slots = itemTemplate.isStackable() ? 1 : reward.getCount(); final long slots = itemTemplate.isStackable() ? 1 : reward.getCount();
if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots)) if (!player.getInventory().validateWeight(weight) || !player.getInventory().validateCapacity(slots))
@@ -69,50 +81,59 @@ public class RequestHuntPassReward implements ClientPacket
updateSayhaTime(player); updateSayhaTime(player);
premiumReward(player); premiumReward(player);
huntPass.setRewardStep(normalReward + 1); huntPass.setRewardStep(rewardIndex + 1);
huntPass.setRewardAlert(false); huntPass.setRewardAlert(false);
player.sendPacket(new HuntPassInfo(player, _huntPassType)); player.sendPacket(new HuntPassInfo(player, _huntPassType));
player.sendPacket(new HuntPassSayhasSupportInfo(player)); player.sendPacket(new HuntPassSayhasSupportInfo(player));
player.sendPacket(new HuntPassSimpleInfo(player)); player.sendPacket(new HuntPassSimpleInfo(player));
ThreadPool.schedule(() -> player.removeRequest(RewardRequest.class), 50);
} }
private void updateSayhaTime(Player player) private void updateSayhaTime(Player player)
{ {
final HuntPass huntpass = player.getHuntPass(); final HuntPass huntpass = player.getHuntPass();
final int normalreward = huntpass.getRewardStep(); final int rewardIndex = huntpass.getRewardStep();
final int premiumreward = huntpass.getPremiumRewardStep(); if (rewardIndex >= HuntPassData.getInstance().getRewardsCount())
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))
{ {
return; return;
} }
huntpass.addSayhaTime(calc); if (huntpass.isPremium() && ((huntpass.getPremiumRewardStep() < rewardIndex) || (huntpass.getPremiumRewardStep() >= HuntPassData.getInstance().getPremiumRewardsCount())))
if (reward.getId() != 72286) // Sayha's Grace Sustention Points {
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); 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) private void premiumReward(Player player)
{ {
final HuntPass huntPass = player.getHuntPass(); final HuntPass huntPass = player.getHuntPass();
final int rewardStep = huntPass.getPremiumRewardStep(); final int rewardIndex = huntPass.getPremiumRewardStep();
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardStep); if (rewardIndex >= HuntPassData.getInstance().getPremiumRewardsCount())
final boolean isPremium = huntPass.isPremium(); {
if (isPremium) return;
}
final ItemHolder premiumReward = HuntPassData.getInstance().getPremiumRewards().get(rewardIndex);
if (huntPass.isPremium())
{ {
player.addItem("SeasonPassReward", premiumReward, player, true); player.addItem("SeasonPassReward", premiumReward, player, true);
huntPass.setPremiumRewardStep(rewardStep + 1); huntPass.setPremiumRewardStep(rewardIndex + 1);
} }
} }
} }