Implemented new combination item data values.

This commit is contained in:
MobiusDevelopment
2021-10-07 01:44:11 +00:00
parent eb93f0e96a
commit 8b2ff17fff
16 changed files with 18153 additions and 7103 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -14,8 +14,10 @@
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
<xs:attribute type="xs:int" name="one" use="required" /> <xs:attribute type="xs:int" name="one" use="required" />
<xs:attribute type="xs:byte" name="enchant" use="optional" />
<xs:attribute type="xs:int" name="two" use="required" /> <xs:attribute type="xs:int" name="two" use="required" />
<xs:attribute type="xs:byte" name="chance" use="required" /> <xs:attribute type="xs:long" name="commission" use="optional" />
<xs:attribute type="xs:byte" name="chance" use="optional" />
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>

View File

@@ -83,11 +83,11 @@ public class CombinationItemsData implements IXmlReader
return _items; return _items;
} }
public CombinationItem getItemsBySlots(int firstSlot, int secondSlot) public CombinationItem getItemsBySlots(int firstSlot, int enchant, int secondSlot)
{ {
for (CombinationItem item : _items) for (CombinationItem item : _items)
{ {
if ((item.getItemOne() == firstSlot) && (item.getItemTwo() == secondSlot)) if ((item.getItemOne() == firstSlot) && (item.getItemTwo() == secondSlot) && (item.getEnchant() == enchant))
{ {
return item; return item;
} }
@@ -95,25 +95,12 @@ public class CombinationItemsData implements IXmlReader
return null; return null;
} }
public List<CombinationItem> getItemsByFirstSlot(int id) public List<CombinationItem> getItemsByFirstSlot(int id, int enchant)
{ {
final List<CombinationItem> result = new ArrayList<>(); final List<CombinationItem> result = new ArrayList<>();
for (CombinationItem item : _items) for (CombinationItem item : _items)
{ {
if (item.getItemOne() == id) if ((item.getItemOne() == id) && (item.getEnchant() == enchant))
{
result.add(item);
}
}
return result;
}
public List<CombinationItem> getItemsBySecondSlot(int id)
{
final List<CombinationItem> result = new ArrayList<>();
for (CombinationItem item : _items)
{
if (item.getItemTwo() == id)
{ {
result.add(item); result.add(item);
} }

View File

@@ -22,20 +22,24 @@ import java.util.Map;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
/** /**
* @author UnAfraid * @author UnAfraid, Mobius
*/ */
public class CombinationItem public class CombinationItem
{ {
private final int _itemOne; private final int _itemOne;
private final int _enchant;
private final int _itemTwo; private final int _itemTwo;
private final long _commission;
private final int _chance; private final int _chance;
private final Map<CombinationItemType, CombinationItemReward> _rewards = new EnumMap<>(CombinationItemType.class); private final Map<CombinationItemType, CombinationItemReward> _rewards = new EnumMap<>(CombinationItemType.class);
public CombinationItem(StatSet set) public CombinationItem(StatSet set)
{ {
_itemOne = set.getInt("one"); _itemOne = set.getInt("one");
_enchant = set.getInt("enchant", 0);
_itemTwo = set.getInt("two"); _itemTwo = set.getInt("two");
_chance = set.getInt("chance"); _commission = set.getLong("commission", 0);
_chance = set.getInt("chance", 33);
} }
public int getItemOne() public int getItemOne()
@@ -43,11 +47,21 @@ public class CombinationItem
return _itemOne; return _itemOne;
} }
public int getEnchant()
{
return _enchant;
}
public int getItemTwo() public int getItemTwo()
{ {
return _itemTwo; return _itemTwo;
} }
public long getCommission()
{
return _commission;
}
public int getChance() public int getChance()
{ {
return _chance; return _chance;

View File

@@ -82,7 +82,7 @@ public class RequestNewEnchantPushOne implements IClientIncomingPacket
return; return;
} }
final List<CombinationItem> combinationItems = CombinationItemsData.getInstance().getItemsByFirstSlot(itemOne.getId()); final List<CombinationItem> combinationItems = CombinationItemsData.getInstance().getItemsByFirstSlot(itemOne.getId(), itemOne.getEnchantLevel());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItems.isEmpty()) if (combinationItems.isEmpty())

View File

@@ -88,7 +88,7 @@ public class RequestNewEnchantPushTwo implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)

View File

@@ -94,7 +94,7 @@ public class RequestNewEnchantRetryToPutItems implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)

View File

@@ -91,7 +91,7 @@ public class RequestNewEnchantTry implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)
@@ -101,11 +101,19 @@ public class RequestNewEnchantTry implements IClientIncomingPacket
return; return;
} }
if (combinationItem.getCommission() > player.getAdena())
{
client.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
player.removeRequest(request.getClass());
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
return;
}
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addRemovedItem(itemOne); iu.addRemovedItem(itemOne);
// iu.addRemovedItem(itemTwo); // iu.addRemovedItem(itemTwo);
if (player.destroyItem("Compound-Item-One", itemOne, 1, null, true) && player.destroyItem("Compound-Item-Two", itemTwo, 1, null, true)) if (player.destroyItem("Compound-Item-One", itemOne, 1, null, true) && player.destroyItem("Compound-Item-Two", itemTwo, 1, null, true) && ((combinationItem.getCommission() <= 0) || player.reduceAdena("Compound-Commission", combinationItem.getCommission(), player, true)))
{ {
final double random = (Rnd.nextDouble() * 100); final double random = (Rnd.nextDouble() * 100);
final boolean success = random <= combinationItem.getChance(); final boolean success = random <= combinationItem.getChance();

File diff suppressed because it is too large Load Diff

View File

@@ -14,8 +14,10 @@
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
<xs:attribute type="xs:int" name="one" use="required" /> <xs:attribute type="xs:int" name="one" use="required" />
<xs:attribute type="xs:byte" name="enchant" use="optional" />
<xs:attribute type="xs:int" name="two" use="required" /> <xs:attribute type="xs:int" name="two" use="required" />
<xs:attribute type="xs:byte" name="chance" use="required" /> <xs:attribute type="xs:long" name="commission" use="optional" />
<xs:attribute type="xs:byte" name="chance" use="optional" />
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>

View File

@@ -83,11 +83,11 @@ public class CombinationItemsData implements IXmlReader
return _items; return _items;
} }
public CombinationItem getItemsBySlots(int firstSlot, int secondSlot) public CombinationItem getItemsBySlots(int firstSlot, int enchant, int secondSlot)
{ {
for (CombinationItem item : _items) for (CombinationItem item : _items)
{ {
if ((item.getItemOne() == firstSlot) && (item.getItemTwo() == secondSlot)) if ((item.getItemOne() == firstSlot) && (item.getItemTwo() == secondSlot) && (item.getEnchant() == enchant))
{ {
return item; return item;
} }
@@ -95,25 +95,12 @@ public class CombinationItemsData implements IXmlReader
return null; return null;
} }
public List<CombinationItem> getItemsByFirstSlot(int id) public List<CombinationItem> getItemsByFirstSlot(int id, int enchant)
{ {
final List<CombinationItem> result = new ArrayList<>(); final List<CombinationItem> result = new ArrayList<>();
for (CombinationItem item : _items) for (CombinationItem item : _items)
{ {
if (item.getItemOne() == id) if ((item.getItemOne() == id) && (item.getEnchant() == enchant))
{
result.add(item);
}
}
return result;
}
public List<CombinationItem> getItemsBySecondSlot(int id)
{
final List<CombinationItem> result = new ArrayList<>();
for (CombinationItem item : _items)
{
if (item.getItemTwo() == id)
{ {
result.add(item); result.add(item);
} }

View File

@@ -22,20 +22,24 @@ import java.util.Map;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
/** /**
* @author UnAfraid * @author UnAfraid, Mobius
*/ */
public class CombinationItem public class CombinationItem
{ {
private final int _itemOne; private final int _itemOne;
private final int _enchant;
private final int _itemTwo; private final int _itemTwo;
private final long _commission;
private final int _chance; private final int _chance;
private final Map<CombinationItemType, CombinationItemReward> _rewards = new EnumMap<>(CombinationItemType.class); private final Map<CombinationItemType, CombinationItemReward> _rewards = new EnumMap<>(CombinationItemType.class);
public CombinationItem(StatSet set) public CombinationItem(StatSet set)
{ {
_itemOne = set.getInt("one"); _itemOne = set.getInt("one");
_enchant = set.getInt("enchant", 0);
_itemTwo = set.getInt("two"); _itemTwo = set.getInt("two");
_chance = set.getInt("chance"); _commission = set.getLong("commission", 0);
_chance = set.getInt("chance", 33);
} }
public int getItemOne() public int getItemOne()
@@ -43,11 +47,21 @@ public class CombinationItem
return _itemOne; return _itemOne;
} }
public int getEnchant()
{
return _enchant;
}
public int getItemTwo() public int getItemTwo()
{ {
return _itemTwo; return _itemTwo;
} }
public long getCommission()
{
return _commission;
}
public int getChance() public int getChance()
{ {
return _chance; return _chance;

View File

@@ -82,7 +82,7 @@ public class RequestNewEnchantPushOne implements IClientIncomingPacket
return; return;
} }
final List<CombinationItem> combinationItems = CombinationItemsData.getInstance().getItemsByFirstSlot(itemOne.getId()); final List<CombinationItem> combinationItems = CombinationItemsData.getInstance().getItemsByFirstSlot(itemOne.getId(), itemOne.getEnchantLevel());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItems.isEmpty()) if (combinationItems.isEmpty())

View File

@@ -88,7 +88,7 @@ public class RequestNewEnchantPushTwo implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)

View File

@@ -94,7 +94,7 @@ public class RequestNewEnchantRetryToPutItems implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)

View File

@@ -91,7 +91,7 @@ public class RequestNewEnchantTry implements IClientIncomingPacket
return; return;
} }
final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemTwo.getId()); final CombinationItem combinationItem = CombinationItemsData.getInstance().getItemsBySlots(itemOne.getId(), itemOne.getEnchantLevel(), itemTwo.getId());
// Not implemented or not able to merge! // Not implemented or not able to merge!
if (combinationItem == null) if (combinationItem == null)
@@ -101,11 +101,19 @@ public class RequestNewEnchantTry implements IClientIncomingPacket
return; return;
} }
if (combinationItem.getCommission() > player.getAdena())
{
client.sendPacket(new ExEnchantFail(itemOne.getId(), itemTwo.getId()));
player.removeRequest(request.getClass());
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
return;
}
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addRemovedItem(itemOne); iu.addRemovedItem(itemOne);
// iu.addRemovedItem(itemTwo); // iu.addRemovedItem(itemTwo);
if (player.destroyItem("Compound-Item-One", itemOne, 1, null, true) && player.destroyItem("Compound-Item-Two", itemTwo, 1, null, true)) if (player.destroyItem("Compound-Item-One", itemOne, 1, null, true) && player.destroyItem("Compound-Item-Two", itemTwo, 1, null, true) && ((combinationItem.getCommission() <= 0) || player.reduceAdena("Compound-Commission", combinationItem.getCommission(), player, true)))
{ {
final double random = (Rnd.nextDouble() * 100); final double random = (Rnd.nextDouble() * 100);
final boolean success = random <= combinationItem.getChance(); final boolean success = random <= combinationItem.getChance();