From df5b69bc91d53ad493c4e4567b9af1d7700b4733 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:49:02 +0000 Subject: [PATCH] Support for special teleports. --- .../dist/game/data/xsd/TeleportListData.xsd | 1 + .../gameserver/data/xml/TeleportListData.java | 3 ++- .../model/holders/TeleportListHolder.java | 9 +++++++- .../teleports/ExRequestTeleport.java | 22 +++++++++++++++++-- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TeleportListData.xsd b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TeleportListData.xsd index e046c59a40..70a52c5ba2 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TeleportListData.xsd +++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/TeleportListData.xsd @@ -12,6 +12,7 @@ + diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java index 47ca97d95e..268b488aa8 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java @@ -61,7 +61,8 @@ public class TeleportListData implements IXmlReader final int y = set.getInt("y"); final int z = set.getInt("z"); final int tpPrice = set.getInt("price"); - _teleports.put(tpId, new TeleportListHolder(tpId, x, y, z, tpPrice)); + final boolean special = set.getBoolean("special", false); + _teleports.put(tpId, new TeleportListHolder(tpId, x, y, z, tpPrice, special)); })); } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java index 5dd6197d13..df58ef4eb1 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java @@ -26,14 +26,16 @@ public class TeleportListHolder private final int _y; private final int _z; private final int _price; + private final boolean _special; - public TeleportListHolder(int locId, int x, int y, int z, int price) + public TeleportListHolder(int locId, int x, int y, int z, int price, boolean special) { _locId = locId; _x = x; _y = y; _z = z; _price = price; + _special = special; } public int getLocId() @@ -60,4 +62,9 @@ public class TeleportListHolder { return _price; } + + public boolean isSpecial() + { + return _special; + } } \ No newline at end of file diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java index b6a0842330..77585e37c9 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/teleports/ExRequestTeleport.java @@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.holders.TeleportListHolder; +import org.l2jmobius.gameserver.model.itemcontainer.Inventory; import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.skills.CommonSkill; import org.l2jmobius.gameserver.model.zone.ZoneId; @@ -104,12 +105,29 @@ public class ExRequestTeleport implements IClientIncomingPacket final int price = teleport.getPrice(); if (price > 0) { - if (player.getAdena() < price) + // Check if player has fee. + if (teleport.isSpecial()) + { + if (player.getInventory().getInventoryItemCount(Inventory.LCOIN_ID, -1) < price) + { + player.sendPacket(SystemMessageId.THERE_ARE_NOT_ENOUGH_L_COINS); + return; + } + } + else if (player.getAdena() < price) { player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA); return; } - player.reduceAdena("Teleport", price, player, true); + // Reduce items. + if (teleport.isSpecial()) + { + player.destroyItemByItemId("Teleport", Inventory.LCOIN_ID, price, player, true); + } + else + { + player.reduceAdena("Teleport", price, player, true); + } } }