From a732e1a7847b115e7123608c80ddc5078c7e98c4 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 18 Jul 2022 22:39:36 +0000 Subject: [PATCH] Homunculus related cleanups. --- .../data/xml/HomunculusCreationData.java | 40 ++++++++++++++----- .../gameserver/data/xml/HomunculusData.java | 15 +++---- .../HomunculusCreationTemplate.java | 2 +- .../RequestExHomunculusCreateStart.java | 12 ++---- .../homunculus/RequestExHomunculusInsert.java | 18 +++------ .../homunculus/RequestExHomunculusSummon.java | 10 ++--- .../homunculus/ExShowHomunculusBirthInfo.java | 9 ++--- .../data/xml/HomunculusCreationData.java | 40 ++++++++++++++----- .../gameserver/data/xml/HomunculusData.java | 15 +++---- .../data/xml/HomunculusSlotData.java | 20 ++++------ .../HomunculusCreationTemplate.java | 2 +- .../RequestExHomunculusActivateSlot.java | 7 +--- .../RequestExHomunculusCreateStart.java | 12 ++---- .../homunculus/RequestExHomunculusInsert.java | 18 +++------ .../homunculus/RequestExHomunculusSummon.java | 10 ++--- ...RequestExSummonHomunculusCouponResult.java | 33 ++++++--------- .../homunculus/ExShowHomunculusBirthInfo.java | 9 ++--- .../data/xml/HomunculusCreationData.java | 40 ++++++++++++++----- .../gameserver/data/xml/HomunculusData.java | 15 +++---- .../data/xml/HomunculusSlotData.java | 20 ++++------ .../HomunculusCreationTemplate.java | 2 +- .../RequestExHomunculusActivateSlot.java | 7 +--- .../RequestExHomunculusCreateStart.java | 12 ++---- .../homunculus/RequestExHomunculusInsert.java | 18 +++------ .../homunculus/RequestExHomunculusSummon.java | 10 ++--- ...RequestExSummonHomunculusCouponResult.java | 33 ++++++--------- .../homunculus/ExShowHomunculusBirthInfo.java | 9 ++--- .../data/xml/HomunculusCreationData.java | 40 ++++++++++++++----- .../gameserver/data/xml/HomunculusData.java | 15 +++---- .../data/xml/HomunculusSlotData.java | 20 ++++------ .../HomunculusCreationTemplate.java | 2 +- .../ExHomunculusCouponProbabilityList.java | 15 ++----- .../RequestExHomunculusActivateSlot.java | 7 +--- .../RequestExHomunculusCreateStart.java | 12 ++---- .../homunculus/RequestExHomunculusInsert.java | 18 +++------ .../homunculus/RequestExHomunculusSummon.java | 10 ++--- ...RequestExSummonHomunculusCouponResult.java | 33 ++++++--------- .../ExHomunculusCreateProbabilityList.java | 14 +++---- .../homunculus/ExShowHomunculusBirthInfo.java | 9 ++--- 39 files changed, 282 insertions(+), 351 deletions(-) diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java index 088ebb8432..ee7890f3a1 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java @@ -18,10 +18,9 @@ package org.l2jmobius.gameserver.data.xml; import java.io.File; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -37,7 +36,9 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; */ public class HomunculusCreationData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final List TEMPLATES = new ArrayList<>(); + + private HomunculusCreationTemplate _defaultTemplate; protected HomunculusCreationData() { @@ -47,9 +48,10 @@ public class HomunculusCreationData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); + _defaultTemplate = null; parseDatapackFile("data/HomunculusCreationData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -115,7 +117,12 @@ public class HomunculusCreationData implements IXmlReader } } - _templates.put(slotId, new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances)); + final HomunculusCreationTemplate template = new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances); + TEMPLATES.add(template); + if (_defaultTemplate == null) + { + _defaultTemplate = template; + } } } } @@ -153,14 +160,26 @@ public class HomunculusCreationData implements IXmlReader return chanceList; } - public HomunculusCreationTemplate getTemplate(int id) + public HomunculusCreationTemplate getTemplateByItemId(int itemId) { - return _templates.get(id); + for (HomunculusCreationTemplate template : TEMPLATES) + { + if (template.isInstanceHaveCoupon(itemId)) + { + return template; + } + } + return null; } - public int size() + public HomunculusCreationTemplate getDefaultTemplate() { - return _templates.size(); + return _defaultTemplate; + } + + public Collection getTemplates() + { + return TEMPLATES; } public static HomunculusCreationData getInstance() @@ -172,4 +191,5 @@ public class HomunculusCreationData implements IXmlReader { protected static final HomunculusCreationData INSTANCE = new HomunculusCreationData(); } + } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java index a490287ec5..ce590f49b6 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java @@ -31,7 +31,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; */ public class HomunculusData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusData() { @@ -41,9 +41,9 @@ public class HomunculusData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -53,18 +53,13 @@ public class HomunculusData implements IXmlReader { final StatSet set = new StatSet(parseAttributes(homunculusNode)); final int id = set.getInt("id"); - _templates.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); + TEMPLATES.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); })); } public HomunculusTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusData getInstance() diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java index 8a9d603ba6..3487ce66c0 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java @@ -130,7 +130,7 @@ public class HomunculusCreationTemplate return false; } - public long getCreationLime() + public long getCreationTime() { return _time; } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java index b3b5c331de..2251febc2f 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -32,10 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusCreateStart implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final int COST = Math.toIntExact(TEMPLATE.getItemFee().get(0).getCount()); - private static final long CREATION_TIME = TEMPLATE.getCreationLime(); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -51,14 +46,15 @@ public class RequestExHomunculusCreateStart implements IClientIncomingPacket return; } - if (player.getAdena() < COST) + final int fee = Math.toIntExact(HomunculusCreationData.getInstance().getDefaultTemplate().getItemFee().get(0).getCount()); + if (player.getAdena() < fee) { player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA_2); return; } - player.reduceAdena("Homunculus creation", COST, player, true); - player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + CREATION_TIME); + player.reduceAdena("Homunculus creation", fee, player, true); + player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + HomunculusCreationData.getInstance().getDefaultTemplate().getCreationTime()); client.sendPacket(new ExShowHomunculusBirthInfo(player)); client.sendPacket(new ExHomunculusCreateStartResult(player)); diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java index dde47a5571..ad07036dcc 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -32,11 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusInsert implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final short HP_COST = (short) TEMPLATE.getHPFeeCountByUse(); - private static final long SP_COST = TEMPLATE.getSPFeeCountByUse(); - private static final int VP_COST = TEMPLATE.getVPFeeByUse(); - private int _type; @Override @@ -61,9 +55,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket { case 0: { - if ((player.getCurrentHp() > HP_COST) && (hpPoints < TEMPLATE.getHPFeeCount())) + if ((player.getCurrentHp() > HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse()) && (hpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount())) { - int newHp = (int) (player.getCurrentHp()) - HP_COST; + int newHp = (int) (player.getCurrentHp()) - HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse(); player.setCurrentHp(newHp, true); hpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_HP_POINTS, hpPoints); @@ -76,9 +70,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 1: { - if ((player.getSp() >= SP_COST) && (spPoints < TEMPLATE.getSPFeeCount())) + if ((player.getSp() >= HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()) && (spPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount())) { - player.setSp(player.getSp() - SP_COST); + player.setSp(player.getSp() - HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()); spPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_SP_POINTS, spPoints); } @@ -90,9 +84,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 2: { - if ((player.getVitalityPoints() >= VP_COST) && (vpPoints < TEMPLATE.getVPFeeCount())) + if ((player.getVitalityPoints() >= HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse()) && (vpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { - int newVitality = player.getVitalityPoints() - VP_COST; + int newVitality = player.getVitalityPoints() - HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse(); player.setVitalityPoints(newVitality, true); vpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_VP_POINTS, vpPoints); diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java index d4b6e7f73b..f18fa30c95 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.data.xml.HomunculusData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.homunculus.Homunculus; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; @@ -37,8 +36,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusSummon implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -60,22 +57,21 @@ public class RequestExHomunculusSummon implements IClientIncomingPacket final int vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); final int homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == TEMPLATE.getHPFeeCount()) && (spPoints == TEMPLATE.getSPFeeCount()) && (vpPoints == TEMPLATE.getVPFeeCount())) + if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount()) && (spPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount()) && (vpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { double chance = Rnd.get(100.0); double current = 0; int homunculusId = 0; while (homunculusId == 0) { - if (chance > TEMPLATE.getMaxChance()) + if (chance > HomunculusCreationData.getInstance().getDefaultTemplate().getMaxChance()) { player.sendMessage("Homunculus is not created!"); player.sendPacket(new ExHomunculusSummonResult(0)); return; } - for (int i = 0; i < TEMPLATE.getCreationChance().size(); i++) + for (Double[] homuHolder : HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance()) { - final Double[] homuHolder = TEMPLATE.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java index 33d7857cba..a032e8b137 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.serverpackets.homunculus; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -29,8 +28,6 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private final int _hpPoints; private final int _spPoints; private final int _vpPoints; @@ -45,9 +42,9 @@ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket _spPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_SP_POINTS, 0); _vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); _homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - _feeHpPoints = TEMPLATE.getHPFeeCount(); - _feeSpPoints = (int) TEMPLATE.getSPFeeCount(); - _feeVpPoints = TEMPLATE.getVPFeeCount(); + _feeHpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount(); + _feeSpPoints = (int) HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount(); + _feeVpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount(); } @Override diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java index 088ebb8432..ee7890f3a1 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java @@ -18,10 +18,9 @@ package org.l2jmobius.gameserver.data.xml; import java.io.File; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -37,7 +36,9 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; */ public class HomunculusCreationData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final List TEMPLATES = new ArrayList<>(); + + private HomunculusCreationTemplate _defaultTemplate; protected HomunculusCreationData() { @@ -47,9 +48,10 @@ public class HomunculusCreationData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); + _defaultTemplate = null; parseDatapackFile("data/HomunculusCreationData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -115,7 +117,12 @@ public class HomunculusCreationData implements IXmlReader } } - _templates.put(slotId, new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances)); + final HomunculusCreationTemplate template = new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances); + TEMPLATES.add(template); + if (_defaultTemplate == null) + { + _defaultTemplate = template; + } } } } @@ -153,14 +160,26 @@ public class HomunculusCreationData implements IXmlReader return chanceList; } - public HomunculusCreationTemplate getTemplate(int id) + public HomunculusCreationTemplate getTemplateByItemId(int itemId) { - return _templates.get(id); + for (HomunculusCreationTemplate template : TEMPLATES) + { + if (template.isInstanceHaveCoupon(itemId)) + { + return template; + } + } + return null; } - public int size() + public HomunculusCreationTemplate getDefaultTemplate() { - return _templates.size(); + return _defaultTemplate; + } + + public Collection getTemplates() + { + return TEMPLATES; } public static HomunculusCreationData getInstance() @@ -172,4 +191,5 @@ public class HomunculusCreationData implements IXmlReader { protected static final HomunculusCreationData INSTANCE = new HomunculusCreationData(); } + } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java index a490287ec5..ce590f49b6 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java @@ -31,7 +31,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; */ public class HomunculusData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusData() { @@ -41,9 +41,9 @@ public class HomunculusData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -53,18 +53,13 @@ public class HomunculusData implements IXmlReader { final StatSet set = new StatSet(parseAttributes(homunculusNode)); final int id = set.getInt("id"); - _templates.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); + TEMPLATES.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); })); } public HomunculusTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusData getInstance() diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java index 5fd6b439cf..3cfe99a126 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java @@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusSlotTemplate; */ public class HomunculusSlotData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusSlotData() { @@ -47,9 +47,9 @@ public class HomunculusSlotData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusSlotData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -74,18 +74,17 @@ public class HomunculusSlotData implements IXmlReader set.set(att.getNodeName(), att.getNodeValue()); } - final int slotId = set.getInt("slotId"); - final Boolean isEnabled = set.getBoolean("isEnabled", false); List fee = Collections.emptyList(); - for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { if ("fee".equalsIgnoreCase(c.getNodeName())) { fee = getItemList(c); + break; } } - _templates.put(slotId, new HomunculusSlotTemplate(slotId, fee, isEnabled)); + final int slotId = set.getInt("slotId"); + TEMPLATES.put(slotId, new HomunculusSlotTemplate(slotId, fee, set.getBoolean("isEnabled", false))); } } } @@ -109,12 +108,7 @@ public class HomunculusSlotData implements IXmlReader public HomunculusSlotTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusSlotData getInstance() diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java index 8a9d603ba6..3487ce66c0 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java @@ -130,7 +130,7 @@ public class HomunculusCreationTemplate return false; } - public long getCreationLime() + public long getCreationTime() { return _time; } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java index 2e7091f037..11400c01a7 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java @@ -72,18 +72,16 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } final List fee = template.getPrice(); - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) == null) || ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) != null) && (activeChar.getInventory().getItemByItemId(feeHolder.getId()).getCount() < feeHolder.getCount()))) { activeChar.sendPacket(new ExActivateHomunculusResult(false)); return; } } - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if (!activeChar.destroyItemByItemId("Homunclus slot unlock", feeHolder.getId(), feeHolder.getCount(), activeChar, true)) { Logger.getLogger(getClass().getSimpleName() + " player " + activeChar.getName() + " " + activeChar.getObjectId() + " trying unlock slot without items!"); @@ -92,7 +90,6 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } } - // activeChar.sendItemList(); activeChar.broadcastUserInfo(); activeChar.getVariables().set(PlayerVariables.HOMUNCULUS_OPENED_SLOT_COUNT, _slot); activeChar.sendPacket(new ExHomunculusPointInfo(activeChar)); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java index b3b5c331de..2251febc2f 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -32,10 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusCreateStart implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final int COST = Math.toIntExact(TEMPLATE.getItemFee().get(0).getCount()); - private static final long CREATION_TIME = TEMPLATE.getCreationLime(); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -51,14 +46,15 @@ public class RequestExHomunculusCreateStart implements IClientIncomingPacket return; } - if (player.getAdena() < COST) + final int fee = Math.toIntExact(HomunculusCreationData.getInstance().getDefaultTemplate().getItemFee().get(0).getCount()); + if (player.getAdena() < fee) { player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA_2); return; } - player.reduceAdena("Homunculus creation", COST, player, true); - player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + CREATION_TIME); + player.reduceAdena("Homunculus creation", fee, player, true); + player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + HomunculusCreationData.getInstance().getDefaultTemplate().getCreationTime()); client.sendPacket(new ExShowHomunculusBirthInfo(player)); client.sendPacket(new ExHomunculusCreateStartResult(player)); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java index dde47a5571..ad07036dcc 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -32,11 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusInsert implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final short HP_COST = (short) TEMPLATE.getHPFeeCountByUse(); - private static final long SP_COST = TEMPLATE.getSPFeeCountByUse(); - private static final int VP_COST = TEMPLATE.getVPFeeByUse(); - private int _type; @Override @@ -61,9 +55,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket { case 0: { - if ((player.getCurrentHp() > HP_COST) && (hpPoints < TEMPLATE.getHPFeeCount())) + if ((player.getCurrentHp() > HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse()) && (hpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount())) { - int newHp = (int) (player.getCurrentHp()) - HP_COST; + int newHp = (int) (player.getCurrentHp()) - HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse(); player.setCurrentHp(newHp, true); hpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_HP_POINTS, hpPoints); @@ -76,9 +70,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 1: { - if ((player.getSp() >= SP_COST) && (spPoints < TEMPLATE.getSPFeeCount())) + if ((player.getSp() >= HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()) && (spPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount())) { - player.setSp(player.getSp() - SP_COST); + player.setSp(player.getSp() - HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()); spPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_SP_POINTS, spPoints); } @@ -90,9 +84,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 2: { - if ((player.getVitalityPoints() >= VP_COST) && (vpPoints < TEMPLATE.getVPFeeCount())) + if ((player.getVitalityPoints() >= HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse()) && (vpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { - int newVitality = player.getVitalityPoints() - VP_COST; + int newVitality = player.getVitalityPoints() - HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse(); player.setVitalityPoints(newVitality, true); vpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_VP_POINTS, vpPoints); diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java index d4b6e7f73b..f18fa30c95 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.data.xml.HomunculusData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.homunculus.Homunculus; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; @@ -37,8 +36,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusSummon implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -60,22 +57,21 @@ public class RequestExHomunculusSummon implements IClientIncomingPacket final int vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); final int homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == TEMPLATE.getHPFeeCount()) && (spPoints == TEMPLATE.getSPFeeCount()) && (vpPoints == TEMPLATE.getVPFeeCount())) + if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount()) && (spPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount()) && (vpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { double chance = Rnd.get(100.0); double current = 0; int homunculusId = 0; while (homunculusId == 0) { - if (chance > TEMPLATE.getMaxChance()) + if (chance > HomunculusCreationData.getInstance().getDefaultTemplate().getMaxChance()) { player.sendMessage("Homunculus is not created!"); player.sendPacket(new ExHomunculusSummonResult(0)); return; } - for (int i = 0; i < TEMPLATE.getCreationChance().size(); i++) + for (Double[] homuHolder : HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance()) { - final Double[] homuHolder = TEMPLATE.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java index 40c1e3aa3e..6b8415c851 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java @@ -25,6 +25,7 @@ import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.homunculus.Homunculus; import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -37,12 +38,12 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExSummonHomuncu */ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPacket { - private int _item_id; + private int _itemId; @Override public boolean read(GameClient client, PacketReader packet) { - _item_id = packet.readD(); + _itemId = packet.readD(); return true; } @@ -61,35 +62,28 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus withouts avaible slots!"); return; } - HomunculusCreationTemplate creationTemplate = null; - for (int i = 1; i < HomunculusCreationData.getInstance().size(); i++) - { - if (HomunculusCreationData.getInstance().getTemplate(i).isInstanceHaveCoupon(_item_id)) - { - creationTemplate = HomunculusCreationData.getInstance().getTemplate(i); - } - } - if ((creationTemplate == null) || (creationTemplate.getItemFee().size() == 0)) + + final HomunculusCreationTemplate creationTemplate = HomunculusCreationData.getInstance().getTemplateByItemId(_itemId); + if ((creationTemplate == null) || creationTemplate.getItemFee().isEmpty()) { PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus with not existing coupon!"); return; } // Take items. - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (player.getInventory().getItemByItemId(humu.getId()).getCount() < humu.getCount()) + final Item item = player.getInventory().getItemByItemId(itemHolder.getId()); + if ((item == null) || (item.getCount() < itemHolder.getCount())) { return; } } - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (!player.destroyItemByItemId("Homunculus Coupon Creation", humu.getId(), humu.getCount(), player, true)) + if (!player.destroyItemByItemId("Homunculus Coupon Creation", itemHolder.getId(), itemHolder.getCount(), player, true)) { - PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + humu + "!"); + PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + itemHolder + "!"); return; } } @@ -105,9 +99,8 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac player.sendPacket(new ExSummonHomunculusCouponResult(0, 0)); return; } - for (int i = 0; i < creationTemplate.getCreationChance().size(); i++) + for (Double[] homuHolder : creationTemplate.getCreationChance()) { - final Double[] homuHolder = creationTemplate.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java index 33d7857cba..a032e8b137 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.serverpackets.homunculus; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -29,8 +28,6 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private final int _hpPoints; private final int _spPoints; private final int _vpPoints; @@ -45,9 +42,9 @@ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket _spPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_SP_POINTS, 0); _vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); _homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - _feeHpPoints = TEMPLATE.getHPFeeCount(); - _feeSpPoints = (int) TEMPLATE.getSPFeeCount(); - _feeVpPoints = TEMPLATE.getVPFeeCount(); + _feeHpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount(); + _feeSpPoints = (int) HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount(); + _feeVpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount(); } @Override diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java index 088ebb8432..ee7890f3a1 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java @@ -18,10 +18,9 @@ package org.l2jmobius.gameserver.data.xml; import java.io.File; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -37,7 +36,9 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; */ public class HomunculusCreationData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final List TEMPLATES = new ArrayList<>(); + + private HomunculusCreationTemplate _defaultTemplate; protected HomunculusCreationData() { @@ -47,9 +48,10 @@ public class HomunculusCreationData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); + _defaultTemplate = null; parseDatapackFile("data/HomunculusCreationData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -115,7 +117,12 @@ public class HomunculusCreationData implements IXmlReader } } - _templates.put(slotId, new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances)); + final HomunculusCreationTemplate template = new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances); + TEMPLATES.add(template); + if (_defaultTemplate == null) + { + _defaultTemplate = template; + } } } } @@ -153,14 +160,26 @@ public class HomunculusCreationData implements IXmlReader return chanceList; } - public HomunculusCreationTemplate getTemplate(int id) + public HomunculusCreationTemplate getTemplateByItemId(int itemId) { - return _templates.get(id); + for (HomunculusCreationTemplate template : TEMPLATES) + { + if (template.isInstanceHaveCoupon(itemId)) + { + return template; + } + } + return null; } - public int size() + public HomunculusCreationTemplate getDefaultTemplate() { - return _templates.size(); + return _defaultTemplate; + } + + public Collection getTemplates() + { + return TEMPLATES; } public static HomunculusCreationData getInstance() @@ -172,4 +191,5 @@ public class HomunculusCreationData implements IXmlReader { protected static final HomunculusCreationData INSTANCE = new HomunculusCreationData(); } + } diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java index a490287ec5..ce590f49b6 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java @@ -31,7 +31,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; */ public class HomunculusData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusData() { @@ -41,9 +41,9 @@ public class HomunculusData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -53,18 +53,13 @@ public class HomunculusData implements IXmlReader { final StatSet set = new StatSet(parseAttributes(homunculusNode)); final int id = set.getInt("id"); - _templates.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); + TEMPLATES.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); })); } public HomunculusTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusData getInstance() diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java index 5fd6b439cf..3cfe99a126 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java @@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusSlotTemplate; */ public class HomunculusSlotData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusSlotData() { @@ -47,9 +47,9 @@ public class HomunculusSlotData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusSlotData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -74,18 +74,17 @@ public class HomunculusSlotData implements IXmlReader set.set(att.getNodeName(), att.getNodeValue()); } - final int slotId = set.getInt("slotId"); - final Boolean isEnabled = set.getBoolean("isEnabled", false); List fee = Collections.emptyList(); - for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { if ("fee".equalsIgnoreCase(c.getNodeName())) { fee = getItemList(c); + break; } } - _templates.put(slotId, new HomunculusSlotTemplate(slotId, fee, isEnabled)); + final int slotId = set.getInt("slotId"); + TEMPLATES.put(slotId, new HomunculusSlotTemplate(slotId, fee, set.getBoolean("isEnabled", false))); } } } @@ -109,12 +108,7 @@ public class HomunculusSlotData implements IXmlReader public HomunculusSlotTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusSlotData getInstance() diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java index 8a9d603ba6..3487ce66c0 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java @@ -130,7 +130,7 @@ public class HomunculusCreationTemplate return false; } - public long getCreationLime() + public long getCreationTime() { return _time; } diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java index 2e7091f037..11400c01a7 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java @@ -72,18 +72,16 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } final List fee = template.getPrice(); - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) == null) || ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) != null) && (activeChar.getInventory().getItemByItemId(feeHolder.getId()).getCount() < feeHolder.getCount()))) { activeChar.sendPacket(new ExActivateHomunculusResult(false)); return; } } - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if (!activeChar.destroyItemByItemId("Homunclus slot unlock", feeHolder.getId(), feeHolder.getCount(), activeChar, true)) { Logger.getLogger(getClass().getSimpleName() + " player " + activeChar.getName() + " " + activeChar.getObjectId() + " trying unlock slot without items!"); @@ -92,7 +90,6 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } } - // activeChar.sendItemList(); activeChar.broadcastUserInfo(); activeChar.getVariables().set(PlayerVariables.HOMUNCULUS_OPENED_SLOT_COUNT, _slot); activeChar.sendPacket(new ExHomunculusPointInfo(activeChar)); diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java index ff6c14c952..1ec7fc1acb 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -32,10 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusCreateStart implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final int COST = Math.toIntExact(TEMPLATE.getItemFee().get(0).getCount()); - private static final long CREATION_TIME = TEMPLATE.getCreationLime(); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -51,14 +46,15 @@ public class RequestExHomunculusCreateStart implements IClientIncomingPacket return; } - if (player.getAdena() < COST) + final int fee = Math.toIntExact(HomunculusCreationData.getInstance().getDefaultTemplate().getItemFee().get(0).getCount()); + if (player.getAdena() < fee) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA_2); return; } - player.reduceAdena("Homunculus creation", COST, player, true); - player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + CREATION_TIME); + player.reduceAdena("Homunculus creation", fee, player, true); + player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + HomunculusCreationData.getInstance().getDefaultTemplate().getCreationTime()); client.sendPacket(new ExShowHomunculusBirthInfo(player)); client.sendPacket(new ExHomunculusCreateStartResult(player)); diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java index dde47a5571..ad07036dcc 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -32,11 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusInsert implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final short HP_COST = (short) TEMPLATE.getHPFeeCountByUse(); - private static final long SP_COST = TEMPLATE.getSPFeeCountByUse(); - private static final int VP_COST = TEMPLATE.getVPFeeByUse(); - private int _type; @Override @@ -61,9 +55,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket { case 0: { - if ((player.getCurrentHp() > HP_COST) && (hpPoints < TEMPLATE.getHPFeeCount())) + if ((player.getCurrentHp() > HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse()) && (hpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount())) { - int newHp = (int) (player.getCurrentHp()) - HP_COST; + int newHp = (int) (player.getCurrentHp()) - HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse(); player.setCurrentHp(newHp, true); hpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_HP_POINTS, hpPoints); @@ -76,9 +70,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 1: { - if ((player.getSp() >= SP_COST) && (spPoints < TEMPLATE.getSPFeeCount())) + if ((player.getSp() >= HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()) && (spPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount())) { - player.setSp(player.getSp() - SP_COST); + player.setSp(player.getSp() - HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()); spPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_SP_POINTS, spPoints); } @@ -90,9 +84,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 2: { - if ((player.getVitalityPoints() >= VP_COST) && (vpPoints < TEMPLATE.getVPFeeCount())) + if ((player.getVitalityPoints() >= HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse()) && (vpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { - int newVitality = player.getVitalityPoints() - VP_COST; + int newVitality = player.getVitalityPoints() - HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse(); player.setVitalityPoints(newVitality, true); vpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_VP_POINTS, vpPoints); diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java index d4b6e7f73b..f18fa30c95 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.data.xml.HomunculusData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.homunculus.Homunculus; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; @@ -37,8 +36,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusSummon implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -60,22 +57,21 @@ public class RequestExHomunculusSummon implements IClientIncomingPacket final int vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); final int homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == TEMPLATE.getHPFeeCount()) && (spPoints == TEMPLATE.getSPFeeCount()) && (vpPoints == TEMPLATE.getVPFeeCount())) + if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount()) && (spPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount()) && (vpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { double chance = Rnd.get(100.0); double current = 0; int homunculusId = 0; while (homunculusId == 0) { - if (chance > TEMPLATE.getMaxChance()) + if (chance > HomunculusCreationData.getInstance().getDefaultTemplate().getMaxChance()) { player.sendMessage("Homunculus is not created!"); player.sendPacket(new ExHomunculusSummonResult(0)); return; } - for (int i = 0; i < TEMPLATE.getCreationChance().size(); i++) + for (Double[] homuHolder : HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance()) { - final Double[] homuHolder = TEMPLATE.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java index 40c1e3aa3e..6b8415c851 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java @@ -25,6 +25,7 @@ import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.homunculus.Homunculus; import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -37,12 +38,12 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExSummonHomuncu */ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPacket { - private int _item_id; + private int _itemId; @Override public boolean read(GameClient client, PacketReader packet) { - _item_id = packet.readD(); + _itemId = packet.readD(); return true; } @@ -61,35 +62,28 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus withouts avaible slots!"); return; } - HomunculusCreationTemplate creationTemplate = null; - for (int i = 1; i < HomunculusCreationData.getInstance().size(); i++) - { - if (HomunculusCreationData.getInstance().getTemplate(i).isInstanceHaveCoupon(_item_id)) - { - creationTemplate = HomunculusCreationData.getInstance().getTemplate(i); - } - } - if ((creationTemplate == null) || (creationTemplate.getItemFee().size() == 0)) + + final HomunculusCreationTemplate creationTemplate = HomunculusCreationData.getInstance().getTemplateByItemId(_itemId); + if ((creationTemplate == null) || creationTemplate.getItemFee().isEmpty()) { PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus with not existing coupon!"); return; } // Take items. - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (player.getInventory().getItemByItemId(humu.getId()).getCount() < humu.getCount()) + final Item item = player.getInventory().getItemByItemId(itemHolder.getId()); + if ((item == null) || (item.getCount() < itemHolder.getCount())) { return; } } - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (!player.destroyItemByItemId("Homunculus Coupon Creation", humu.getId(), humu.getCount(), player, true)) + if (!player.destroyItemByItemId("Homunculus Coupon Creation", itemHolder.getId(), itemHolder.getCount(), player, true)) { - PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + humu + "!"); + PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + itemHolder + "!"); return; } } @@ -105,9 +99,8 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac player.sendPacket(new ExSummonHomunculusCouponResult(0, 0)); return; } - for (int i = 0; i < creationTemplate.getCreationChance().size(); i++) + for (Double[] homuHolder : creationTemplate.getCreationChance()) { - final Double[] homuHolder = creationTemplate.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java index 33d7857cba..a032e8b137 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.serverpackets.homunculus; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -29,8 +28,6 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private final int _hpPoints; private final int _spPoints; private final int _vpPoints; @@ -45,9 +42,9 @@ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket _spPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_SP_POINTS, 0); _vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); _homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - _feeHpPoints = TEMPLATE.getHPFeeCount(); - _feeSpPoints = (int) TEMPLATE.getSPFeeCount(); - _feeVpPoints = TEMPLATE.getVPFeeCount(); + _feeHpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount(); + _feeSpPoints = (int) HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount(); + _feeVpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount(); } @Override diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java index 088ebb8432..ee7890f3a1 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusCreationData.java @@ -18,10 +18,9 @@ package org.l2jmobius.gameserver.data.xml; import java.io.File; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; @@ -37,7 +36,9 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; */ public class HomunculusCreationData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final List TEMPLATES = new ArrayList<>(); + + private HomunculusCreationTemplate _defaultTemplate; protected HomunculusCreationData() { @@ -47,9 +48,10 @@ public class HomunculusCreationData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); + _defaultTemplate = null; parseDatapackFile("data/HomunculusCreationData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -115,7 +117,12 @@ public class HomunculusCreationData implements IXmlReader } } - _templates.put(slotId, new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances)); + final HomunculusCreationTemplate template = new HomunculusCreationTemplate(slotId, isEnabled, grade, isEvent, itemFees, hpFee, spFee, vpFee, time, chances); + TEMPLATES.add(template); + if (_defaultTemplate == null) + { + _defaultTemplate = template; + } } } } @@ -153,14 +160,26 @@ public class HomunculusCreationData implements IXmlReader return chanceList; } - public HomunculusCreationTemplate getTemplate(int id) + public HomunculusCreationTemplate getTemplateByItemId(int itemId) { - return _templates.get(id); + for (HomunculusCreationTemplate template : TEMPLATES) + { + if (template.isInstanceHaveCoupon(itemId)) + { + return template; + } + } + return null; } - public int size() + public HomunculusCreationTemplate getDefaultTemplate() { - return _templates.size(); + return _defaultTemplate; + } + + public Collection getTemplates() + { + return TEMPLATES; } public static HomunculusCreationData getInstance() @@ -172,4 +191,5 @@ public class HomunculusCreationData implements IXmlReader { protected static final HomunculusCreationData INSTANCE = new HomunculusCreationData(); } + } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java index a490287ec5..ce590f49b6 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusData.java @@ -31,7 +31,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; */ public class HomunculusData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusData() { @@ -41,9 +41,9 @@ public class HomunculusData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -53,18 +53,13 @@ public class HomunculusData implements IXmlReader { final StatSet set = new StatSet(parseAttributes(homunculusNode)); final int id = set.getInt("id"); - _templates.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); + TEMPLATES.put(id, new HomunculusTemplate(id, set.getInt("type"), set.getInt("basicSkillId"), set.getInt("basicSkillLevel"), set.getInt("skillId1"), set.getInt("skillId2"), set.getInt("skillId3"), set.getInt("skillId4"), set.getInt("skillId5"), set.getInt("hpLevel1"), set.getInt("atkLevel1"), set.getInt("defLevel1"), set.getInt("expToLevel2"), set.getInt("hpLevel2"), set.getInt("atkLevel2"), set.getInt("defLevel2"), set.getInt("expToLevel3"), set.getInt("hpLevel3"), set.getInt("atkLevel3"), set.getInt("defLevel3"), set.getInt("expToLevel4"), set.getInt("hpLevel4"), set.getInt("atkLevel4"), set.getInt("defLevel4"), set.getInt("expToLevel5"), set.getInt("hpLevel5"), set.getInt("atkLevel5"), set.getInt("defLevel5"), set.getInt("expToLevel6"), set.getInt("critRate"))); })); } public HomunculusTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusData getInstance() diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java index 5fd6b439cf..3cfe99a126 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/HomunculusSlotData.java @@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.model.homunculus.HomunculusSlotTemplate; */ public class HomunculusSlotData implements IXmlReader { - private final Map _templates = new HashMap<>(); + private static final Map TEMPLATES = new HashMap<>(); protected HomunculusSlotData() { @@ -47,9 +47,9 @@ public class HomunculusSlotData implements IXmlReader @Override public void load() { - _templates.clear(); + TEMPLATES.clear(); parseDatapackFile("data/HomunculusSlotData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _templates.size() + " templates."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + TEMPLATES.size() + " templates."); } @Override @@ -74,18 +74,17 @@ public class HomunculusSlotData implements IXmlReader set.set(att.getNodeName(), att.getNodeValue()); } - final int slotId = set.getInt("slotId"); - final Boolean isEnabled = set.getBoolean("isEnabled", false); List fee = Collections.emptyList(); - for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { if ("fee".equalsIgnoreCase(c.getNodeName())) { fee = getItemList(c); + break; } } - _templates.put(slotId, new HomunculusSlotTemplate(slotId, fee, isEnabled)); + final int slotId = set.getInt("slotId"); + TEMPLATES.put(slotId, new HomunculusSlotTemplate(slotId, fee, set.getBoolean("isEnabled", false))); } } } @@ -109,12 +108,7 @@ public class HomunculusSlotData implements IXmlReader public HomunculusSlotTemplate getTemplate(int id) { - return _templates.get(id); - } - - public int size() - { - return _templates.size(); + return TEMPLATES.get(id); } public static HomunculusSlotData getInstance() diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java index 8a9d603ba6..3487ce66c0 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/homunculus/HomunculusCreationTemplate.java @@ -130,7 +130,7 @@ public class HomunculusCreationTemplate return false; } - public long getCreationLime() + public long getCreationTime() { return _time; } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/ExHomunculusCouponProbabilityList.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/ExHomunculusCouponProbabilityList.java index 8973e411de..a17a3326b3 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/ExHomunculusCouponProbabilityList.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/ExHomunculusCouponProbabilityList.java @@ -46,28 +46,19 @@ public class ExHomunculusCouponProbabilityList implements IClientOutgoingPacket return false; } - HomunculusCreationTemplate creationTemplate = null; - for (int i = 1; i < HomunculusCreationData.getInstance().size(); i++) - { - if (HomunculusCreationData.getInstance().getTemplate(i).isInstanceHaveCoupon(_couponId)) - { - creationTemplate = HomunculusCreationData.getInstance().getTemplate(i); - } - } + final HomunculusCreationTemplate creationTemplate = HomunculusCreationData.getInstance().getTemplateByItemId(_couponId); if (creationTemplate == null) { return false; } OutgoingPackets.EX_HOMUNCULUS_COUPON_PROB_LIST.writeId(packet); - final int size = creationTemplate.getCreationChance().size(); packet.writeD(_couponId); - packet.writeD(size); + packet.writeD(creationTemplate.getCreationChance().size()); for (int type = 0; type < 3; type++) { - for (int i = 0; i < size; i++) + for (Double[] homunculusChance : creationTemplate.getCreationChance()) { - final Double[] homunculusChance = creationTemplate.getCreationChance().get(i); if (HomunculusData.getInstance().getTemplate(homunculusChance[0].intValue()).getType() == type) { packet.writeD(homunculusChance[0].intValue()); diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java index 2e7091f037..11400c01a7 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusActivateSlot.java @@ -72,18 +72,16 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } final List fee = template.getPrice(); - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) == null) || ((activeChar.getInventory().getItemByItemId(feeHolder.getId()) != null) && (activeChar.getInventory().getItemByItemId(feeHolder.getId()).getCount() < feeHolder.getCount()))) { activeChar.sendPacket(new ExActivateHomunculusResult(false)); return; } } - for (int i = 0; i < fee.size(); i++) + for (ItemHolder feeHolder : fee) { - final ItemHolder feeHolder = fee.get(i); if (!activeChar.destroyItemByItemId("Homunclus slot unlock", feeHolder.getId(), feeHolder.getCount(), activeChar, true)) { Logger.getLogger(getClass().getSimpleName() + " player " + activeChar.getName() + " " + activeChar.getObjectId() + " trying unlock slot without items!"); @@ -92,7 +90,6 @@ public class RequestExHomunculusActivateSlot implements IClientIncomingPacket } } - // activeChar.sendItemList(); activeChar.broadcastUserInfo(); activeChar.getVariables().set(PlayerVariables.HOMUNCULUS_OPENED_SLOT_COUNT, _slot); activeChar.sendPacket(new ExHomunculusPointInfo(activeChar)); diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java index ff6c14c952..1ec7fc1acb 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusCreateStart.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -32,10 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusCreateStart implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final int COST = Math.toIntExact(TEMPLATE.getItemFee().get(0).getCount()); - private static final long CREATION_TIME = TEMPLATE.getCreationLime(); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -51,14 +46,15 @@ public class RequestExHomunculusCreateStart implements IClientIncomingPacket return; } - if (player.getAdena() < COST) + final int fee = Math.toIntExact(HomunculusCreationData.getInstance().getDefaultTemplate().getItemFee().get(0).getCount()); + if (player.getAdena() < fee) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA_2); return; } - player.reduceAdena("Homunculus creation", COST, player, true); - player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + CREATION_TIME); + player.reduceAdena("Homunculus creation", fee, player, true); + player.getVariables().set(PlayerVariables.HOMUNCULUS_CREATION_TIME, System.currentTimeMillis() + HomunculusCreationData.getInstance().getDefaultTemplate().getCreationTime()); client.sendPacket(new ExShowHomunculusBirthInfo(player)); client.sendPacket(new ExHomunculusCreateStartResult(player)); diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java index dde47a5571..ad07036dcc 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusInsert.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.clientpackets.homunculus; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -32,11 +31,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusInsert implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private static final short HP_COST = (short) TEMPLATE.getHPFeeCountByUse(); - private static final long SP_COST = TEMPLATE.getSPFeeCountByUse(); - private static final int VP_COST = TEMPLATE.getVPFeeByUse(); - private int _type; @Override @@ -61,9 +55,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket { case 0: { - if ((player.getCurrentHp() > HP_COST) && (hpPoints < TEMPLATE.getHPFeeCount())) + if ((player.getCurrentHp() > HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse()) && (hpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount())) { - int newHp = (int) (player.getCurrentHp()) - HP_COST; + int newHp = (int) (player.getCurrentHp()) - HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCountByUse(); player.setCurrentHp(newHp, true); hpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_HP_POINTS, hpPoints); @@ -76,9 +70,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 1: { - if ((player.getSp() >= SP_COST) && (spPoints < TEMPLATE.getSPFeeCount())) + if ((player.getSp() >= HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()) && (spPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount())) { - player.setSp(player.getSp() - SP_COST); + player.setSp(player.getSp() - HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCountByUse()); spPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_SP_POINTS, spPoints); } @@ -90,9 +84,9 @@ public class RequestExHomunculusInsert implements IClientIncomingPacket } case 2: { - if ((player.getVitalityPoints() >= VP_COST) && (vpPoints < TEMPLATE.getVPFeeCount())) + if ((player.getVitalityPoints() >= HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse()) && (vpPoints < HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { - int newVitality = player.getVitalityPoints() - VP_COST; + int newVitality = player.getVitalityPoints() - HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeByUse(); player.setVitalityPoints(newVitality, true); vpPoints += 1; player.getVariables().set(PlayerVariables.HOMUNCULUS_VP_POINTS, vpPoints); diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java index d4b6e7f73b..f18fa30c95 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExHomunculusSummon.java @@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.data.xml.HomunculusData; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.homunculus.Homunculus; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; @@ -37,8 +36,6 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExShowHomunculu */ public class RequestExHomunculusSummon implements IClientIncomingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - @Override public boolean read(GameClient client, PacketReader packet) { @@ -60,22 +57,21 @@ public class RequestExHomunculusSummon implements IClientIncomingPacket final int vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); final int homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == TEMPLATE.getHPFeeCount()) && (spPoints == TEMPLATE.getSPFeeCount()) && (vpPoints == TEMPLATE.getVPFeeCount())) + if ((homunculusCreateTime > 0) && ((System.currentTimeMillis() / 1000) >= homunculusCreateTime) && (hpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount()) && (spPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount()) && (vpPoints == HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount())) { double chance = Rnd.get(100.0); double current = 0; int homunculusId = 0; while (homunculusId == 0) { - if (chance > TEMPLATE.getMaxChance()) + if (chance > HomunculusCreationData.getInstance().getDefaultTemplate().getMaxChance()) { player.sendMessage("Homunculus is not created!"); player.sendPacket(new ExHomunculusSummonResult(0)); return; } - for (int i = 0; i < TEMPLATE.getCreationChance().size(); i++) + for (Double[] homuHolder : HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance()) { - final Double[] homuHolder = TEMPLATE.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java index 40c1e3aa3e..6b8415c851 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/homunculus/RequestExSummonHomunculusCouponResult.java @@ -25,6 +25,7 @@ import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.homunculus.Homunculus; import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.homunculus.HomunculusTemplate; +import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; @@ -37,12 +38,12 @@ import org.l2jmobius.gameserver.network.serverpackets.homunculus.ExSummonHomuncu */ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPacket { - private int _item_id; + private int _itemId; @Override public boolean read(GameClient client, PacketReader packet) { - _item_id = packet.readD(); + _itemId = packet.readD(); return true; } @@ -61,35 +62,28 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus withouts avaible slots!"); return; } - HomunculusCreationTemplate creationTemplate = null; - for (int i = 1; i < HomunculusCreationData.getInstance().size(); i++) - { - if (HomunculusCreationData.getInstance().getTemplate(i).isInstanceHaveCoupon(_item_id)) - { - creationTemplate = HomunculusCreationData.getInstance().getTemplate(i); - } - } - if ((creationTemplate == null) || (creationTemplate.getItemFee().size() == 0)) + + final HomunculusCreationTemplate creationTemplate = HomunculusCreationData.getInstance().getTemplateByItemId(_itemId); + if ((creationTemplate == null) || creationTemplate.getItemFee().isEmpty()) { PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus with not existing coupon!"); return; } // Take items. - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (player.getInventory().getItemByItemId(humu.getId()).getCount() < humu.getCount()) + final Item item = player.getInventory().getItemByItemId(itemHolder.getId()); + if ((item == null) || (item.getCount() < itemHolder.getCount())) { return; } } - for (int i = 0; i < creationTemplate.getItemFee().size(); i++) + for (ItemHolder itemHolder : creationTemplate.getItemFee()) { - final ItemHolder humu = creationTemplate.getItemFee().get(i); - if (!player.destroyItemByItemId("Homunculus Coupon Creation", humu.getId(), humu.getCount(), player, true)) + if (!player.destroyItemByItemId("Homunculus Coupon Creation", itemHolder.getId(), itemHolder.getCount(), player, true)) { - PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + humu + "!"); + PacketLogger.info("Player " + player.getObjectId() + " " + player.getName() + ", trying create homunculus without " + itemHolder + "!"); return; } } @@ -105,9 +99,8 @@ public class RequestExSummonHomunculusCouponResult implements IClientIncomingPac player.sendPacket(new ExSummonHomunculusCouponResult(0, 0)); return; } - for (int i = 0; i < creationTemplate.getCreationChance().size(); i++) + for (Double[] homuHolder : creationTemplate.getCreationChance()) { - final Double[] homuHolder = creationTemplate.getCreationChance().get(i); current += homuHolder[1]; if (current >= chance) { diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExHomunculusCreateProbabilityList.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExHomunculusCreateProbabilityList.java index cf78f6f5b4..906e7f9aff 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExHomunculusCreateProbabilityList.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExHomunculusCreateProbabilityList.java @@ -20,7 +20,6 @@ import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.data.xml.HomunculusData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -45,18 +44,15 @@ public class ExHomunculusCreateProbabilityList implements IClientOutgoingPacket } OutgoingPackets.EX_HOMUNCULUS_CREATE_PROB_LIST.writeId(packet); - HomunculusCreationTemplate creationTemplate = HomunculusCreationData.getInstance().getTemplate(0); - final int size = creationTemplate.getCreationChance().size(); - packet.writeD(size); + packet.writeD(HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance().size()); for (int type = 0; type < 3; type++) { - for (int i = 0; i < size; i++) + for (Double[] homunculusChance : HomunculusCreationData.getInstance().getDefaultTemplate().getCreationChance()) { - final Double[] chance = creationTemplate.getCreationChance().get(i); - if (HomunculusData.getInstance().getTemplate(chance[0].intValue()).getType() == type) + if (HomunculusData.getInstance().getTemplate(homunculusChance[0].intValue()).getType() == type) { - packet.writeD(chance[0].intValue()); - packet.writeD((int) (chance[1] * 1000000)); + packet.writeD(homunculusChance[0].intValue()); + packet.writeD((int) (homunculusChance[1] * 1000000)); } } } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java index 33d7857cba..a032e8b137 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/homunculus/ExShowHomunculusBirthInfo.java @@ -19,7 +19,6 @@ package org.l2jmobius.gameserver.network.serverpackets.homunculus; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.data.xml.HomunculusCreationData; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.homunculus.HomunculusCreationTemplate; import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -29,8 +28,6 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; */ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket { - private static final HomunculusCreationTemplate TEMPLATE = HomunculusCreationData.getInstance().getTemplate(0); - private final int _hpPoints; private final int _spPoints; private final int _vpPoints; @@ -45,9 +42,9 @@ public class ExShowHomunculusBirthInfo implements IClientOutgoingPacket _spPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_SP_POINTS, 0); _vpPoints = player.getVariables().getInt(PlayerVariables.HOMUNCULUS_VP_POINTS, 0); _homunculusCreateTime = (int) (player.getVariables().getLong(PlayerVariables.HOMUNCULUS_CREATION_TIME, 0) / 1000); - _feeHpPoints = TEMPLATE.getHPFeeCount(); - _feeSpPoints = (int) TEMPLATE.getSPFeeCount(); - _feeVpPoints = TEMPLATE.getVPFeeCount(); + _feeHpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getHPFeeCount(); + _feeSpPoints = (int) HomunculusCreationData.getInstance().getDefaultTemplate().getSPFeeCount(); + _feeVpPoints = HomunculusCreationData.getInstance().getDefaultTemplate().getVPFeeCount(); } @Override