From ebb10b7154115f98d2431de8a7564aed197f47af Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sun, 12 Jun 2022 12:13:31 +0000
Subject: [PATCH] Updated ensoul system to match retail. Contributed by
CostyKiller.
---
.../game/data/stats/ensoul/ensoulFees.xml | 977 ++++++++++++++++--
.../game/data/stats/ensoul/ensoulStones.xml | 20 +-
.../dist/game/data/xsd/ensoulFees.xsd | 19 +-
.../gameserver/data/xml/EnsoulData.java | 21 +-
.../gameserver/model/ensoul/EnsoulFee.java | 11 +-
.../ensoul/RequestItemEnsoul.java | 8 +-
.../ensoul/RequestTryEnSoulExtraction.java | 5 +-
7 files changed, 929 insertions(+), 132 deletions(-)
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulFees.xml b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulFees.xml
index 0e5f2c34fe..43bc3d1a70 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulFees.xml
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulFees.xml
@@ -1,95 +1,912 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulStones.xml b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulStones.xml
index d140629788..9ba3d94507 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulStones.xml
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/stats/ensoul/ensoulStones.xml
@@ -918,7 +918,7 @@
-
+
@@ -955,7 +955,7 @@
-
+
@@ -992,7 +992,7 @@
-
+
@@ -1029,7 +1029,7 @@
-
+
@@ -1066,7 +1066,7 @@
-
+
@@ -1103,7 +1103,7 @@
-
+
@@ -1140,7 +1140,7 @@
-
+
@@ -1177,7 +1177,7 @@
-
+
@@ -1214,7 +1214,7 @@
-
+
@@ -1251,7 +1251,7 @@
-
+
diff --git a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/ensoulFees.xsd b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/ensoulFees.xsd
index ade2a99fc9..15c8d0286a 100644
--- a/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/ensoulFees.xsd
+++ b/L2J_Mobius_10.2_MasterClass/dist/game/data/xsd/ensoulFees.xsd
@@ -6,23 +6,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -37,7 +20,7 @@
-
+
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/EnsoulData.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/EnsoulData.java
index 39125a9872..e991407326 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/EnsoulData.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/data/xml/EnsoulData.java
@@ -32,7 +32,6 @@ import org.l2jmobius.gameserver.model.ensoul.EnsoulFee;
import org.l2jmobius.gameserver.model.ensoul.EnsoulOption;
import org.l2jmobius.gameserver.model.ensoul.EnsoulStone;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
-import org.l2jmobius.gameserver.model.item.type.CrystalType;
/**
* @author UnAfraid
@@ -40,7 +39,7 @@ import org.l2jmobius.gameserver.model.item.type.CrystalType;
public class EnsoulData implements IXmlReader
{
private static final Logger LOGGER = Logger.getLogger(EnsoulData.class.getName());
- private final Map _ensoulFees = new ConcurrentHashMap<>();
+ private final Map _ensoulFees = new ConcurrentHashMap<>();
private final Map _ensoulOptions = new ConcurrentHashMap<>();
private final Map _ensoulStones = new ConcurrentHashMap<>();
@@ -86,8 +85,8 @@ public class EnsoulData implements IXmlReader
private void parseFees(Node ensoulNode)
{
- final CrystalType type = parseEnum(ensoulNode.getAttributes(), CrystalType.class, "crystalType");
- final EnsoulFee fee = new EnsoulFee(type);
+ final Integer stoneId = parseInteger(ensoulNode.getAttributes(), "stoneId");
+ final EnsoulFee fee = new EnsoulFee(stoneId);
forEach(ensoulNode, IXmlReader::isNode, feeNode ->
{
switch (feeNode.getNodeName())
@@ -137,7 +136,7 @@ public class EnsoulData implements IXmlReader
final int id = parseInteger(attrs, "itemId");
final int count = parseInteger(attrs, "count");
fee.setEnsoul(index, new ItemHolder(id, count));
- _ensoulFees.put(fee.getCrystalType(), fee);
+ _ensoulFees.put(fee.getStoneId(), fee);
}
private void parseReFee(Node ensoulNode, EnsoulFee fee, int index)
@@ -178,21 +177,21 @@ public class EnsoulData implements IXmlReader
_ensoulStones.put(stone.getId(), stone);
}
- public ItemHolder getEnsoulFee(CrystalType type, int index)
+ public ItemHolder getEnsoulFee(int stoneId, int index)
{
- final EnsoulFee fee = _ensoulFees.get(type);
+ final EnsoulFee fee = _ensoulFees.get(stoneId);
return fee != null ? fee.getEnsoul(index) : null;
}
- public ItemHolder getResoulFee(CrystalType type, int index)
+ public ItemHolder getResoulFee(int stoneId, int index)
{
- final EnsoulFee fee = _ensoulFees.get(type);
+ final EnsoulFee fee = _ensoulFees.get(stoneId);
return fee != null ? fee.getResoul(index) : null;
}
- public Collection getRemovalFee(CrystalType type)
+ public Collection getRemovalFee(int stoneId)
{
- final EnsoulFee fee = _ensoulFees.get(type);
+ final EnsoulFee fee = _ensoulFees.get(stoneId);
return fee != null ? fee.getRemovalFee() : Collections.emptyList();
}
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/ensoul/EnsoulFee.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/ensoul/EnsoulFee.java
index f670bb4c34..834422d5f0 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/ensoul/EnsoulFee.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/ensoul/EnsoulFee.java
@@ -20,27 +20,26 @@ import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
-import org.l2jmobius.gameserver.model.item.type.CrystalType;
/**
* @author UnAfraid
*/
public class EnsoulFee
{
- private final CrystalType _type;
+ private final Integer _stoneId;
private final ItemHolder[] _ensoulFee = new ItemHolder[3];
private final ItemHolder[] _resoulFees = new ItemHolder[3];
private final List _removalFee = new ArrayList<>();
- public EnsoulFee(CrystalType type)
+ public EnsoulFee(Integer stoneId)
{
- _type = type;
+ _stoneId = stoneId;
}
- public CrystalType getCrystalType()
+ public Integer getStoneId()
{
- return _type;
+ return _stoneId;
}
public void setEnsoul(int index, ItemHolder item)
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
index 8eb4232d6b..944b5d119c 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestItemEnsoul.java
@@ -181,19 +181,19 @@ public class RequestItemEnsoul implements IClientIncomingPacket
if (itemOption.getType() == 1)
{
// Normal Soul Crystal
- fee = EnsoulData.getInstance().getEnsoulFee(item.getTemplate().getCrystalType(), position);
+ fee = EnsoulData.getInstance().getEnsoulFee(stone.getId(), position);
if (((itemOption.getPosition() == 1) || (itemOption.getPosition() == 2)) && (item.getSpecialAbility(position) != null))
{
- fee = EnsoulData.getInstance().getResoulFee(item.getTemplate().getCrystalType(), position);
+ fee = EnsoulData.getInstance().getResoulFee(stone.getId(), position);
}
}
else if (itemOption.getType() == 2)
{
// Mystic Soul Crystal
- fee = EnsoulData.getInstance().getEnsoulFee(item.getTemplate().getCrystalType(), position + 2); // Client Special type position = 0
+ fee = EnsoulData.getInstance().getEnsoulFee(stone.getId(), position + 2); // Client Special type position = 0
if ((itemOption.getPosition() == 1) && (item.getAdditionalSpecialAbility(position) != null))
{
- fee = EnsoulData.getInstance().getResoulFee(item.getTemplate().getCrystalType(), position + 2); // Client Special type position = 0
+ fee = EnsoulData.getInstance().getResoulFee(stone.getId(), position + 2); // Client Special type position = 0
}
}
else
diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestTryEnSoulExtraction.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestTryEnSoulExtraction.java
index e2576dd23d..fc3451d543 100644
--- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestTryEnSoulExtraction.java
+++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/clientpackets/ensoul/RequestTryEnSoulExtraction.java
@@ -85,8 +85,8 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
{
return;
}
-
- final Collection removalFee = EnsoulData.getInstance().getRemovalFee(item.getTemplate().getCrystalType());
+ final int runeId = EnsoulData.getInstance().getStone(_type, option.getId());
+ final Collection removalFee = EnsoulData.getInstance().getRemovalFee(runeId);
if (removalFee.isEmpty())
{
return;
@@ -115,7 +115,6 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
iu.addModifiedItem(item);
// Add rune in player inventory.
- final int runeId = EnsoulData.getInstance().getStone(_type, option.getId());
if (runeId > 0)
{
iu.addItem(player.addItem("Rune Extract", runeId, 1, player, true));