Improved requesting teleport method.
This commit is contained in:
parent
282d84a65f
commit
a942671449
@ -17,8 +17,8 @@
|
||||
package org.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
@ -28,12 +28,12 @@ import org.l2jmobius.gameserver.model.StatsSet;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
* @author NviX, Mobius
|
||||
*/
|
||||
public class TeleportListData implements IXmlReader
|
||||
{
|
||||
private static Logger LOGGER = Logger.getLogger(TeleportListData.class.getName());
|
||||
private final List<TeleportListHolder> _teleports = new ArrayList<>();
|
||||
private final Map<Integer, TeleportListHolder> _teleports = new HashMap<>();
|
||||
private int _teleportsCount = 0;
|
||||
|
||||
protected TeleportListData()
|
||||
@ -61,13 +61,13 @@ public class TeleportListData implements IXmlReader
|
||||
final int y = set.getInt("y");
|
||||
final int z = set.getInt("z");
|
||||
final int tpPrice = set.getInt("price");
|
||||
_teleports.add(new TeleportListHolder(tpId, x, y, z, tpPrice));
|
||||
_teleports.put(tpId, new TeleportListHolder(tpId, x, y, z, tpPrice));
|
||||
}));
|
||||
}
|
||||
|
||||
public List<TeleportListHolder> getTeleports()
|
||||
public TeleportListHolder getTeleport(int teleportId)
|
||||
{
|
||||
return _teleports;
|
||||
return _teleports.get(teleportId);
|
||||
}
|
||||
|
||||
public int getTeleportsCount()
|
||||
|
@ -16,24 +16,27 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TeleportListData;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.Castle;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
* @author NviX, Mobius
|
||||
*/
|
||||
public class ExRequestTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _locId;
|
||||
private int _teleportId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_locId = packet.readD();
|
||||
_teleportId = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -46,29 +49,32 @@ public class ExRequestTeleport implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
|
||||
for (TeleportListHolder teleport : TeleportListData.getInstance().getTeleports())
|
||||
final TeleportListHolder teleport = TeleportListData.getInstance().getTeleport(_teleportId);
|
||||
if (teleport == null)
|
||||
{
|
||||
if (teleport.getLocId() == _locId)
|
||||
{
|
||||
if (player.getAdena() < teleport.getPrice())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
|
||||
player.reduceAdena("teleport", teleport.getPrice(), player, true);
|
||||
player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success)
|
||||
{
|
||||
LOGGER.info("No registered teleport location for id: " + _locId);
|
||||
LOGGER.info("No registered teleport location for id: " + _teleportId);
|
||||
return;
|
||||
}
|
||||
|
||||
final Castle castle = CastleManager.getInstance().getCastle(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
if ((castle != null) && castle.getSiege().isInProgress())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean mustPay = player.getLevel() > Config.MAX_FREE_TELEPORT_LEVEL;
|
||||
final int price = teleport.getPrice();
|
||||
if (mustPay && (price > 0))
|
||||
{
|
||||
if (player.getAdena() < price)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
player.reduceAdena("Teleport", price, player, true);
|
||||
}
|
||||
|
||||
player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
}
|
||||
}
|
@ -17,8 +17,8 @@
|
||||
package org.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
@ -28,12 +28,12 @@ import org.l2jmobius.gameserver.model.StatsSet;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
* @author NviX, Mobius
|
||||
*/
|
||||
public class TeleportListData implements IXmlReader
|
||||
{
|
||||
private static Logger LOGGER = Logger.getLogger(TeleportListData.class.getName());
|
||||
private final List<TeleportListHolder> _teleports = new ArrayList<>();
|
||||
private final Map<Integer, TeleportListHolder> _teleports = new HashMap<>();
|
||||
private int _teleportsCount = 0;
|
||||
|
||||
protected TeleportListData()
|
||||
@ -61,13 +61,13 @@ public class TeleportListData implements IXmlReader
|
||||
final int y = set.getInt("y");
|
||||
final int z = set.getInt("z");
|
||||
final int tpPrice = set.getInt("price");
|
||||
_teleports.add(new TeleportListHolder(tpId, x, y, z, tpPrice));
|
||||
_teleports.put(tpId, new TeleportListHolder(tpId, x, y, z, tpPrice));
|
||||
}));
|
||||
}
|
||||
|
||||
public List<TeleportListHolder> getTeleports()
|
||||
public TeleportListHolder getTeleport(int teleportId)
|
||||
{
|
||||
return _teleports;
|
||||
return _teleports.get(teleportId);
|
||||
}
|
||||
|
||||
public int getTeleportsCount()
|
||||
|
@ -16,24 +16,27 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TeleportListData;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.Castle;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
* @author NviX, Mobius
|
||||
*/
|
||||
public class ExRequestTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _locId;
|
||||
private int _teleportId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_locId = packet.readD();
|
||||
_teleportId = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -46,29 +49,32 @@ public class ExRequestTeleport implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
|
||||
for (TeleportListHolder teleport : TeleportListData.getInstance().getTeleports())
|
||||
final TeleportListHolder teleport = TeleportListData.getInstance().getTeleport(_teleportId);
|
||||
if (teleport == null)
|
||||
{
|
||||
if (teleport.getLocId() == _locId)
|
||||
{
|
||||
if (player.getAdena() < teleport.getPrice())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
|
||||
player.reduceAdena("teleport", teleport.getPrice(), player, true);
|
||||
player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success)
|
||||
{
|
||||
LOGGER.info("No registered teleport location for id: " + _locId);
|
||||
LOGGER.info("No registered teleport location for id: " + _teleportId);
|
||||
return;
|
||||
}
|
||||
|
||||
final Castle castle = CastleManager.getInstance().getCastle(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
if ((castle != null) && castle.getSiege().isInProgress())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean mustPay = player.getLevel() > Config.MAX_FREE_TELEPORT_LEVEL;
|
||||
final int price = teleport.getPrice();
|
||||
if (mustPay && (price > 0))
|
||||
{
|
||||
if (player.getAdena() < price)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
player.reduceAdena("Teleport", price, player, true);
|
||||
}
|
||||
|
||||
player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user