diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/db_installer/sql/game/character_potens.sql b/L2J_Mobius_Essence_6.2_Vanguard/dist/db_installer/sql/game/character_potens.sql index 6c38205e83..16b2a7bc7c 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/db_installer/sql/game/character_potens.sql +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/db_installer/sql/game/character_potens.sql @@ -1,8 +1,9 @@ DROP TABLE IF EXISTS `character_potens`; CREATE TABLE IF NOT EXISTS `character_potens` ( `charId` INT UNSIGNED NOT NULL DEFAULT 0, + `slot_position` INT NOT NULL DEFAULT 0, + `poten_id` INT NOT NULL DEFAULT 0, `enchant_level` INT NOT NULL DEFAULT 0, `enchant_exp` INT NOT NULL DEFAULT 0, - `poten_id` INT NOT NULL DEFAULT 0, - PRIMARY KEY (`charId`,`poten_id`) + PRIMARY KEY (`charId`,`slot_position`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; \ No newline at end of file diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/hennaPatternPotential.xml b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/hennaPatternPotential.xml index 4d7fb7d4c7..10a53520c1 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/hennaPatternPotential.xml +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/hennaPatternPotential.xml @@ -2,20 +2,20 @@ - + 5 - + 5 - + 10 @@ -25,26 +25,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/45200-45299.xml b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/45200-45299.xml index b243330f48..11f1e2341d 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/45200-45299.xml +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/stats/skills/45200-45299.xml @@ -7924,7 +7924,7 @@ 5 - 4 + 1 diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/HennaPatternPotentialData.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/HennaPatternPotentialData.java index defa0ae9c2..90db82aa7d 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/HennaPatternPotentialData.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/HennaPatternPotentialData.java @@ -47,6 +47,7 @@ public class HennaPatternPotentialData implements IXmlReader private final Map _potentials = new HashMap<>(); private int MAX_POTEN_LEVEL = 0; + private int MAX_POTEN_EXP = 0; protected HennaPatternPotentialData() { @@ -145,6 +146,10 @@ public class HennaPatternPotentialData implements IXmlReader { MAX_POTEN_LEVEL = level; } + if (MAX_POTEN_EXP < exp) + { + MAX_POTEN_EXP = exp; + } } } break; @@ -199,6 +204,11 @@ public class HennaPatternPotentialData implements IXmlReader return MAX_POTEN_LEVEL; } + public int getMaxPotenExp() + { + return MAX_POTEN_EXP; + } + public DyePotential getPotential(int potenId) { return _potentials.get(potenId); diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java index 421b25c579..a48a0bfc30 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -443,8 +443,8 @@ public class Player extends Playable private static final String RESTORE_CHAR_HENNAS = "SELECT slot,symbol_id FROM character_hennas WHERE charId=? AND class_index=?"; private static final String ADD_CHAR_HENNA = "INSERT INTO character_hennas (charId,symbol_id,slot,class_index) VALUES (?,?,?,?)"; private static final String DELETE_CHAR_HENNA = "DELETE FROM character_hennas WHERE charId=? AND slot=? AND class_index=?"; - private static final String ADD_CHAR_HENNA_POTENS = "REPLACE INTO character_potens (charId,enchant_level,enchant_exp,poten_id) VALUES (?,?,?,?)"; - private static final String RESTORE_CHAR_HENNA_POTENS = "SELECT poten_id,enchant_level,enchant_exp FROM character_potens WHERE charId=?"; + private static final String ADD_CHAR_HENNA_POTENS = "REPLACE INTO character_potens (charId,slot_position,poten_id,enchant_level,enchant_exp) VALUES (?,?,?,?,?)"; + private static final String RESTORE_CHAR_HENNA_POTENS = "SELECT slot_position,poten_id,enchant_level,enchant_exp FROM character_potens WHERE charId=?"; // Character Shortcut SQL String Definitions: private static final String DELETE_CHAR_SHORTCUTS = "DELETE FROM character_shortcuts WHERE charId=? AND class_index=?"; @@ -8062,6 +8062,7 @@ public class Player extends Playable // Calculate henna modifiers of this player. recalcHennaStats(); + applyDyePotenSkills(); } /** @@ -8289,15 +8290,12 @@ public class Player extends Playable { while (rset.next()) { - final int potenId = rset.getInt("poten_id"); - if (potenId > 0) - { - _hennaPoten[pos] = new HennaPoten(); - _hennaPoten[pos].setEnchantLevel(rset.getInt("enchant_level")); - _hennaPoten[pos].setEnchantExp(rset.getInt("enchant_exp")); - _hennaPoten[pos].setPotenId(potenId); - pos++; - } + _hennaPoten[pos] = new HennaPoten(); + _hennaPoten[pos].setSlotPosition(rset.getInt("slot_position")); + _hennaPoten[pos].setEnchantLevel(rset.getInt("enchant_level")); + _hennaPoten[pos].setEnchantExp(rset.getInt("enchant_exp")); + _hennaPoten[pos].setPotenId(rset.getInt("poten_id")); + pos++; } } } @@ -8318,15 +8316,16 @@ public class Player extends Playable { for (int i = 0; i < 4; i++) { - if ((_hennaPoten[i] != null) && (_hennaPoten[i].getPotenId() > 0)) + if ((_hennaPoten[i] != null) && (_hennaPoten[i].getSlotPosition() > 0)) { try (Connection con = DatabaseFactory.getConnection(); PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA_POTENS)) { statement.setInt(1, getObjectId()); - statement.setInt(2, _hennaPoten[i].getEnchantLevel()); - statement.setInt(3, _hennaPoten[i].getEnchantExp()); - statement.setInt(4, _hennaPoten[i].getPotenId()); + statement.setInt(2, _hennaPoten[i].getSlotPosition()); + statement.setInt(3, _hennaPoten[i].getPotenId()); + statement.setInt(4, _hennaPoten[i].getEnchantLevel()); + statement.setInt(5, _hennaPoten[i].getEnchantExp()); statement.execute(); } catch (Exception e) @@ -8422,7 +8421,7 @@ public class Player extends Playable public int getAvailableHennaSlots() { - return (int) getStat().getValue(Stat.HENNA_SLOTS_AVAILABLE, 3); + return (int) getStat().getValue(Stat.HENNA_SLOTS_AVAILABLE, 4); } public void setDyePotentialDailyStep(int dailyStep) @@ -8445,26 +8444,6 @@ public class Player extends Playable return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_COUNT, 5); } - public void setDyePotentialDailyExp(int dailyExp) - { - getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_EXP, dailyExp); - } - - public int getDyePotentialDailyExp() - { - return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_EXP, 0); - } - - public void setDyePotentialenchantStep(int enchantlvl) - { - getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_LVL, enchantlvl); - } - - public int getDyePotentialenchantStep() - { - return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_LVL, 0); - } - /** * @return map of all henna base stats bonus */ diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/item/henna/HennaPoten.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/item/henna/HennaPoten.java index 8dfe1f678f..3fe4e9a21c 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/item/henna/HennaPoten.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/item/henna/HennaPoten.java @@ -16,6 +16,8 @@ */ package org.l2jmobius.gameserver.model.item.henna; +import org.l2jmobius.gameserver.data.xml.HennaPatternPotentialData; + /** * @author Serenitty */ @@ -25,6 +27,7 @@ public class HennaPoten private int _potenId; private int _enchantLevel = 1; private int _enchantExp; + private int _slotPosition; public HennaPoten() { @@ -45,6 +48,16 @@ public class HennaPoten _potenId = val; } + public int getSlotPosition() + { + return _slotPosition; + } + + public void setSlotPosition(int val) + { + _slotPosition = val; + } + public int getPotenId() { return _potenId; @@ -67,12 +80,17 @@ public class HennaPoten public int getEnchantExp() { + if (_enchantExp > HennaPatternPotentialData.getInstance().getMaxPotenExp()) + { + _enchantExp = HennaPatternPotentialData.getInstance().getMaxPotenExp(); + return _enchantExp; + } return _enchantExp; } public boolean isPotentialAvailable() { - return (_henna != null) && (_henna.getPatternLevel() > 0); + return (_henna != null) && (_enchantLevel > 1); } public int getActiveStep() @@ -81,6 +99,12 @@ public class HennaPoten { return 0; } - return Math.min(_enchantLevel, _henna.getPatternLevel()); + + if (_enchantExp == HennaPatternPotentialData.getInstance().getMaxPotenExp()) + { + return Math.min(_enchantLevel, _henna.getPatternLevel()); + } + + return Math.min(_enchantLevel - 1, _henna.getPatternLevel()); } } \ No newline at end of file diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 2272dc152c..1538a79131 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -90,8 +90,6 @@ public class PlayerVariables extends AbstractVariables public static final String HENNA4_DURATION = "HENNA4_DURATION"; public static final String DYE_POTENTIAL_DAILY_STEP = "DYE_POTENTIAL_DAILY_STEP"; public static final String DYE_POTENTIAL_DAILY_COUNT = "DYE_POTENTIAL_DAILY_COUNT"; - public static final String DYE_POTENTIAL_DAILY_EXP = "DYE_POTENTIAL_DAILY_EXP"; - public static final String DYE_POTENTIAL_DAILY_LVL = "DYE_POTENTIAL_DAILY_LVL"; public static final String MISSION_LEVEL_PROGRESS = "MISSION_LEVEL_PROGRESS_"; private final int _objectId; diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/newhenna/RequestNewHennaPotenEnchant.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/newhenna/RequestNewHennaPotenEnchant.java index 739dce9eae..fa79777fbf 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/newhenna/RequestNewHennaPotenEnchant.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/clientpackets/newhenna/RequestNewHennaPotenEnchant.java @@ -34,11 +34,13 @@ import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaPotenEnch public class RequestNewHennaPotenEnchant implements IClientIncomingPacket { private int _slotId; + private int _costItemId; @Override public boolean read(GameClient client, PacketReader packet) { _slotId = packet.readC(); + _costItemId = packet.readD(); return true; } @@ -51,23 +53,42 @@ public class RequestNewHennaPotenEnchant implements IClientIncomingPacket return; } + int dailyStep = player.getDyePotentialDailyStep(); + final DyePotentialFee currentFee = HennaPatternPotentialData.getInstance().getFee(dailyStep); + int dailyCount = player.getDyePotentialDailyCount(); if ((_slotId < 1) || (_slotId > 4)) { return; } - int dailyStep = player.getDyePotentialDailyStep(); - final DyePotentialFee currentFee = HennaPatternPotentialData.getInstance().getFee(dailyStep); - int dailyCount = player.getDyePotentialDailyCount(); + final HennaPoten hennaPattern = player.getHennaPoten(_slotId); + int enchantExp = hennaPattern.getEnchantExp(); + final int fullExpNeeded = HennaPatternPotentialData.getInstance().getExpForLevel(hennaPattern.getEnchantLevel()); + if ((enchantExp >= fullExpNeeded) && (hennaPattern.getEnchantLevel() == 20)) + { + player.sendPacket(new NewHennaPotenEnchant(_slotId, hennaPattern.getEnchantLevel(), hennaPattern.getEnchantExp(), dailyStep, dailyCount, hennaPattern.getActiveStep(), true)); + return; + } + if ((currentFee == null) || (dailyCount <= 0)) { return; } - if (!player.destroyItemByItemId(getClass().getSimpleName(), currentFee.getItem().getId(), currentFee.getItem().getCount(), player, true)) + int costItemID = 0; + if (_costItemId == 97147) // Dye Powder + { + costItemID = _costItemId; + } + else + { + costItemID = currentFee.getItem().getId(); + } + if (!player.destroyItemByItemId(getClass().getSimpleName(), costItemID, currentFee.getItem().getCount(), player, true)) { return; } + dailyCount -= 1; if ((dailyCount <= 0) && (dailyStep != HennaPatternPotentialData.getInstance().getMaxPotenEnchantStep())) { @@ -84,6 +105,7 @@ public class RequestNewHennaPotenEnchant implements IClientIncomingPacket { player.setDyePotentialDailyCount(dailyCount); } + double totalChance = 0; double random = Rnd.nextDouble() * 100; for (Entry entry : currentFee.getEnchantExp().entrySet()) @@ -91,21 +113,22 @@ public class RequestNewHennaPotenEnchant implements IClientIncomingPacket totalChance += entry.getValue(); if (random <= totalChance) { - final HennaPoten poten = player.getHennaPoten(_slotId); + final int increase = entry.getKey(); - int newEnchantExp = poten.getEnchantExp() + increase; - final int tatooExpNeeded = HennaPatternPotentialData.getInstance().getExpForLevel(poten.getEnchantLevel()); - if (newEnchantExp >= tatooExpNeeded) + int newEnchantExp = hennaPattern.getEnchantExp() + increase; + final int PatternExpNeeded = HennaPatternPotentialData.getInstance().getExpForLevel(hennaPattern.getEnchantLevel()); + if ((newEnchantExp >= PatternExpNeeded) && (hennaPattern.getEnchantLevel() < 20)) { - newEnchantExp -= tatooExpNeeded; - if (poten.getEnchantLevel() < HennaPatternPotentialData.getInstance().getMaxPotenLevel()) + newEnchantExp -= PatternExpNeeded; + if (hennaPattern.getEnchantLevel() < HennaPatternPotentialData.getInstance().getMaxPotenLevel()) { - poten.setEnchantLevel(poten.getEnchantLevel() + 1); + hennaPattern.setEnchantLevel(hennaPattern.getEnchantLevel() + 1); player.applyDyePotenSkills(); } } - poten.setEnchantExp(newEnchantExp); - player.sendPacket(new NewHennaPotenEnchant(_slotId, poten.getEnchantLevel(), poten.getEnchantExp(), dailyStep, dailyCount, poten.getActiveStep(), true)); + hennaPattern.setEnchantExp(newEnchantExp); + hennaPattern.setSlotPosition(_slotId); + player.sendPacket(new NewHennaPotenEnchant(_slotId, hennaPattern.getEnchantLevel(), hennaPattern.getEnchantExp(), dailyStep, dailyCount, hennaPattern.getActiveStep(), true)); return; } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/newhenna/NewHennaList.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/newhenna/NewHennaList.java index 9b75e8d2d0..ea65b8f7fb 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/newhenna/NewHennaList.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/newhenna/NewHennaList.java @@ -30,19 +30,16 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; public class NewHennaList implements IClientOutgoingPacket { private final HennaPoten[] _hennaId; - private final int _activeslots; private final int _dailyStep; private final int _dailyCount; - @SuppressWarnings("unused") - private final int _enchantExp; + private final int _availableSlots; public NewHennaList(Player player) { _dailyStep = player.getDyePotentialDailyStep(); _dailyCount = player.getDyePotentialDailyCount(); _hennaId = player.getHennaPotenList(); - _activeslots = player.getAvailableHennaSlots(); - _enchantExp = player.getDyePotentialDailyExp(); + _availableSlots = player.getAvailableHennaSlots(); } @Override @@ -56,13 +53,12 @@ public class NewHennaList implements IClientOutgoingPacket { final HennaPoten hennaPoten = _hennaId[i - 1]; final Henna henna = _hennaId[i - 1].getHenna(); - int isactiveStep = hennaPoten.getActiveStep(); - packet.writeD(henna != null ? henna.getDyeId() : 0x00); - packet.writeD(isactiveStep == 0 ? 0 : hennaPoten.getPotenId()); - packet.writeC(_activeslots); + packet.writeD(henna != null ? henna.getDyeId() : 0); + packet.writeD(hennaPoten.getPotenId()); + packet.writeC(i == _availableSlots ? 0 : 1); packet.writeH(hennaPoten.getEnchantLevel()); packet.writeD(hennaPoten.getEnchantExp()); - packet.writeH(isactiveStep); + packet.writeH(hennaPoten.getActiveStep()); } return true; }