Created
March 13, 2016 12:07
-
-
Save ChaosPaladin/2d4526d8cb7a501ee57d to your computer and use it in GitHub Desktop.
Enchant with one click
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java b/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java | |
index 5b8ee2a..12b2384 100644 | |
--- a/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java | |
+++ b/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java | |
@@ -28,7 +28,6 @@ | |
import com.l2jserver.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder; | |
import com.l2jserver.gameserver.model.L2EnchantSkillLearn; | |
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; | |
-import com.l2jserver.gameserver.model.itemcontainer.Inventory; | |
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; | |
import com.l2jserver.gameserver.model.skills.Skill; | |
import com.l2jserver.gameserver.network.SystemMessageId; | |
@@ -38,7 +37,6 @@ | |
import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillResult; | |
import com.l2jserver.gameserver.network.serverpackets.SystemMessage; | |
import com.l2jserver.gameserver.network.serverpackets.UserInfo; | |
-import com.l2jserver.util.Rnd; | |
/** | |
* Format (ch) dd c: (id) 0xD0 h: (subid) 0x06 d: skill id d: skill lvl | |
@@ -91,122 +89,63 @@ | |
return; | |
} | |
- final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); | |
+ final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); | |
+ | |
+ boolean isLast = s.getFirstRouteGroup().getId() > 4; | |
+ _skillLvl /= 100; | |
+ _skillLvl *= 100; | |
+ if (isLast) | |
+ { | |
+ _skillLvl += 15; | |
+ } | |
+ else | |
+ { | |
+ _skillLvl += 30; | |
+ } | |
+ | |
+ Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl); | |
if (skill == null) | |
{ | |
return; | |
} | |
- final L2EnchantSkillLearn s = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_skillId); | |
- if (s == null) | |
- { | |
- return; | |
- } | |
final EnchantSkillHolder esd = s.getEnchantSkillHolder(_skillLvl); | |
- final int beforeEnchantSkillLevel = player.getSkillLevel(_skillId); | |
- if (beforeEnchantSkillLevel != s.getMinSkillLevel(_skillLvl)) | |
+ | |
+ // only first lvl requires book | |
+ final int reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK; | |
+ final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); | |
+ | |
+ // ok. Destroy ONE copy of the book | |
+ final int rate = esd.getRate(player); | |
+ | |
+ if (Config.LOG_SKILL_ENCHANTS) | |
{ | |
- return; | |
+ final LogRecord record = new LogRecord(Level.INFO, "Success"); | |
+ record.setParameters(new Object[] | |
+ { | |
+ player, | |
+ skill, | |
+ spb, | |
+ rate | |
+ }); | |
+ record.setLoggerName("skill"); | |
+ _logEnchant.log(record); | |
} | |
- final int costMultiplier = EnchantSkillGroupsData.NORMAL_ENCHANT_COST_MULTIPLIER; | |
- final int requiredSp = esd.getSpCost() * costMultiplier; | |
- if (player.getSp() >= requiredSp) | |
- { | |
- // only first lvl requires book | |
- final boolean usesBook = (_skillLvl % 100) == 1; // 101, 201, 301 ... | |
- final int reqItemId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK; | |
- final L2ItemInstance spb = player.getInventory().getItemByItemId(reqItemId); | |
- | |
- if (Config.ES_SP_BOOK_NEEDED && usesBook && (spb == null)) // Haven't spellbook | |
- { | |
- player.sendPacket(SystemMessageId.YOU_DONT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); | |
- return; | |
- } | |
- | |
- final int requiredAdena = (esd.getAdenaCost() * costMultiplier); | |
- if (player.getInventory().getAdena() < requiredAdena) | |
- { | |
- player.sendPacket(SystemMessageId.YOU_DONT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); | |
- return; | |
- } | |
- | |
- boolean check = player.getStat().removeExpAndSp(0, requiredSp, false); | |
- if (Config.ES_SP_BOOK_NEEDED && usesBook) | |
- { | |
- check &= player.destroyItem("Consume", spb.getObjectId(), 1, player, true); | |
- } | |
- | |
- check &= player.destroyItemByItemId("Consume", Inventory.ADENA_ID, requiredAdena, player, true); | |
- if (!check) | |
- { | |
- player.sendPacket(SystemMessageId.YOU_DONT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL); | |
- return; | |
- } | |
- | |
- // ok. Destroy ONE copy of the book | |
- final int rate = esd.getRate(player); | |
- if (Rnd.get(100) <= rate) | |
- { | |
- if (Config.LOG_SKILL_ENCHANTS) | |
- { | |
- final LogRecord record = new LogRecord(Level.INFO, "Success"); | |
- record.setParameters(new Object[] | |
- { | |
- player, | |
- skill, | |
- spb, | |
- rate | |
- }); | |
- record.setLoggerName("skill"); | |
- _logEnchant.log(record); | |
- } | |
- | |
- player.addSkill(skill, true); | |
- player.sendPacket(ExEnchantSkillResult.valueOf(true)); | |
- | |
- final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_SUCCEEDED_IN_ENCHANTING_THE_SKILL_S1); | |
- sm.addSkillName(_skillId); | |
- player.sendPacket(sm); | |
- | |
- if (Config.DEBUG) | |
- { | |
- _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requiredAdena + " Adena."); | |
- } | |
- } | |
- else | |
- { | |
- player.addSkill(SkillData.getInstance().getSkill(_skillId, s.getBaseLevel()), true); | |
- player.sendPacket(SystemMessageId.YOU_HAVE_FAILED_TO_ENCHANT_THE_SKILL_S1); | |
- player.sendPacket(ExEnchantSkillResult.valueOf(false)); | |
- | |
- if (Config.LOG_SKILL_ENCHANTS) | |
- { | |
- final LogRecord record = new LogRecord(Level.INFO, "Fail"); | |
- record.setParameters(new Object[] | |
- { | |
- player, | |
- skill, | |
- spb, | |
- rate | |
- }); | |
- record.setLoggerName("skill"); | |
- _logEnchant.log(record); | |
- } | |
- } | |
- | |
- player.sendPacket(new UserInfo(player)); | |
- player.sendPacket(new ExBrExtraUserInfo(player)); | |
- player.sendSkillList(); | |
- final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); | |
- player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); | |
- player.sendPacket(new ExEnchantSkillInfoDetail(0, _skillId, afterEnchantSkillLevel + 1, player)); | |
- player.updateShortCuts(_skillId, afterEnchantSkillLevel); | |
- } | |
- else | |
- { | |
- player.sendPacket(SystemMessageId.YOU_DONT_HAVE_ENOUGH_SP_TO_ENCHANT_THAT_SKILL); | |
- } | |
+ player.addSkill(skill, true); | |
+ player.sendPacket(ExEnchantSkillResult.valueOf(true)); | |
+ | |
+ final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_SUCCEEDED_IN_ENCHANTING_THE_SKILL_S1); | |
+ sm.addSkillName(_skillId); | |
+ player.sendPacket(sm); | |
+ | |
+ player.sendPacket(new UserInfo(player)); | |
+ player.sendPacket(new ExBrExtraUserInfo(player)); | |
+ player.sendSkillList(); | |
+ final int afterEnchantSkillLevel = player.getSkillLevel(_skillId); | |
+ player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel)); | |
+ player.sendPacket(new ExEnchantSkillInfoDetail(0, _skillId, afterEnchantSkillLevel + 1, player)); | |
+ player.updateShortCuts(_skillId, afterEnchantSkillLevel); | |
} | |
@Override |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment