Unhardcoded Rune extraction fees.
This commit is contained in:
parent
6fff504b39
commit
8286580075
@ -3,17 +3,23 @@
|
||||
<fee crystalType="D">
|
||||
<first itemId="2130" count="107" /> <!-- Gemstone (D-grade-grade) -->
|
||||
<reNormal itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
<remove itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="C">
|
||||
<first itemId="2131" count="177" /> <!-- Gemstone (C-grade) -->
|
||||
<reNormal itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
<remove itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="B">
|
||||
<first itemId="2132" count="112" /> <!-- Gemstone (B-grade) -->
|
||||
<reNormal itemId="2132" count="56" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="2132" count="19" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="57" count="700000" /> <!-- Adena -->
|
||||
</fee>
|
||||
<fee crystalType="A">
|
||||
<first itemId="2133" count="24" /> <!-- Gemstone (A-grade) -->
|
||||
<reNormal itemId="2133" count="12" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="2133" count="5" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="57" count="3500000" /> <!-- Adena -->
|
||||
</fee>
|
||||
</list>
|
||||
|
@ -34,6 +34,7 @@
|
||||
<xs:element name="reNormal" minOccurs="0" type="fee" />
|
||||
<xs:element name="reSecondary" minOccurs="0" type="fee" />
|
||||
<xs:element name="reThird" minOccurs="0" type="fee" />
|
||||
<xs:element name="remove" minOccurs="0" maxOccurs="unbounded" type="fee" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="crystalType" name="crystalType" use="required" />
|
||||
</xs:complexType>
|
||||
|
@ -17,6 +17,8 @@
|
||||
package com.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -122,6 +124,11 @@ public class EnsoulData implements IGameXmlReader
|
||||
parseReFee(feeNode, fee, 2);
|
||||
break;
|
||||
}
|
||||
case "remove":
|
||||
{
|
||||
parseRemove(feeNode, fee);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -143,6 +150,14 @@ public class EnsoulData implements IGameXmlReader
|
||||
fee.setResoul(index, new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseRemove(Node ensoulNode, EnsoulFee fee)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
final int id = parseInteger(attrs, "itemId");
|
||||
final int count = parseInteger(attrs, "count");
|
||||
fee.addRemovalFee(new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseOptions(Node ensoulNode)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
@ -177,6 +192,12 @@ public class EnsoulData implements IGameXmlReader
|
||||
return fee != null ? fee.getResoul(index) : null;
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee(CrystalType type)
|
||||
{
|
||||
final EnsoulFee fee = _ensoulFees.get(type);
|
||||
return fee != null ? fee.getRemovalFee() : Collections.emptyList();
|
||||
}
|
||||
|
||||
public EnsoulOption getOption(int id)
|
||||
{
|
||||
return _ensoulOptions.get(id);
|
||||
|
@ -16,6 +16,9 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.type.CrystalType;
|
||||
|
||||
@ -28,6 +31,7 @@ public class EnsoulFee
|
||||
|
||||
private final ItemHolder[] _ensoulFee = new ItemHolder[3];
|
||||
private final ItemHolder[] _resoulFees = new ItemHolder[3];
|
||||
private final Collection<ItemHolder> _removalFee = Collections.emptyList();
|
||||
|
||||
public EnsoulFee(CrystalType type)
|
||||
{
|
||||
@ -49,6 +53,11 @@ public class EnsoulFee
|
||||
_resoulFees[index] = item;
|
||||
}
|
||||
|
||||
public void addRemovalFee(ItemHolder itemHolder)
|
||||
{
|
||||
_removalFee.add(itemHolder);
|
||||
}
|
||||
|
||||
public ItemHolder getEnsoul(int index)
|
||||
{
|
||||
return _ensoulFee[index];
|
||||
@ -58,4 +67,9 @@ public class EnsoulFee
|
||||
{
|
||||
return _resoulFees[index];
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee()
|
||||
{
|
||||
return _removalFee;
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,13 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.network.clientpackets.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.commons.network.PacketReader;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnsoulData;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.ensoul.EnsoulOption;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
@ -74,59 +77,35 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
final Collection<ItemHolder> removalFee = EnsoulData.getInstance().getRemovalFee(item.getItem().getCrystalType());
|
||||
if (removalFee.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Move to XML.
|
||||
switch (item.getItem().getItemGrade())
|
||||
// Check if player has required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
case D:
|
||||
if (player.getInventory().getInventoryItemCount(itemHolder.getId(), -1) < itemHolder.getCount())
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2130, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2130, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case C:
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2131, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2131, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case B:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2132, -1) >= 19) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 700000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2132, 19, player, true);
|
||||
player.reduceAdena("Rune Extract", 700000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case A:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2133, -1) >= 5) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 3500000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2133, 5, player, true);
|
||||
player.reduceAdena("Rune Extract", 3500000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
player.sendPacket(new ExEnSoulExtractionResult(false, item));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
// Take required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", itemHolder.getId(), itemHolder.getCount(), player, true);
|
||||
}
|
||||
|
||||
// Remove equipped rune.
|
||||
item.removeSpecialAbility(_position, _type);
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(item);
|
||||
|
||||
// Add rune in player inventory.
|
||||
final int runeId = EnsoulData.getInstance().getStone(_type, option.getId());
|
||||
if (runeId > 0)
|
||||
{
|
||||
@ -134,12 +113,6 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
}
|
||||
|
||||
player.sendInventoryUpdate(iu);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
}
|
||||
|
||||
player.sendPacket(new ExEnSoulExtractionResult(success, item));
|
||||
player.sendPacket(new ExEnSoulExtractionResult(true, item));
|
||||
}
|
||||
}
|
@ -3,17 +3,23 @@
|
||||
<fee crystalType="D">
|
||||
<first itemId="2130" count="107" /> <!-- Gemstone (D-grade-grade) -->
|
||||
<reNormal itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
<remove itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="C">
|
||||
<first itemId="2131" count="177" /> <!-- Gemstone (C-grade) -->
|
||||
<reNormal itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
<remove itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="B">
|
||||
<first itemId="2132" count="112" /> <!-- Gemstone (B-grade) -->
|
||||
<reNormal itemId="2132" count="56" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="2132" count="19" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="57" count="700000" /> <!-- Adena -->
|
||||
</fee>
|
||||
<fee crystalType="A">
|
||||
<first itemId="2133" count="24" /> <!-- Gemstone (A-grade) -->
|
||||
<reNormal itemId="2133" count="12" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="2133" count="5" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="57" count="3500000" /> <!-- Adena -->
|
||||
</fee>
|
||||
</list>
|
||||
|
@ -34,6 +34,7 @@
|
||||
<xs:element name="reNormal" minOccurs="0" type="fee" />
|
||||
<xs:element name="reSecondary" minOccurs="0" type="fee" />
|
||||
<xs:element name="reThird" minOccurs="0" type="fee" />
|
||||
<xs:element name="remove" minOccurs="0" maxOccurs="unbounded" type="fee" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="crystalType" name="crystalType" use="required" />
|
||||
</xs:complexType>
|
||||
|
@ -17,6 +17,8 @@
|
||||
package com.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -122,6 +124,11 @@ public class EnsoulData implements IGameXmlReader
|
||||
parseReFee(feeNode, fee, 2);
|
||||
break;
|
||||
}
|
||||
case "remove":
|
||||
{
|
||||
parseRemove(feeNode, fee);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -143,6 +150,14 @@ public class EnsoulData implements IGameXmlReader
|
||||
fee.setResoul(index, new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseRemove(Node ensoulNode, EnsoulFee fee)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
final int id = parseInteger(attrs, "itemId");
|
||||
final int count = parseInteger(attrs, "count");
|
||||
fee.addRemovalFee(new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseOptions(Node ensoulNode)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
@ -177,6 +192,12 @@ public class EnsoulData implements IGameXmlReader
|
||||
return fee != null ? fee.getResoul(index) : null;
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee(CrystalType type)
|
||||
{
|
||||
final EnsoulFee fee = _ensoulFees.get(type);
|
||||
return fee != null ? fee.getRemovalFee() : Collections.emptyList();
|
||||
}
|
||||
|
||||
public EnsoulOption getOption(int id)
|
||||
{
|
||||
return _ensoulOptions.get(id);
|
||||
|
@ -16,6 +16,9 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.type.CrystalType;
|
||||
|
||||
@ -28,6 +31,7 @@ public class EnsoulFee
|
||||
|
||||
private final ItemHolder[] _ensoulFee = new ItemHolder[3];
|
||||
private final ItemHolder[] _resoulFees = new ItemHolder[3];
|
||||
private final Collection<ItemHolder> _removalFee = Collections.emptyList();
|
||||
|
||||
public EnsoulFee(CrystalType type)
|
||||
{
|
||||
@ -49,6 +53,11 @@ public class EnsoulFee
|
||||
_resoulFees[index] = item;
|
||||
}
|
||||
|
||||
public void addRemovalFee(ItemHolder itemHolder)
|
||||
{
|
||||
_removalFee.add(itemHolder);
|
||||
}
|
||||
|
||||
public ItemHolder getEnsoul(int index)
|
||||
{
|
||||
return _ensoulFee[index];
|
||||
@ -58,4 +67,9 @@ public class EnsoulFee
|
||||
{
|
||||
return _resoulFees[index];
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee()
|
||||
{
|
||||
return _removalFee;
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,13 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.network.clientpackets.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.commons.network.PacketReader;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnsoulData;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.ensoul.EnsoulOption;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
@ -74,59 +77,35 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
final Collection<ItemHolder> removalFee = EnsoulData.getInstance().getRemovalFee(item.getItem().getCrystalType());
|
||||
if (removalFee.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Move to XML.
|
||||
switch (item.getItem().getItemGrade())
|
||||
// Check if player has required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
case D:
|
||||
if (player.getInventory().getInventoryItemCount(itemHolder.getId(), -1) < itemHolder.getCount())
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2130, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2130, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case C:
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2131, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2131, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case B:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2132, -1) >= 19) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 700000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2132, 19, player, true);
|
||||
player.reduceAdena("Rune Extract", 700000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case A:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2133, -1) >= 5) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 3500000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2133, 5, player, true);
|
||||
player.reduceAdena("Rune Extract", 3500000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
player.sendPacket(new ExEnSoulExtractionResult(false, item));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
// Take required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", itemHolder.getId(), itemHolder.getCount(), player, true);
|
||||
}
|
||||
|
||||
// Remove equipped rune.
|
||||
item.removeSpecialAbility(_position, _type);
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(item);
|
||||
|
||||
// Add rune in player inventory.
|
||||
final int runeId = EnsoulData.getInstance().getStone(_type, option.getId());
|
||||
if (runeId > 0)
|
||||
{
|
||||
@ -134,12 +113,6 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
}
|
||||
|
||||
player.sendInventoryUpdate(iu);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
}
|
||||
|
||||
player.sendPacket(new ExEnSoulExtractionResult(success, item));
|
||||
player.sendPacket(new ExEnSoulExtractionResult(true, item));
|
||||
}
|
||||
}
|
@ -3,17 +3,23 @@
|
||||
<fee crystalType="D">
|
||||
<first itemId="2130" count="107" /> <!-- Gemstone (D-grade-grade) -->
|
||||
<reNormal itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
<remove itemId="2130" count="89" /> <!-- Gemstone (D-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="C">
|
||||
<first itemId="2131" count="177" /> <!-- Gemstone (C-grade) -->
|
||||
<reNormal itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
<remove itemId="2131" count="89" /> <!-- Gemstone (C-grade) -->
|
||||
</fee>
|
||||
<fee crystalType="B">
|
||||
<first itemId="2132" count="112" /> <!-- Gemstone (B-grade) -->
|
||||
<reNormal itemId="2132" count="56" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="2132" count="19" /> <!-- Gemstone (B-grade) -->
|
||||
<remove itemId="57" count="700000" /> <!-- Adena -->
|
||||
</fee>
|
||||
<fee crystalType="A">
|
||||
<first itemId="2133" count="24" /> <!-- Gemstone (A-grade) -->
|
||||
<reNormal itemId="2133" count="12" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="2133" count="5" /> <!-- Gemstone (A-grade) -->
|
||||
<remove itemId="57" count="3500000" /> <!-- Adena -->
|
||||
</fee>
|
||||
</list>
|
||||
|
@ -34,6 +34,7 @@
|
||||
<xs:element name="reNormal" minOccurs="0" type="fee" />
|
||||
<xs:element name="reSecondary" minOccurs="0" type="fee" />
|
||||
<xs:element name="reThird" minOccurs="0" type="fee" />
|
||||
<xs:element name="remove" minOccurs="0" maxOccurs="unbounded" type="fee" />
|
||||
</xs:sequence>
|
||||
<xs:attribute type="crystalType" name="crystalType" use="required" />
|
||||
</xs:complexType>
|
||||
|
@ -17,6 +17,8 @@
|
||||
package com.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -122,6 +124,11 @@ public class EnsoulData implements IGameXmlReader
|
||||
parseReFee(feeNode, fee, 2);
|
||||
break;
|
||||
}
|
||||
case "remove":
|
||||
{
|
||||
parseRemove(feeNode, fee);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -143,6 +150,14 @@ public class EnsoulData implements IGameXmlReader
|
||||
fee.setResoul(index, new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseRemove(Node ensoulNode, EnsoulFee fee)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
final int id = parseInteger(attrs, "itemId");
|
||||
final int count = parseInteger(attrs, "count");
|
||||
fee.addRemovalFee(new ItemHolder(id, count));
|
||||
}
|
||||
|
||||
private void parseOptions(Node ensoulNode)
|
||||
{
|
||||
final NamedNodeMap attrs = ensoulNode.getAttributes();
|
||||
@ -177,6 +192,12 @@ public class EnsoulData implements IGameXmlReader
|
||||
return fee != null ? fee.getResoul(index) : null;
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee(CrystalType type)
|
||||
{
|
||||
final EnsoulFee fee = _ensoulFees.get(type);
|
||||
return fee != null ? fee.getRemovalFee() : Collections.emptyList();
|
||||
}
|
||||
|
||||
public EnsoulOption getOption(int id)
|
||||
{
|
||||
return _ensoulOptions.get(id);
|
||||
|
@ -16,6 +16,9 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.model.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.type.CrystalType;
|
||||
|
||||
@ -28,6 +31,7 @@ public class EnsoulFee
|
||||
|
||||
private final ItemHolder[] _ensoulFee = new ItemHolder[3];
|
||||
private final ItemHolder[] _resoulFees = new ItemHolder[3];
|
||||
private final Collection<ItemHolder> _removalFee = Collections.emptyList();
|
||||
|
||||
public EnsoulFee(CrystalType type)
|
||||
{
|
||||
@ -49,6 +53,11 @@ public class EnsoulFee
|
||||
_resoulFees[index] = item;
|
||||
}
|
||||
|
||||
public void addRemovalFee(ItemHolder itemHolder)
|
||||
{
|
||||
_removalFee.add(itemHolder);
|
||||
}
|
||||
|
||||
public ItemHolder getEnsoul(int index)
|
||||
{
|
||||
return _ensoulFee[index];
|
||||
@ -58,4 +67,9 @@ public class EnsoulFee
|
||||
{
|
||||
return _resoulFees[index];
|
||||
}
|
||||
|
||||
public Collection<ItemHolder> getRemovalFee()
|
||||
{
|
||||
return _removalFee;
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,13 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.network.clientpackets.ensoul;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.l2jmobius.commons.network.PacketReader;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnsoulData;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.ensoul.EnsoulOption;
|
||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
@ -74,59 +77,35 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
final Collection<ItemHolder> removalFee = EnsoulData.getInstance().getRemovalFee(item.getItem().getCrystalType());
|
||||
if (removalFee.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Move to XML.
|
||||
switch (item.getItem().getItemGrade())
|
||||
// Check if player has required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
case D:
|
||||
if (player.getInventory().getInventoryItemCount(itemHolder.getId(), -1) < itemHolder.getCount())
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2130, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2130, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case C:
|
||||
{
|
||||
if (player.getInventory().getInventoryItemCount(2131, -1) >= 89)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2131, 89, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case B:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2132, -1) >= 19) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 700000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2132, 19, player, true);
|
||||
player.reduceAdena("Rune Extract", 700000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case A:
|
||||
{
|
||||
if ((player.getInventory().getInventoryItemCount(2133, -1) >= 5) //
|
||||
&& (player.getInventory().getInventoryItemCount(57, -1) >= 3500000))
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", 2133, 5, player, true);
|
||||
player.reduceAdena("Rune Extract", 3500000, player, true);
|
||||
success = true;
|
||||
}
|
||||
break;
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
player.sendPacket(new ExEnSoulExtractionResult(false, item));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
// Take required items.
|
||||
for (ItemHolder itemHolder : removalFee)
|
||||
{
|
||||
player.destroyItemByItemId("Rune Extract", itemHolder.getId(), itemHolder.getCount(), player, true);
|
||||
}
|
||||
|
||||
// Remove equipped rune.
|
||||
item.removeSpecialAbility(_position, _type);
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(item);
|
||||
|
||||
// Add rune in player inventory.
|
||||
final int runeId = EnsoulData.getInstance().getStone(_type, option.getId());
|
||||
if (runeId > 0)
|
||||
{
|
||||
@ -134,12 +113,6 @@ public class RequestTryEnSoulExtraction implements IClientIncomingPacket
|
||||
}
|
||||
|
||||
player.sendInventoryUpdate(iu);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
|
||||
}
|
||||
|
||||
player.sendPacket(new ExEnSoulExtractionResult(success, item));
|
||||
player.sendPacket(new ExEnSoulExtractionResult(true, item));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user