Minor RequestAcquireSkill improvement and cleanup.

This commit is contained in:
MobiusDevelopment
2022-07-21 09:05:06 +00:00
parent af4465a567
commit c58f57ad3f
23 changed files with 1461 additions and 1578 deletions

View File

@@ -641,13 +641,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -641,13 +641,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -641,13 +641,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -641,13 +641,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -591,13 +591,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -591,13 +591,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -591,13 +591,10 @@ public class RequestAcquireSkill implements IClientIncomingPacket
{ {
skillLearn.getRemoveSkills().forEach(skillId -> skillLearn.getRemoveSkills().forEach(skillId ->
{ {
if (player.getSkillLevel(skillId) > 0) final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{ {
final Skill skillToRemove = player.getKnownSkill(skillId); player.removeSkill(skillToRemove, true);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
} }
}); });
} }

View File

@@ -507,113 +507,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -515,134 +515,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -515,134 +515,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -515,134 +515,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -515,134 +515,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -474,113 +474,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -555,113 +555,107 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
}
}
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false; return false;
} }
} }
// First it checks that the skill require SP and the player has enough SP to learn it. // If the player has all required items, they are consumed.
final long levelUpSp = skillLearn.getLevelUpSp(); for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
{
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
}
return false;
}
} }
} }
// Check for required items.
if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
long reqItemCount = 0;
for (ItemHolder item : skillLearn.getRequiredItems())
{
reqItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (reqItemCount < item.getCount())
{
// Player doesn't have required item.
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ITEMS_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
}
// If the player has all required items, they are consumed.
for (ItemHolder itemIdCount : skillLearn.getRequiredItems())
{
if (!player.destroyItemByItemId("SkillLearn", itemIdCount.getId(), itemIdCount.getCount(), trainer, true))
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + itemIdCount.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
}
}
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -489,134 +489,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -489,134 +489,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -489,134 +489,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }

View File

@@ -489,134 +489,128 @@ public class RequestAcquireSkill implements IClientIncomingPacket
*/ */
private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn) private boolean checkPlayerSkill(Player player, Npc trainer, SkillLearn skillLearn)
{ {
if (skillLearn != null) if ((skillLearn != null) && (skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level))
{ {
if ((skillLearn.getSkillId() == _id) && (skillLearn.getSkillLevel() == _level)) // Hack check.
if (skillLearn.getGetLevel() > player.getLevel())
{ {
// Hack check. player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
if (skillLearn.getGetLevel() > player.getLevel()) Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false;
}
if (skillLearn.getDualClassLevel() > 0)
{
final SubClassHolder playerDualClass = player.getDualClass();
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_SKILL_LEVEL_REQUIREMENTS);
Util.handleIllegalPlayerAction(player, player + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + skillLearn.getGetLevel() + "!", IllegalActionPunishmentType.NONE);
return false; return false;
} }
}
if (skillLearn.getDualClassLevel() > 0)
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp();
if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL);
showSkillList(trainer, player);
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
final SubClassHolder playerDualClass = player.getDualClass(); if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel())
if ((playerDualClass == null) || (playerDualClass.getLevel() < skillLearn.getDualClassLevel()))
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId())
{
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
}
else
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
}
return false; return false;
} }
} }
}
// First it checks that the skill require SP and the player has enough SP to learn it.
final long levelUpSp = skillLearn.getLevelUpSp(); // Check for required items.
if ((levelUpSp > 0) && (levelUpSp > player.getSp())) if (!skillLearn.getRequiredItems().isEmpty())
{
// Then checks that the player has all the items
int count = 0;
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_SP_TO_LEARN_THIS_SKILL); count = 0;
showSkillList(trainer, player); SEARCH: for (ItemHolder item : items)
return false;
}
if (!Config.DIVINE_SP_BOOK_NEEDED && (_id == CommonSkill.DIVINE_INSPIRATION.getId()))
{
return true;
}
// Check for required skills.
if (!skillLearn.getPreReqSkills().isEmpty())
{
for (SkillHolder skill : skillLearn.getPreReqSkills())
{ {
if (player.getSkillLevel(skill.getSkillId()) < skill.getSkillLevel()) count++;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{ {
if (skill.getSkillId() == CommonSkill.ONYX_BEAST_TRANSFORMATION.getId()) break SEARCH;
{ }
player.sendPacket(SystemMessageId.YOU_MUST_LEARN_THE_ONYX_BEAST_SKILL_BEFORE_YOU_CAN_LEARN_FURTHER_SKILLS);
} if (count == items.size())
else {
{ player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL); showSkillList(trainer, player);
}
return false; return false;
} }
} }
} }
// Check for required items. // If the player has all required items, they are consumed.
if (!skillLearn.getRequiredItems().isEmpty()) for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
// Then checks that the player has all the items count = 0;
int count = 0; SEARCH: for (ItemHolder item : items)
long playerItemCount = 0;
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{ {
count = 0; count++;
SEARCH: for (ItemHolder item : items) playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{ {
count++; break SEARCH;
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if (playerItemCount >= item.getCount())
{
break SEARCH;
}
if (count == items.size())
{
player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS_TO_LEARN_THE_SKILL);
showSkillList(trainer, player);
return false;
}
} }
}
if (count == items.size())
// If the player has all required items, they are consumed.
for (List<ItemHolder> items : skillLearn.getRequiredItems())
{
count = 0;
SEARCH: for (ItemHolder item : items)
{ {
count++; Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
playerItemCount = player.getInventory().getInventoryItemCount(item.getId(), -1);
if ((playerItemCount >= item.getCount()) && player.destroyItemByItemId("SkillLearn", item.getId(), item.getCount(), trainer, true))
{
break SEARCH;
}
if (count == items.size())
{
Util.handleIllegalPlayerAction(player, "Somehow " + player + ", level " + player.getLevel() + " lose required item Id: " + item.getId() + " to learn skill while learning skill Id: " + _id + " level " + _level + "!", IllegalActionPunishmentType.NONE);
}
} }
} }
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
if (player.getSkillLevel(skillId) > 0)
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
if (!skillLearn.getRemoveSkills().isEmpty())
{
skillLearn.getRemoveSkills().forEach(skillId ->
{
final Skill skillToRemove = player.getKnownSkill(skillId);
if (skillToRemove != null)
{
player.removeSkill(skillToRemove, true);
}
});
}
// If the player has SP and all required items then consume SP.
if (levelUpSp > 0)
{
player.setSp(player.getSp() - levelUpSp);
final UserInfo ui = new UserInfo(player);
ui.addComponentType(UserInfoType.CURRENT_HPMPCP_EXP_SP);
player.sendPacket(ui);
}
return true;
} }
return false; return false;
} }