From 3a6bd6946580de1c3b6c006dd00fdac431d36f21 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 25 May 2021 00:01:56 +0000 Subject: [PATCH] Proper support for Elixirs. Contributed by manax182. --- L2J_Mobius_Classic_3.0_TheKamael/readme.txt | 3 - .../scripts/handlers/itemhandlers/Elixir.java | 30 ++++++++ .../model/actor/instance/PlayerInstance.java | 4 +- .../stats/finalizers/BaseStatFinalizer.java | 37 +++++++++ .../model/variables/PlayerVariables.java | 2 + .../network/clientpackets/EnterWorld.java | 8 -- .../stats/ExResetStatusBonus.java | 75 ++++++++++++++++--- .../clientpackets/stats/ExSetStatusBonus.java | 30 +++++--- .../network/serverpackets/UserInfo.java | 30 ++++---- 9 files changed, 169 insertions(+), 50 deletions(-) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/readme.txt b/L2J_Mobius_Classic_3.0_TheKamael/readme.txt index f202574e16..22d9d38943 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/readme.txt +++ b/L2J_Mobius_Classic_3.0_TheKamael/readme.txt @@ -107,9 +107,6 @@ The Kamael: https://eu.4game.com/patchnotes/lineage2classic/154/ -Auto potion system -Rank system -Essence: https://eu.4game.com/patchnotes/lineage2essence/188/ --Just enter game support - Customs: -Newbie Helper NPC location info -Newbie Helper buff support until 40 level diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/itemhandlers/Elixir.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/itemhandlers/Elixir.java index 287d8d7748..59feaa811d 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/itemhandlers/Elixir.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/itemhandlers/Elixir.java @@ -18,7 +18,9 @@ package handlers.itemhandlers; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; public class Elixir extends ItemSkills { @@ -30,6 +32,34 @@ public class Elixir extends ItemSkills playable.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_THIS_ITEM); return false; } + + final int elixirsAvailable = playable.getActingPlayer().getVariables().getInt(PlayerVariables.ELIXIRS_AVAILABLE, 0); + final int elixirsUsed = playable.getActingPlayer().getVariables().getInt(PlayerVariables.ELIXIRS_USED, 0) + elixirsAvailable; + if ((playable.getLevel() >= 88) && (elixirsUsed >= 10)) + { + playable.sendPacket(SystemMessageId.THE_ELIXIR_UNAVAILABLE); + return false; + } + else if ((playable.getLevel() < 88) && (playable.getLevel() >= 76) && (elixirsUsed >= 5)) + { + playable.sendPacket(SystemMessageId.THE_ELIXIR_UNAVAILABLE); + return false; + } + else if (playable.getLevel() < 76) + { + playable.sendPacket(SystemMessageId.THE_ELIXIR_UNAVAILABLE); + return false; + } + + if (!playable.getActingPlayer().destroyItem("Elixir", item.getObjectId(), 1, playable.getActingPlayer(), true)) + { + playable.sendPacket(SystemMessageId.THE_ELIXIR_UNAVAILABLE); + return false; + } + + playable.getActingPlayer().getVariables().set(PlayerVariables.ELIXIRS_AVAILABLE, elixirsAvailable + 1); + playable.sendPacket(new SystemMessage(SystemMessageId.THANKS_TO_THE_ELIXIR_CHARACTER_S_STAT_POINTS_S1).addInt(1)); + playable.getActingPlayer().broadcastUserInfo(); return super.useItem(playable, item, forceUse); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 7d9283c8b4..8e60f09c83 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -7921,7 +7921,7 @@ public class PlayerInstance extends Playable sendPacket(new HennaInfo(this)); // Send Server->Client UserInfo packet to this PlayerInstance - broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); + broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.STAT_POINTS, UserInfoType.STAT_ABILITIES, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); final long remainingTime = getVariables().getLong("HennaDuration" + slot, 0) - Chronos.currentTimeMillis(); if ((henna.getDuration() < 0) || (remainingTime > 0)) @@ -8011,7 +8011,7 @@ public class PlayerInstance extends Playable sendPacket(new HennaInfo(this)); // Send Server->Client UserInfo packet to this PlayerInstance - broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); + broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.STAT_ABILITIES, UserInfoType.STAT_POINTS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED); // Notify to scripts EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaAdd(this, henna), this); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/finalizers/BaseStatFinalizer.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/finalizers/BaseStatFinalizer.java index 1355065c58..b1d6f48d09 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/finalizers/BaseStatFinalizer.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/stats/finalizers/BaseStatFinalizer.java @@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.stats.BaseStat; import org.l2jmobius.gameserver.model.stats.IStatFunction; import org.l2jmobius.gameserver.model.stats.Stat; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; /** * @author UnAfraid @@ -47,7 +48,43 @@ public class BaseStatFinalizer implements IStatFunction // Henna calculation baseValue += player.getHennaValue(BaseStat.valueOf(stat)); + + // Bonus stats + switch (stat) + { + case STAT_STR: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_STR, 0); + break; + } + case STAT_CON: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_CON, 0); + break; + } + case STAT_DEX: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_DEX, 0); + break; + } + case STAT_INT: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_INT, 0); + break; + } + case STAT_MEN: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_MEN, 0); + break; + } + case STAT_WIT: + { + baseValue += player.getVariables().getInt(PlayerVariables.STAT_WIT, 0); + break; + } + } } + return validateValue(creature, Stat.defaultValue(creature, stat, baseValue), 1, BaseStat.MAX_STAT_VALUE - 1); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index bb78ecf215..814c3d5205 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -71,6 +71,8 @@ public class PlayerVariables extends AbstractVariables public static final String MAGIC_LAMP_COUNT = "MAGIC_LAMP_COUNT"; public static final String DEATH_POINT_COUNT = "DEATH_POINT_COUNT"; public static final String FAVORITE_TELEPORTS = "FAVORITE_TELEPORTS"; + public static final String ELIXIRS_AVAILABLE = "ELIXIRS_AVAILABLE"; + public static final String ELIXIRS_USED = "ELIXIRS_USED"; public static final String STAT_POINTS = "STAT_POINTS"; public static final String STAT_STR = "STAT_STR"; public static final String STAT_DEX = "STAT_DEX"; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index a39d0eb8d2..0c2d2a67c8 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -62,7 +62,6 @@ import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.FortSiege; import org.l2jmobius.gameserver.model.siege.Siege; import org.l2jmobius.gameserver.model.skills.AbnormalVisualEffect; -import org.l2jmobius.gameserver.model.stats.Stat; import org.l2jmobius.gameserver.model.variables.AccountVariables; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.model.zone.ZoneId; @@ -620,13 +619,6 @@ public class EnterWorld implements IClientIncomingPacket player.sendMessage("Experience gain is disabled."); } - player.getStat().mergeAdd(Stat.STAT_STR, player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); - player.getStat().mergeAdd(Stat.STAT_DEX, player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); - player.getStat().mergeAdd(Stat.STAT_CON, player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); - player.getStat().mergeAdd(Stat.STAT_INT, player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); - player.getStat().mergeAdd(Stat.STAT_WIT, player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); - player.getStat().mergeAdd(Stat.STAT_MEN, player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); - player.broadcastUserInfo(); if (BeautyShopData.getInstance().hasBeautyData(player.getRace(), player.getAppearance().getSexType())) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExResetStatusBonus.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExResetStatusBonus.java index aea81d19b5..fb4649c53a 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExResetStatusBonus.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExResetStatusBonus.java @@ -16,13 +16,15 @@ */ package org.l2jmobius.gameserver.network.clientpackets.stats; +import static org.l2jmobius.gameserver.model.itemcontainer.Inventory.LCOIN_ID; + import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; -import org.l2jmobius.gameserver.model.stats.Stat; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; +import org.l2jmobius.gameserver.network.serverpackets.limitshop.ExBloodyCoinCount; /** * @author Mobius @@ -44,16 +46,67 @@ public class ExResetStatusBonus implements IClientIncomingPacket return; } - // 200 L-Coin requirement? - if (player.reduceAdena("ExResetStatusBonus", 100000, player, true)) + final int points = player.getVariables().getInt(PlayerVariables.STAT_POINTS, 0); + int adenaCost = 5000000; + int lcoinCost = 600; + switch (points) { - player.getStat().mergeAdd(Stat.STAT_STR, -player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); - player.getStat().mergeAdd(Stat.STAT_DEX, -player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); - player.getStat().mergeAdd(Stat.STAT_CON, -player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); - player.getStat().mergeAdd(Stat.STAT_INT, -player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); - player.getStat().mergeAdd(Stat.STAT_WIT, -player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); - player.getStat().mergeAdd(Stat.STAT_MEN, -player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); - + case 1: + case 2: + case 3: + case 4: + case 5: + { + adenaCost = 200000; + lcoinCost = 200; + break; + } + case 6: + case 7: + case 8: + case 9: + case 10: + { + adenaCost = 500000; + lcoinCost = 300; + break; + } + case 11: + case 12: + case 13: + case 14: + case 15: + { + adenaCost = 1000000; + lcoinCost = 400; + break; + } + case 16: + case 17: + case 18: + case 19: + case 20: + { + adenaCost = 2000000; + lcoinCost = 500; + break; + } + case 21: + case 22: + case 23: + case 24: + case 25: + { + adenaCost = 5000000; + lcoinCost = 600; + break; + } + } + + if (player.reduceAdena("ExResetStatusBonus", adenaCost, player, true) && (player.getInventory().getInventoryItemCount(LCOIN_ID, -1) >= lcoinCost)) + { + player.getInventory().destroyItemByItemId("ExResetStatusBonus", LCOIN_ID, lcoinCost, player, true); + player.sendPacket(new ExBloodyCoinCount(player)); player.getVariables().remove(PlayerVariables.STAT_POINTS); player.getVariables().remove(PlayerVariables.STAT_STR); player.getVariables().remove(PlayerVariables.STAT_DEX); @@ -61,6 +114,8 @@ public class ExResetStatusBonus implements IClientIncomingPacket player.getVariables().remove(PlayerVariables.STAT_INT); player.getVariables().remove(PlayerVariables.STAT_WIT); player.getVariables().remove(PlayerVariables.STAT_MEN); + player.getVariables().set(PlayerVariables.ELIXIRS_AVAILABLE, player.getVariables().getInt(PlayerVariables.ELIXIRS_USED, 0) + player.getVariables().getInt(PlayerVariables.ELIXIRS_AVAILABLE, 0)); + player.getVariables().remove(PlayerVariables.ELIXIRS_USED); player.sendPacket(new UserInfo(player)); player.getStat().recalculateStats(true); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExSetStatusBonus.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExSetStatusBonus.java index 08a395f084..c82441fe47 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExSetStatusBonus.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/stats/ExSetStatusBonus.java @@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.clientpackets.stats; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; -import org.l2jmobius.gameserver.model.stats.Stat; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -39,8 +38,8 @@ public class ExSetStatusBonus implements IClientIncomingPacket @Override public boolean read(GameClient client, PacketReader packet) { - packet.readH(); // ? - packet.readH(); // ? + packet.readH(); // unk + packet.readH(); // totalBonus _str = packet.readH(); _dex = packet.readH(); _con = packet.readH(); @@ -64,45 +63,52 @@ public class ExSetStatusBonus implements IClientIncomingPacket } final int usedPoints = player.getVariables().getInt(PlayerVariables.STAT_POINTS, 0); + final int elixirsAvailable = player.getVariables().getInt(PlayerVariables.ELIXIRS_AVAILABLE, 0); + final int elixirsUsed = player.getVariables().getInt(PlayerVariables.ELIXIRS_USED, 0); final int currentPoints = _str + _dex + _con + _int + _wit + _men; - if ((player.getLevel() - 75 - usedPoints - currentPoints) < 0) + if ((((player.getLevel() - 75) + elixirsAvailable) - usedPoints - currentPoints) < 0) { return; } - player.getVariables().set(PlayerVariables.STAT_POINTS, usedPoints + currentPoints); + if (((player.getLevel() - 75) - usedPoints - currentPoints) < 0) + { + final int neededElixirs = -((player.getLevel() - 75) - usedPoints - currentPoints); + final int neededPoints = currentPoints - neededElixirs; + + player.getVariables().set(PlayerVariables.ELIXIRS_AVAILABLE, Math.min(0, elixirsAvailable - neededElixirs)); + player.getVariables().set(PlayerVariables.ELIXIRS_USED, elixirsUsed + neededElixirs); + player.getVariables().set(PlayerVariables.STAT_POINTS, usedPoints + neededPoints); + } + else + { + player.getVariables().set(PlayerVariables.STAT_POINTS, usedPoints + currentPoints); + } if (_str > 0) { player.getVariables().set(PlayerVariables.STAT_STR, player.getVariables().getInt(PlayerVariables.STAT_STR, 0) + _str); - player.getStat().mergeAdd(Stat.STAT_STR, _str); } if (_dex > 0) { player.getVariables().set(PlayerVariables.STAT_DEX, player.getVariables().getInt(PlayerVariables.STAT_DEX, 0) + _dex); - player.getStat().mergeAdd(Stat.STAT_DEX, _dex); } if (_con > 0) { player.getVariables().set(PlayerVariables.STAT_CON, player.getVariables().getInt(PlayerVariables.STAT_CON, 0) + _con); - player.getStat().mergeAdd(Stat.STAT_CON, _con); } if (_int > 0) { player.getVariables().set(PlayerVariables.STAT_INT, player.getVariables().getInt(PlayerVariables.STAT_INT, 0) + _int); - player.getStat().mergeAdd(Stat.STAT_INT, _int); } if (_wit > 0) { player.getVariables().set(PlayerVariables.STAT_WIT, player.getVariables().getInt(PlayerVariables.STAT_WIT, 0) + _wit); - player.getStat().mergeAdd(Stat.STAT_WIT, _wit); } if (_men > 0) { player.getVariables().set(PlayerVariables.STAT_MEN, player.getVariables().getInt(PlayerVariables.STAT_MEN, 0) + _men); - player.getStat().mergeAdd(Stat.STAT_MEN, _men); } player.sendPacket(new UserInfo(player)); - player.getStat().recalculateStats(true); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java index ad2d94aea0..05314cc796 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java @@ -427,32 +427,32 @@ public class UserInfo extends AbstractMaskPacket if (containsMask(UserInfoType.STAT_POINTS)) // 235 { packet.writeH(16); - packet.writeH(_player.getLevel() < 76 ? 0 : _player.getLevel() - 75 - _player.getVariables().getInt(PlayerVariables.STAT_POINTS, 0)); // Usable points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); // STR points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); // DEX points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); // CON points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); // INT points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); // WIT points - packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); // MEN points + packet.writeH(_player.getLevel() < 76 ? 0 : (_player.getLevel() - 75) + _player.getVariables().getInt(PlayerVariables.ELIXIRS_AVAILABLE, 0) + _player.getVariables().getInt(PlayerVariables.ELIXIRS_USED, 0)); // Usable points + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); + packet.writeH(_player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); } if (containsMask(UserInfoType.STAT_ABILITIES)) // 235 { packet.writeH(18); - packet.writeH(_player.getStat().getSTR() - _player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); // additional STR - packet.writeH(_player.getStat().getDEX() - _player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); // additional DEX - packet.writeH(_player.getStat().getCON() - _player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); // additional CON - packet.writeH(_player.getStat().getINT() - _player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); // additional INT - packet.writeH(_player.getStat().getWIT() - _player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); // additional WIT - packet.writeH(_player.getStat().getMEN() - _player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); // additional MEN + packet.writeH(_player.getSTR() - _player.getTemplate().getBaseSTR() - _player.getVariables().getInt(PlayerVariables.STAT_STR, 0)); // additional STR + packet.writeH(_player.getDEX() - _player.getTemplate().getBaseDEX() - _player.getVariables().getInt(PlayerVariables.STAT_DEX, 0)); // additional DEX + packet.writeH(_player.getCON() - _player.getTemplate().getBaseCON() - _player.getVariables().getInt(PlayerVariables.STAT_CON, 0)); // additional CON + packet.writeH(_player.getINT() - _player.getTemplate().getBaseINT() - _player.getVariables().getInt(PlayerVariables.STAT_INT, 0)); // additional INT + packet.writeH(_player.getWIT() - _player.getTemplate().getBaseWIT() - _player.getVariables().getInt(PlayerVariables.STAT_WIT, 0)); // additional WIT + packet.writeH(_player.getMEN() - _player.getTemplate().getBaseMEN() - _player.getVariables().getInt(PlayerVariables.STAT_MEN, 0)); // additional MEN packet.writeH(0x00); packet.writeH(0x00); } if (containsMask(UserInfoType.ELIXIR_USED)) // 286 { - packet.writeH(0x00); // count - packet.writeD(0x00); + packet.writeD(_player.getVariables().getInt(PlayerVariables.ELIXIRS_USED, 0)); // count + packet.writeH(0); } // Send exp bonus change.