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);
+ }
}
}