Merged zone vertices with XML and categorized by type.
Most data come from aCis free version.
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
package org.l2jmobius.gameserver.datatables.xml;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -26,12 +25,11 @@ import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.instancemanager.ArenaManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
@@ -55,29 +53,6 @@ public class MapRegionData implements IXmlReader
|
||||
public static final Location FLORAN_VILLAGE_LOCATION = new Location(17817, 170079, -3530);
|
||||
public static final Location JAIL_LOCATION = new Location(-114356, -249645, -2984);
|
||||
private static final Location EXIT_MONSTER_RACE_LOCATION = new Location(12661, 181687, -3560);
|
||||
private static final List<Location> KARMA_LOCATIONS = new ArrayList<>();
|
||||
static
|
||||
{
|
||||
KARMA_LOCATIONS.add(new Location(-79077, 240355, -3440)); // Talking Island Village
|
||||
KARMA_LOCATIONS.add(new Location(43503, 40398, -3450)); // Elven Village
|
||||
KARMA_LOCATIONS.add(new Location(1675, 19581, -3110)); // Dark Elven Village
|
||||
KARMA_LOCATIONS.add(new Location(-44413, -121762, -235)); // Orc Village
|
||||
KARMA_LOCATIONS.add(new Location(12009, -187319, -3309)); // Dwarven Village
|
||||
KARMA_LOCATIONS.add(new Location(-18872, 126216, -3280)); // Town of Gludio
|
||||
KARMA_LOCATIONS.add(new Location(-85915, 150402, -3060)); // Gludin Village
|
||||
KARMA_LOCATIONS.add(new Location(23652, 144823, -3330)); // Town of Dion
|
||||
KARMA_LOCATIONS.add(new Location(79125, 154197, -3490)); // Town of Giran
|
||||
KARMA_LOCATIONS.add(new Location(73840, 58193, -2730)); // Town of Oren
|
||||
KARMA_LOCATIONS.add(new Location(44413, 22610, 235)); // Town of Aden
|
||||
KARMA_LOCATIONS.add(new Location(114137, 72993, -2445)); // Hunters Village
|
||||
KARMA_LOCATIONS.add(new Location(79125, 154197, -3490)); // Giran Harbor
|
||||
KARMA_LOCATIONS.add(new Location(119536, 218558, -3495)); // Heine
|
||||
KARMA_LOCATIONS.add(new Location(42931, -44733, -1326)); // Rune Township
|
||||
KARMA_LOCATIONS.add(new Location(147419, -64980, -3457)); // Town of Goddard
|
||||
KARMA_LOCATIONS.add(new Location(85184, -138560, -2256)); // Town of Shuttgart
|
||||
KARMA_LOCATIONS.add(new Location(17817, 170079, -3530)); // Floran Village
|
||||
KARMA_LOCATIONS.add(new Location(9927, -24138, -3723)); // Primeval Isle Wharf
|
||||
}
|
||||
private static final int[][] REGIONS = new int[19][21];
|
||||
|
||||
protected MapRegionData()
|
||||
@@ -148,11 +123,129 @@ public class MapRegionData implements IXmlReader
|
||||
return (posY >> 15) + 10;
|
||||
}
|
||||
|
||||
public Location getTeleToLocation(Creature creature, TeleportWhereType teleportWhere)
|
||||
{
|
||||
// The character isn't a player, bypass all checks and retrieve a random spawn location on closest town.
|
||||
if (!(creature instanceof PlayerInstance))
|
||||
{
|
||||
return getClosestTown(creature.getX(), creature.getY()).getSpawnLoc();
|
||||
}
|
||||
|
||||
final PlayerInstance player = creature.getActingPlayer();
|
||||
|
||||
// If in Monster Derby Track
|
||||
if (player.isInsideZone(ZoneId.MONSTER_TRACK))
|
||||
{
|
||||
return EXIT_MONSTER_RACE_LOCATION;
|
||||
}
|
||||
|
||||
Castle castle = null;
|
||||
Fort fort = null;
|
||||
ClanHall clanhall = null;
|
||||
|
||||
if (player.getClan() != null)
|
||||
{
|
||||
// If teleport to clan hall
|
||||
if (teleportWhere == TeleportWhereType.CLANHALL)
|
||||
{
|
||||
clanhall = ClanHallManager.getInstance().getClanHallByOwner(player.getClan());
|
||||
if (clanhall != null)
|
||||
{
|
||||
final ClanHallZone zone = clanhall.getZone();
|
||||
if (zone != null)
|
||||
{
|
||||
return zone.getSpawnLoc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If teleport to castle
|
||||
if (teleportWhere == TeleportWhereType.CASTLE)
|
||||
{
|
||||
castle = CastleManager.getInstance().getCastleByOwner(player.getClan());
|
||||
}
|
||||
|
||||
// If teleport to fort
|
||||
if (teleportWhere == TeleportWhereType.FORTRESS)
|
||||
{
|
||||
fort = FortManager.getInstance().getFortByOwner(player.getClan());
|
||||
}
|
||||
|
||||
// Check if player is on castle or fortress ground
|
||||
if (castle == null)
|
||||
{
|
||||
castle = CastleManager.getInstance().getCastle(player);
|
||||
}
|
||||
|
||||
if (fort == null)
|
||||
{
|
||||
fort = FortManager.getInstance().getFort(player);
|
||||
}
|
||||
|
||||
if ((castle != null) && (castle.getCastleId() > 0))
|
||||
{
|
||||
// If Teleporting to castle or if is on caslte with siege and player's clan is defender
|
||||
if ((teleportWhere == TeleportWhereType.CASTLE) || ((teleportWhere == TeleportWhereType.CASTLE) && castle.getSiege().isInProgress() && (castle.getSiege().getDefenderClan(player.getClan()) != null)))
|
||||
{
|
||||
return castle.getZone().getSpawnLoc();
|
||||
}
|
||||
|
||||
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && castle.getSiege().isInProgress())
|
||||
{
|
||||
// Check if player's clan is attacker
|
||||
final List<NpcInstance> flags = castle.getSiege().getFlag(player.getClan());
|
||||
if ((flags != null) && !flags.isEmpty())
|
||||
{
|
||||
// Spawn to flag - Need more work to get player to the nearest flag
|
||||
final NpcInstance flag = flags.get(0);
|
||||
return new Location(flag.getX(), flag.getY(), flag.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((fort != null) && (fort.getFortId() > 0))
|
||||
{
|
||||
// Teleporting to castle or fortress is on castle with siege and player's clan is defender
|
||||
if ((teleportWhere == TeleportWhereType.FORTRESS) || ((teleportWhere == TeleportWhereType.FORTRESS) && fort.getSiege().isInProgress() && (fort.getSiege().getDefenderClan(player.getClan()) != null)))
|
||||
{
|
||||
return fort.getZone().getSpawnLoc();
|
||||
}
|
||||
|
||||
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && fort.getSiege().isInProgress())
|
||||
{
|
||||
// Check if player's clan is attacker
|
||||
final List<NpcInstance> flags = fort.getSiege().getFlag(player.getClan());
|
||||
if ((flags != null) && !flags.isEmpty())
|
||||
{
|
||||
// Spawn to flag
|
||||
final NpcInstance flag = flags.get(0);
|
||||
return new Location(flag.getX(), flag.getY(), flag.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Karma player lands out of city.
|
||||
if (player.getKarma() > 0)
|
||||
{
|
||||
return getClosestTown(player).getChaoticSpawnLoc();
|
||||
}
|
||||
|
||||
// Check if player is in arena.
|
||||
final ArenaZone arena = ZoneData.getInstance().getZone(player, ArenaZone.class);
|
||||
if (arena != null)
|
||||
{
|
||||
return arena.getSpawnLoc();
|
||||
}
|
||||
|
||||
// Retrieve a random spawn location of the nearest town.
|
||||
return getClosestTown(player).getSpawnLoc();
|
||||
}
|
||||
|
||||
public int getAreaCastle(Creature creature)
|
||||
{
|
||||
switch (getClosestTownNumber(creature))
|
||||
{
|
||||
case 0:// Talking Island Village
|
||||
case 0: // Talking Island Village
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@@ -323,137 +416,261 @@ public class MapRegionData implements IXmlReader
|
||||
}
|
||||
}
|
||||
|
||||
public Location getTeleToLocation(Creature creature, TeleportWhereType teleportWhere)
|
||||
/**
|
||||
* A specific method, used ONLY by players. There's a Race condition.
|
||||
* @param player : The player used to find race, x and y.
|
||||
* @return the closest TownZone based on a X/Y location.
|
||||
*/
|
||||
private TownZone getClosestTown(PlayerInstance player)
|
||||
{
|
||||
if (creature instanceof PlayerInstance)
|
||||
switch (getMapRegion(player.getX(), player.getY()))
|
||||
{
|
||||
final PlayerInstance player = creature.getActingPlayer();
|
||||
|
||||
// If in Monster Derby Track
|
||||
if (player.isInsideZone(ZoneId.MONSTER_TRACK))
|
||||
case 0: // TI
|
||||
{
|
||||
return EXIT_MONSTER_RACE_LOCATION;
|
||||
return getTown(2);
|
||||
}
|
||||
|
||||
Castle castle = null;
|
||||
Fort fort = null;
|
||||
ClanHall clanhall = null;
|
||||
|
||||
if (player.getClan() != null)
|
||||
case 1: // Elven
|
||||
{
|
||||
// If teleport to clan hall
|
||||
if (teleportWhere == TeleportWhereType.CLANHALL)
|
||||
{
|
||||
clanhall = ClanHallManager.getInstance().getClanHallByOwner(player.getClan());
|
||||
if (clanhall != null)
|
||||
{
|
||||
final ClanHallZone zone = clanhall.getZone();
|
||||
if (zone != null)
|
||||
{
|
||||
return zone.getSpawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If teleport to castle
|
||||
if (teleportWhere == TeleportWhereType.CASTLE)
|
||||
{
|
||||
castle = CastleManager.getInstance().getCastleByOwner(player.getClan());
|
||||
}
|
||||
|
||||
// If teleport to fort
|
||||
if (teleportWhere == TeleportWhereType.FORTRESS)
|
||||
{
|
||||
fort = FortManager.getInstance().getFortByOwner(player.getClan());
|
||||
}
|
||||
|
||||
// Check if player is on castle or fortress ground
|
||||
if (castle == null)
|
||||
{
|
||||
castle = CastleManager.getInstance().getCastle(player);
|
||||
}
|
||||
|
||||
if (fort == null)
|
||||
{
|
||||
fort = FortManager.getInstance().getFort(player);
|
||||
}
|
||||
|
||||
if ((castle != null) && (castle.getCastleId() > 0))
|
||||
{
|
||||
// If Teleporting to castle or if is on caslte with siege and player's clan is defender
|
||||
if ((teleportWhere == TeleportWhereType.CASTLE) || ((teleportWhere == TeleportWhereType.CASTLE) && castle.getSiege().isInProgress() && (castle.getSiege().getDefenderClan(player.getClan()) != null)))
|
||||
{
|
||||
return castle.getZone().getSpawn();
|
||||
}
|
||||
|
||||
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && castle.getSiege().isInProgress())
|
||||
{
|
||||
// Check if player's clan is attacker
|
||||
final List<NpcInstance> flags = castle.getSiege().getFlag(player.getClan());
|
||||
if ((flags != null) && !flags.isEmpty())
|
||||
{
|
||||
// Spawn to flag - Need more work to get player to the nearest flag
|
||||
final NpcInstance flag = flags.get(0);
|
||||
return new Location(flag.getX(), flag.getY(), flag.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((fort != null) && (fort.getFortId() > 0))
|
||||
{
|
||||
// Teleporting to castle or fortress is on castle with siege and player's clan is defender
|
||||
if ((teleportWhere == TeleportWhereType.FORTRESS) || ((teleportWhere == TeleportWhereType.FORTRESS) && fort.getSiege().isInProgress() && (fort.getSiege().getDefenderClan(player.getClan()) != null)))
|
||||
{
|
||||
return fort.getZone().getSpawn();
|
||||
}
|
||||
|
||||
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && fort.getSiege().isInProgress())
|
||||
{
|
||||
// Check if player's clan is attacker
|
||||
final List<NpcInstance> flags = fort.getSiege().getFlag(player.getClan());
|
||||
if ((flags != null) && !flags.isEmpty())
|
||||
{
|
||||
// Spawn to flag
|
||||
final NpcInstance flag = flags.get(0);
|
||||
return new Location(flag.getX(), flag.getY(), flag.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
return getTown((player.getTemplate().getRace() == Race.DARK_ELF) ? 1 : 3);
|
||||
}
|
||||
|
||||
// Teleport red pk 5+ to Floran Village
|
||||
if ((player.getPkKills() > 5) && (player.getKarma() > 1))
|
||||
case 2: // DE
|
||||
{
|
||||
return FLORAN_VILLAGE_LOCATION;
|
||||
return getTown((player.getTemplate().getRace() == Race.ELF) ? 3 : 1);
|
||||
}
|
||||
|
||||
// Karma player land out of city
|
||||
if (player.getKarma() > 1)
|
||||
case 3: // Orc
|
||||
{
|
||||
final int closest = getMapRegion(creature.getX(), creature.getY());
|
||||
if ((closest >= 0) && (closest < KARMA_LOCATIONS.size()))
|
||||
{
|
||||
return KARMA_LOCATIONS.get(closest);
|
||||
}
|
||||
return FLORAN_VILLAGE_LOCATION;
|
||||
return getTown(4);
|
||||
}
|
||||
|
||||
// Checking if in arena
|
||||
final ArenaZone arena = ArenaManager.getInstance().getArena(player);
|
||||
if (arena != null)
|
||||
case 4: // Dwarven
|
||||
{
|
||||
return arena.getSpawnLoc();
|
||||
return getTown(6);
|
||||
}
|
||||
case 5: // Gludio
|
||||
{
|
||||
return getTown(7);
|
||||
}
|
||||
case 6: // Gludin
|
||||
{
|
||||
return getTown(5);
|
||||
}
|
||||
case 7: // Dion
|
||||
{
|
||||
return getTown(8);
|
||||
}
|
||||
case 8: // Giran
|
||||
case 12: // Giran Harbor
|
||||
{
|
||||
return getTown(9);
|
||||
}
|
||||
case 9: // Oren
|
||||
{
|
||||
return getTown(10);
|
||||
}
|
||||
case 10: // Aden
|
||||
{
|
||||
return getTown(12);
|
||||
}
|
||||
case 11: // HV
|
||||
{
|
||||
return getTown(11);
|
||||
}
|
||||
case 13: // Heine
|
||||
{
|
||||
return getTown(15);
|
||||
}
|
||||
case 14: // Rune
|
||||
{
|
||||
return getTown(14);
|
||||
}
|
||||
case 15: // Goddard
|
||||
{
|
||||
return getTown(13);
|
||||
}
|
||||
case 16: // Schuttgart
|
||||
{
|
||||
return getTown(17);
|
||||
}
|
||||
case 17: // Floran
|
||||
{
|
||||
return getTown(16);
|
||||
}
|
||||
case 18: // Primeval Isle
|
||||
{
|
||||
return getTown(19);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the nearest town
|
||||
TownZone localZone = null;
|
||||
if ((creature != null) && ((localZone = TownManager.getInstance().getClosestTown(creature)) != null))
|
||||
return getTown(16); // Default to floran
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x : The current character's X location.
|
||||
* @param y : The current character's Y location.
|
||||
* @return the closest L2TownZone based on a X/Y location.
|
||||
*/
|
||||
private TownZone getClosestTown(int x, int y)
|
||||
{
|
||||
switch (getMapRegion(x, y))
|
||||
{
|
||||
return localZone.getSpawnLoc();
|
||||
case 0: // TI
|
||||
{
|
||||
return getTown(2);
|
||||
}
|
||||
case 1: // Elven
|
||||
{
|
||||
return getTown(3);
|
||||
}
|
||||
case 2: // DE
|
||||
{
|
||||
return getTown(1);
|
||||
}
|
||||
case 3: // Orc
|
||||
{
|
||||
return getTown(4);
|
||||
}
|
||||
case 4: // Dwarven
|
||||
{
|
||||
return getTown(6);
|
||||
}
|
||||
case 5: // Gludio
|
||||
{
|
||||
return getTown(7);
|
||||
}
|
||||
case 6: // Gludin
|
||||
{
|
||||
return getTown(5);
|
||||
}
|
||||
case 7: // Dion
|
||||
{
|
||||
return getTown(8);
|
||||
}
|
||||
case 8: // Giran
|
||||
case 12: // Giran Harbor
|
||||
{
|
||||
return getTown(9);
|
||||
}
|
||||
case 9: // Oren
|
||||
{
|
||||
return getTown(10);
|
||||
}
|
||||
case 10: // Aden
|
||||
{
|
||||
return getTown(12);
|
||||
}
|
||||
case 11: // HV
|
||||
{
|
||||
return getTown(11);
|
||||
}
|
||||
case 13: // Heine
|
||||
{
|
||||
return getTown(15);
|
||||
}
|
||||
case 14: // Rune
|
||||
{
|
||||
return getTown(14);
|
||||
}
|
||||
case 15: // Goddard
|
||||
{
|
||||
return getTown(13);
|
||||
}
|
||||
case 16: // Schuttgart
|
||||
{
|
||||
return getTown(17);
|
||||
}
|
||||
case 17: // Floran
|
||||
{
|
||||
return getTown(16);
|
||||
}
|
||||
case 18: // Primeval Isle
|
||||
{
|
||||
return getTown(19);
|
||||
}
|
||||
}
|
||||
|
||||
localZone = TownManager.getInstance().getTown(9); // Giran
|
||||
return localZone.getSpawnLoc();
|
||||
return getTown(16); // Default to floran
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x : The current character's X location.
|
||||
* @param y : The current character's Y location.
|
||||
* @return the closest region based on a X/Y location.
|
||||
*/
|
||||
public int getClosestLocation(int x, int y)
|
||||
{
|
||||
switch (getMapRegion(x, y))
|
||||
{
|
||||
case 0: // TI
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
case 1: // Elven
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
case 2: // DE
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
case 3: // Orc
|
||||
case 4: // Dwarven
|
||||
case 16: // Schuttgart
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
case 5: // Gludio
|
||||
case 6: // Gludin
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
case 7: // Dion
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
case 8: // Giran
|
||||
case 12: // Giran Harbor
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
case 9: // Oren
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
case 10: // Aden
|
||||
{
|
||||
return 13;
|
||||
}
|
||||
case 11: // HV
|
||||
{
|
||||
return 11;
|
||||
}
|
||||
case 13: // Heine
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
case 14: // Rune
|
||||
{
|
||||
return 14;
|
||||
}
|
||||
case 15: // Goddard
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param townId the townId to match.
|
||||
* @return a TownZone based on the overall list of TownZone, matching the townId.
|
||||
*/
|
||||
public final TownZone getTown(int townId)
|
||||
{
|
||||
for (TownZone temp : ZoneData.getInstance().getAllZones(TownZone.class))
|
||||
{
|
||||
if (temp.getTownId() == townId)
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MapRegionData getInstance()
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -232,10 +232,9 @@ public class AdminSiege implements IAdminCommandHandler
|
||||
else if (command.equalsIgnoreCase("admin_clanhallteleportself"))
|
||||
{
|
||||
final ClanHallZone zone = clanhall.getZone();
|
||||
|
||||
if (zone != null)
|
||||
{
|
||||
activeChar.teleToLocation(zone.getSpawn(), true);
|
||||
activeChar.teleToLocation(zone.getSpawnLoc(), true);
|
||||
}
|
||||
}
|
||||
else if (command.equalsIgnoreCase("admin_spawn_doors"))
|
||||
|
@@ -16,11 +16,10 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.handler.admincommandhandlers;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -61,63 +60,44 @@ public class AdminTownWar implements IAdminCommandHandler
|
||||
// All Towns will become War Zones
|
||||
if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
TownManager.getInstance().getTown(1).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(2).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(3).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(4).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(5).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(6).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(7).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(8).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(9).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(10).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(11).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(12).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(13).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(14).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(15).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(16).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(17).setParameter("noPeace", "true");
|
||||
TownManager.getInstance().getTown(19).setParameter("noPeace", "true");
|
||||
for (TownZone zone : ZoneData.getInstance().getAllZones(TownZone.class))
|
||||
{
|
||||
zone.setParameter("noPeace", "true");
|
||||
}
|
||||
}
|
||||
|
||||
// A Town will become War Zone
|
||||
if (!Config.TW_ALL_TOWNS && (Config.TW_TOWN_ID != 18) && (Config.TW_TOWN_ID != 21) && (Config.TW_TOWN_ID != 22))
|
||||
{
|
||||
TownManager.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "true");
|
||||
MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "true");
|
||||
}
|
||||
|
||||
final Collection<PlayerInstance> pls = World.getInstance().getAllPlayers();
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
TownZone town;
|
||||
for (PlayerInstance onlinePlayer : World.getInstance().getAllPlayers())
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
TownZone town;
|
||||
|
||||
for (PlayerInstance onlinePlayer : pls)
|
||||
if (onlinePlayer.isOnline())
|
||||
{
|
||||
if (onlinePlayer.isOnline())
|
||||
x = onlinePlayer.getX();
|
||||
y = onlinePlayer.getY();
|
||||
z = onlinePlayer.getZ();
|
||||
town = ZoneData.getInstance().getZone(x, y, z, TownZone.class);
|
||||
if (town != null)
|
||||
{
|
||||
x = onlinePlayer.getX();
|
||||
y = onlinePlayer.getY();
|
||||
z = onlinePlayer.getZ();
|
||||
|
||||
town = TownManager.getInstance().getTown(x, y, z);
|
||||
if (town != null)
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
{
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, false);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
else if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, false);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, false);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
else if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, false);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
onlinePlayer.setInTownWar(true);
|
||||
}
|
||||
onlinePlayer.setInTownWar(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +112,7 @@ public class AdminTownWar implements IAdminCommandHandler
|
||||
if (!Config.TW_ALL_TOWNS)
|
||||
{
|
||||
Announcements.getInstance().gameAnnounceToAll("Town War Event!");
|
||||
Announcements.getInstance().gameAnnounceToAll(TownManager.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set to war zone by " + activeChar.getName() + ".");
|
||||
Announcements.getInstance().gameAnnounceToAll(MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set to war zone by " + activeChar.getName() + ".");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,63 +121,58 @@ public class AdminTownWar implements IAdminCommandHandler
|
||||
// All Towns will become Peace Zones
|
||||
if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
TownManager.getInstance().getTown(1).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(2).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(3).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(4).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(5).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(6).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(7).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(8).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(9).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(10).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(11).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(12).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(13).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(14).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(15).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(16).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(17).setParameter("noPeace", "false");
|
||||
TownManager.getInstance().getTown(19).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(1).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(2).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(3).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(4).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(5).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(6).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(7).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(8).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(9).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(10).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(11).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(12).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(13).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(14).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(15).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(16).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(17).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(19).setParameter("noPeace", "false");
|
||||
}
|
||||
|
||||
// A Town will become Peace Zone
|
||||
if (!Config.TW_ALL_TOWNS && (Config.TW_TOWN_ID != 18) && (Config.TW_TOWN_ID != 21) && (Config.TW_TOWN_ID != 22))
|
||||
{
|
||||
TownManager.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "false");
|
||||
MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "false");
|
||||
}
|
||||
|
||||
final Collection<PlayerInstance> pls = World.getInstance().getAllPlayers();
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
TownZone town;
|
||||
for (PlayerInstance onlinePlayer : World.getInstance().getAllPlayers())
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
TownZone town;
|
||||
|
||||
for (PlayerInstance onlinePlayer : pls)
|
||||
if (onlinePlayer.isOnline())
|
||||
{
|
||||
if (onlinePlayer.isOnline())
|
||||
x = onlinePlayer.getX();
|
||||
y = onlinePlayer.getY();
|
||||
z = onlinePlayer.getZ();
|
||||
town = ZoneData.getInstance().getZone(x, y, z, TownZone.class);
|
||||
if (town != null)
|
||||
{
|
||||
x = onlinePlayer.getX();
|
||||
y = onlinePlayer.getY();
|
||||
z = onlinePlayer.getZ();
|
||||
|
||||
town = TownManager.getInstance().getTown(x, y, z);
|
||||
if (town != null)
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
{
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, true);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
else if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, true);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, true);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
else if (Config.TW_ALL_TOWNS)
|
||||
{
|
||||
onlinePlayer.setInsideZone(ZoneId.PVP, true);
|
||||
onlinePlayer.revalidateZone(true);
|
||||
}
|
||||
onlinePlayer.setInTownWar(false);
|
||||
}
|
||||
onlinePlayer.setInTownWar(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,7 +185,7 @@ public class AdminTownWar implements IAdminCommandHandler
|
||||
// Announce for one town
|
||||
if (!Config.TW_ALL_TOWNS)
|
||||
{
|
||||
Announcements.getInstance().gameAnnounceToAll(TownManager.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set back to normal by " + activeChar.getName() + ".");
|
||||
Announcements.getInstance().gameAnnounceToAll(MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set back to normal by " + activeChar.getName() + ".");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -18,91 +18,122 @@ package org.l2jmobius.gameserver.handler.admincommandhandlers;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.l2jmobius.gameserver.datatables.xml.AdminData;
|
||||
import org.l2jmobius.commons.util.StringUtil;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.util.BuilderUtil;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
|
||||
/**
|
||||
* @author luisantonioa
|
||||
*/
|
||||
public class AdminZone implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_zone_check",
|
||||
"admin_zone_reload"
|
||||
"admin_zone_visual"
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, PlayerInstance activeChar)
|
||||
{
|
||||
final StringTokenizer st = new StringTokenizer(command, " ");
|
||||
final String actualCommand = st.nextToken(); // Get actual command
|
||||
if (activeChar == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
StringTokenizer st = new StringTokenizer(command, " ");
|
||||
String actualCommand = st.nextToken(); // Get actual command
|
||||
|
||||
if (actualCommand.equalsIgnoreCase("admin_zone_check"))
|
||||
{
|
||||
if (activeChar.isInsideZone(ZoneId.PVP))
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is a PvP zone.");
|
||||
}
|
||||
else
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is NOT a PvP zone.");
|
||||
}
|
||||
|
||||
if (activeChar.isInsideZone(ZoneId.NO_LANDING))
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is a no landing zone.");
|
||||
}
|
||||
else
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is NOT a no landing zone.");
|
||||
}
|
||||
|
||||
if (activeChar.isInsideZone(ZoneId.NO_STORE))
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is a no-store zone.");
|
||||
}
|
||||
else
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "This is NOT a no-store zone.");
|
||||
}
|
||||
|
||||
BuilderUtil.sendSysMessage(activeChar, "MapRegion: x:" + MapRegionData.getInstance().getMapRegionX(activeChar.getX()) + " y:" + MapRegionData.getInstance().getMapRegionX(activeChar.getY()));
|
||||
|
||||
BuilderUtil.sendSysMessage(activeChar, "Closest Town: " + MapRegionData.getInstance().getClosestTownName(activeChar));
|
||||
|
||||
Location loc;
|
||||
|
||||
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CASTLE);
|
||||
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (Castle): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
|
||||
|
||||
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CLANHALL);
|
||||
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (ClanHall): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
|
||||
|
||||
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.SIEGEFLAG);
|
||||
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (SiegeFlag): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
|
||||
|
||||
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.TOWN);
|
||||
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (Town): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
|
||||
showHtml(activeChar);
|
||||
}
|
||||
else if (actualCommand.equalsIgnoreCase("admin_zone_reload"))
|
||||
else if (actualCommand.equalsIgnoreCase("admin_zone_visual"))
|
||||
{
|
||||
// TODO: ZONETODO ZoneManager.getInstance().reload();
|
||||
AdminData.broadcastMessageToGMs("Zones can not be reloaded in this version.");
|
||||
try
|
||||
{
|
||||
String next = st.nextToken();
|
||||
if (next.equalsIgnoreCase("all"))
|
||||
{
|
||||
for (ZoneType zone : ZoneData.getInstance().getZones(activeChar))
|
||||
{
|
||||
zone.visualizeZone(activeChar.getZ());
|
||||
}
|
||||
|
||||
showHtml(activeChar);
|
||||
}
|
||||
else if (next.equalsIgnoreCase("clear"))
|
||||
{
|
||||
ZoneData.getInstance().clearDebugItems();
|
||||
showHtml(activeChar);
|
||||
}
|
||||
else
|
||||
{
|
||||
int zoneId = Integer.parseInt(next);
|
||||
ZoneData.getInstance().getZoneById(zoneId).visualizeZone(activeChar.getZ());
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Invalid parameter for //zone_visual.");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void showHtml(PlayerInstance activeChar)
|
||||
{
|
||||
final int x = activeChar.getX();
|
||||
final int y = activeChar.getY();
|
||||
final int rx = ((x - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN;
|
||||
final int ry = ((y - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN;
|
||||
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(0);
|
||||
html.setFile("data/html/admin/zone.htm");
|
||||
|
||||
html.replace("%MAPREGION%", "[x:" + MapRegionData.getInstance().getMapRegionX(x) + " y:" + MapRegionData.getInstance().getMapRegionY(y) + "]");
|
||||
html.replace("%GEOREGION%", rx + "_" + ry);
|
||||
html.replace("%CLOSESTTOWN%", MapRegionData.getInstance().getClosestTownName(activeChar));
|
||||
html.replace("%CURRENTLOC%", x + ", " + y + ", " + activeChar.getZ());
|
||||
|
||||
html.replace("%PVP%", (activeChar.isInsideZone(ZoneId.PVP) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%PEACE%", (activeChar.isInsideZone(ZoneId.PEACE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%SIEGE%", (activeChar.isInsideZone(ZoneId.SIEGE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%MOTHERTREE%", (activeChar.isInsideZone(ZoneId.MOTHERTREE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%CLANHALL%", (activeChar.isInsideZone(ZoneId.CLAN_HALL) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%NOLANDING%", (activeChar.isInsideZone(ZoneId.NO_LANDING) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%WATER%", (activeChar.isInsideZone(ZoneId.WATER) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%JAIL%", (activeChar.isInsideZone(ZoneId.JAIL) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%MONSTERTRACK%", (activeChar.isInsideZone(ZoneId.MONSTER_TRACK) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%CASTLE%", (activeChar.isInsideZone(ZoneId.CASTLE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%SWAMP%", (activeChar.isInsideZone(ZoneId.SWAMP) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%NOSUMMONFRIEND%", (activeChar.isInsideZone(ZoneId.NO_SUMMON_FRIEND) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%NOSTORE%", (activeChar.isInsideZone(ZoneId.NO_STORE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%TOWN%", (activeChar.isInsideZone(ZoneId.TOWN) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%HQ%", (activeChar.isInsideZone(ZoneId.HQ) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%DANGERAREA%", (activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%BOSS%", (activeChar.isInsideZone(ZoneId.BOSS) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
html.replace("%NORESTART%", (activeChar.isInsideZone(ZoneId.NO_RESTART) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
|
||||
|
||||
final StringBuilder sb = new StringBuilder(100);
|
||||
for (ZoneType zone : World.getInstance().getRegion(x, y).getZones())
|
||||
{
|
||||
if (zone.isCharacterInZone(activeChar))
|
||||
{
|
||||
StringUtil.append(sb, zone.getId(), " ");
|
||||
}
|
||||
}
|
||||
html.replace("%ZLIST%", sb.toString());
|
||||
activeChar.sendPacket(html);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdminCommandList()
|
||||
{
|
||||
return ADMIN_COMMANDS;
|
||||
}
|
||||
}
|
||||
}
|
@@ -165,7 +165,7 @@ public class SiegeFlag implements ISkillHandler
|
||||
{
|
||||
message = "You have already placed the maximum number of flags possible.";
|
||||
}
|
||||
else if (player.isInsideZone(ZoneId.NO_HQ))
|
||||
else if (!player.isInsideZone(ZoneId.HQ))
|
||||
{
|
||||
message = "You cannot place flag here.";
|
||||
}
|
||||
@@ -210,7 +210,7 @@ public class SiegeFlag implements ISkillHandler
|
||||
{
|
||||
message = "You have already placed the maximum number of flags possible.";
|
||||
}
|
||||
else if (player.isInsideZone(ZoneId.NO_HQ))
|
||||
else if (!player.isInsideZone(ZoneId.HQ))
|
||||
{
|
||||
message = "You cannot place flag here.";
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ public class Escape implements IUserCommandHandler
|
||||
@Override
|
||||
public boolean useUserCommand(int id, PlayerInstance player)
|
||||
{
|
||||
final int unstuckTimer = player.getAccessLevel().isGm() ? 1000 : Config.UNSTUCK_INTERVAL * 1000;
|
||||
final int unstuckTimer = player.isGM() ? 1000 : Config.UNSTUCK_INTERVAL * 1000;
|
||||
|
||||
// Check to see if the current player is in Festival.
|
||||
if (player.isFestivalParticipant())
|
||||
|
@@ -36,11 +36,6 @@ public class CastleManager
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(CastleManager.class.getName());
|
||||
|
||||
public static final CastleManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static final List<Castle> _castles = new CopyOnWriteArrayList<>();
|
||||
|
||||
private static final int[] _castleCirclets =
|
||||
@@ -62,25 +57,23 @@ public class CastleManager
|
||||
load();
|
||||
}
|
||||
|
||||
public int findNearestCastlesIndex(WorldObject obj)
|
||||
public int findNearestCastleIndex(WorldObject obj)
|
||||
{
|
||||
int index = getCastleIndex(obj);
|
||||
if (index < 0)
|
||||
{
|
||||
double closestDistance = 99999999;
|
||||
double closestDistance = Double.MAX_VALUE;
|
||||
double distance;
|
||||
Castle castle;
|
||||
for (int i = 0; i < getCastles().size(); i++)
|
||||
{
|
||||
castle = getCastles().get(i);
|
||||
|
||||
if (castle == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
distance = castle.getDistance(obj);
|
||||
|
||||
if (closestDistance > distance)
|
||||
{
|
||||
closestDistance = distance;
|
||||
@@ -91,6 +84,28 @@ public class CastleManager
|
||||
return index;
|
||||
}
|
||||
|
||||
public Castle findNearestCastle(int x, int y)
|
||||
{
|
||||
double closestDistance = Double.MAX_VALUE;
|
||||
double distance;
|
||||
Castle result = null;
|
||||
for (Castle castle : _castles)
|
||||
{
|
||||
if (castle == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
distance = castle.getZone().getDistanceToZone(x, y);
|
||||
if (closestDistance > distance)
|
||||
{
|
||||
closestDistance = distance;
|
||||
result = castle;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private final void load()
|
||||
{
|
||||
LOGGER.info("Initializing CastleManager");
|
||||
@@ -354,6 +369,11 @@ public class CastleManager
|
||||
}
|
||||
}
|
||||
|
||||
public static final CastleManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final CastleManager INSTANCE = new CastleManager();
|
||||
|
@@ -1,323 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.entity.siege.Castle;
|
||||
import org.l2jmobius.gameserver.model.zone.type.TownZone;
|
||||
|
||||
public class TownManager
|
||||
{
|
||||
private List<TownZone> _towns;
|
||||
|
||||
private TownManager()
|
||||
{
|
||||
}
|
||||
|
||||
public void addTown(TownZone arena)
|
||||
{
|
||||
if (_towns == null)
|
||||
{
|
||||
_towns = new ArrayList<>();
|
||||
}
|
||||
|
||||
_towns.add(arena);
|
||||
}
|
||||
|
||||
public TownZone getClosestTown(WorldObject activeObject)
|
||||
{
|
||||
switch (MapRegionData.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
return getTown(2); // TI
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
return getTown(3); // Elven
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
return getTown(1); // DE
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
return getTown(4); // Orc
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
return getTown(6); // Dwarven
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
return getTown(7); // Gludio
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
return getTown(5); // Gludin
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
return getTown(8); // Dion
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
return getTown(9); // Giran
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
return getTown(10); // Oren
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
return getTown(12); // Aden
|
||||
}
|
||||
case 11:
|
||||
{
|
||||
return getTown(11); // HV
|
||||
}
|
||||
case 12:
|
||||
{
|
||||
return getTown(9); // Giran Harbour
|
||||
}
|
||||
case 13:
|
||||
{
|
||||
return getTown(15); // Heine
|
||||
}
|
||||
case 14:
|
||||
{
|
||||
return getTown(14); // Rune
|
||||
}
|
||||
case 15:
|
||||
{
|
||||
return getTown(13); // Goddard
|
||||
}
|
||||
case 16:
|
||||
{
|
||||
return getTown(17); // Schuttgart
|
||||
}
|
||||
case 17:
|
||||
{
|
||||
return getTown(16); // Floran
|
||||
}
|
||||
case 18:
|
||||
{
|
||||
return getTown(19); // Primeval Isle
|
||||
}
|
||||
}
|
||||
|
||||
return getTown(16); // Default to floran
|
||||
}
|
||||
|
||||
public static final int getClosestLocation(WorldObject activeObject)
|
||||
{
|
||||
switch (MapRegionData.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
return 1; // TI
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
return 4; // Elven
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
return 3; // DE
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
return 9; // Orc
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
return 9; // Dwarven
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
return 2; // Gludio
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
return 2; // Gludin
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
return 5; // Dion
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
return 6; // Giran
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
return 10; // Oren
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
return 13; // Aden
|
||||
}
|
||||
case 11:
|
||||
{
|
||||
return 11; // HV
|
||||
}
|
||||
case 12:
|
||||
{
|
||||
return 6; // Giran Harbour
|
||||
}
|
||||
case 13:
|
||||
{
|
||||
return 12; // Heine
|
||||
}
|
||||
case 14:
|
||||
{
|
||||
return 14; // Rune
|
||||
}
|
||||
case 15:
|
||||
{
|
||||
return 15; // Goddard
|
||||
}
|
||||
case 16:
|
||||
{
|
||||
return 9; // Schuttgart
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean townHasCastleInSiege(int townId)
|
||||
{
|
||||
final int[] castleidarray =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
0,
|
||||
5,
|
||||
7,
|
||||
8,
|
||||
6,
|
||||
0,
|
||||
9,
|
||||
0
|
||||
};
|
||||
final int castleIndex = castleidarray[townId];
|
||||
|
||||
if (castleIndex > 0)
|
||||
{
|
||||
final Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
|
||||
if (castle != null)
|
||||
{
|
||||
return castle.getSiege().isInProgress();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean townHasCastleInSiege(int x, int y)
|
||||
{
|
||||
final int curtown = MapRegionData.getInstance().getMapRegion(x, y);
|
||||
final int[] castleidarray =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
8,
|
||||
7,
|
||||
9,
|
||||
0,
|
||||
0
|
||||
};
|
||||
// find an instance of the castle for this town.
|
||||
final int castleIndex = castleidarray[curtown];
|
||||
if (castleIndex > 0)
|
||||
{
|
||||
final Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
|
||||
if (castle != null)
|
||||
{
|
||||
return castle.getSiege().isInProgress();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public TownZone getTown(int townId)
|
||||
{
|
||||
for (TownZone temp : _towns)
|
||||
{
|
||||
if (temp.getTownId() == townId)
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the town at that position (if any)
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return
|
||||
*/
|
||||
public TownZone getTown(int x, int y, int z)
|
||||
{
|
||||
for (TownZone temp : _towns)
|
||||
{
|
||||
if (temp.isInsideZone(x, y, z))
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static TownManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final TownManager INSTANCE = new TownManager();
|
||||
}
|
||||
}
|
@@ -17,6 +17,8 @@
|
||||
package org.l2jmobius.gameserver.model;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.logging.Logger;
|
||||
@@ -76,6 +78,15 @@ public class WorldRegion
|
||||
_zoneManager.unregisterZone(zone);
|
||||
}
|
||||
|
||||
public List<ZoneType> getZones()
|
||||
{
|
||||
if (_zoneManager == null)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return _zoneManager.getZones();
|
||||
}
|
||||
|
||||
public void revalidateZones(Creature creature)
|
||||
{
|
||||
if (_zoneManager == null)
|
||||
|
@@ -40,6 +40,7 @@ import org.l2jmobius.gameserver.datatables.HeroSkillTable;
|
||||
import org.l2jmobius.gameserver.datatables.SkillTable;
|
||||
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import org.l2jmobius.gameserver.handler.ISkillHandler;
|
||||
@@ -49,7 +50,6 @@ import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.DuelManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.ChanceSkillList;
|
||||
import org.l2jmobius.gameserver.model.Effect;
|
||||
import org.l2jmobius.gameserver.model.ForceBuff;
|
||||
@@ -663,14 +663,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
{
|
||||
if (Config.TW_DISABLE_GK)
|
||||
{
|
||||
int x1;
|
||||
int y1;
|
||||
int z1;
|
||||
x1 = getX();
|
||||
y1 = getY();
|
||||
z1 = getZ();
|
||||
TownZone town;
|
||||
town = TownManager.getInstance().getTown(x1, y1, z1);
|
||||
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
|
||||
if ((town != null) && _inTownWar)
|
||||
{
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
@@ -6513,7 +6506,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
int bossId = -1;
|
||||
NpcTemplate bossTemplate = null;
|
||||
final BossZone bossZone = GrandBossManager.getInstance().getZone(this);
|
||||
|
||||
if (bossZone != null)
|
||||
{
|
||||
bossId = bossZone.getBossId();
|
||||
@@ -8301,7 +8293,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
{
|
||||
// Set some values inside target's instance for later use
|
||||
final Creature creature = (Creature) target;
|
||||
|
||||
if ((skill.getEffectType() == SkillType.BUFF) && creature.isBlockBuff())
|
||||
{
|
||||
continue;
|
||||
@@ -8310,7 +8301,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
if (target instanceof Creature)
|
||||
{
|
||||
final Creature targ = (Creature) target;
|
||||
|
||||
if (ChanceSkillList.canTriggerByCast(this, targ, skill))
|
||||
{
|
||||
// Maybe launch chance skills on us
|
||||
@@ -8345,7 +8335,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
|
||||
int bossId = -1;
|
||||
NpcTemplate bossTemplate = null;
|
||||
final BossZone bossZone = GrandBossManager.getInstance().getZone(this);
|
||||
|
||||
if (bossZone != null)
|
||||
{
|
||||
bossId = bossZone.getBossId();
|
||||
|
@@ -534,8 +534,7 @@ public class DoorInstance extends Creature
|
||||
// Send a Server->Client packet MyTargetSelected to the PlayerInstance player
|
||||
player.sendPacket(new MyTargetSelected(getObjectId(), 0));
|
||||
|
||||
final DoorStatusUpdate su = new DoorStatusUpdate(this);
|
||||
player.sendPacket(su);
|
||||
player.sendPacket(new DoorStatusUpdate(this));
|
||||
|
||||
// Send a Server->Client packet ValidateLocation to correct the NpcInstance position and heading on the client
|
||||
player.sendPacket(new ValidateLocation(this));
|
||||
@@ -580,31 +579,25 @@ public class DoorInstance extends Creature
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getAccessLevel().isGm())
|
||||
if (player.isGM())
|
||||
{
|
||||
player.setTarget(this);
|
||||
player.sendPacket(new MyTargetSelected(getObjectId(), player.getLevel()));
|
||||
|
||||
if (isAutoAttackable(player))
|
||||
{
|
||||
final DoorStatusUpdate su = new DoorStatusUpdate(this);
|
||||
player.sendPacket(su);
|
||||
player.sendPacket(new DoorStatusUpdate(this));
|
||||
}
|
||||
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
|
||||
final StringBuilder html1 = new StringBuilder("<html><body><table border=0>");
|
||||
html1.append("<tr><td><font color=\"LEVEL\">Door Information</font><br></td></tr>");
|
||||
html1.append("<tr><td>Current HP " + getCurrentHp() + "</td></tr>");
|
||||
html1.append("<tr><td>Max HP " + getMaxHp() + "</td></tr>");
|
||||
|
||||
html1.append("<tr><td>Object ID: " + getObjectId() + "</td></tr>");
|
||||
html1.append("<tr><td>Door ID: " + _doorId + "</td></tr>");
|
||||
html1.append("<tr><td><br></td></tr>");
|
||||
|
||||
html1.append("<tr><td>Class: " + getClass().getSimpleName() + "</td></tr>");
|
||||
html1.append("<tr><td><br></td></tr>");
|
||||
html1.append("</table>");
|
||||
|
||||
html1.append("<table><tr>");
|
||||
html1.append("<td><button value=\"Open\" action=\"bypass -h admin_open " + _doorId + "\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");
|
||||
html1.append("<td><button value=\"Close\" action=\"bypass -h admin_close " + _doorId + "\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");
|
||||
@@ -623,8 +616,7 @@ public class DoorInstance extends Creature
|
||||
|
||||
if (isAutoAttackable(player))
|
||||
{
|
||||
final DoorStatusUpdate su = new DoorStatusUpdate(this);
|
||||
player.sendPacket(su);
|
||||
player.sendPacket(new DoorStatusUpdate(this));
|
||||
}
|
||||
|
||||
final NpcHtmlMessage reply = new NpcHtmlMessage(5);
|
||||
@@ -643,14 +635,12 @@ public class DoorInstance extends Creature
|
||||
public void broadcastStatusUpdate()
|
||||
{
|
||||
final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values();
|
||||
|
||||
if ((knownPlayers == null) || knownPlayers.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final DoorStatusUpdate su = new DoorStatusUpdate(this);
|
||||
|
||||
for (PlayerInstance player : knownPlayers)
|
||||
{
|
||||
player.sendPacket(su);
|
||||
|
@@ -293,7 +293,7 @@ public class MerchantInstance extends FolkInstance
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getAccessLevel().isGm())
|
||||
if (player.isGM())
|
||||
{
|
||||
player.setTarget(this);
|
||||
|
||||
|
@@ -31,13 +31,13 @@ import org.l2jmobius.gameserver.datatables.SkillTable;
|
||||
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
|
||||
import org.l2jmobius.gameserver.datatables.sql.HelperBuffTable;
|
||||
import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.idfactory.IdFactory;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.CustomNpcInstanceManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.DropCategory;
|
||||
import org.l2jmobius.gameserver.model.DropData;
|
||||
import org.l2jmobius.gameserver.model.Skill;
|
||||
@@ -829,7 +829,7 @@ public class NpcInstance extends Creature
|
||||
final Weapon currentWeapon = player.getActiveWeaponItem();
|
||||
|
||||
// Check if the PlayerInstance is a GM
|
||||
if (player.getAccessLevel().isGm())
|
||||
if (player.isGM())
|
||||
{
|
||||
// Set the target of the PlayerInstance player
|
||||
player.setTarget(this);
|
||||
@@ -1135,8 +1135,7 @@ public class NpcInstance extends Creature
|
||||
// Get castle this NPC belongs to (excluding Attackable)
|
||||
if (_castleIndex < 0)
|
||||
{
|
||||
final TownZone town = TownManager.getInstance().getTown(getX(), getY(), getZ());
|
||||
|
||||
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
|
||||
if (town != null)
|
||||
{
|
||||
_castleIndex = CastleManager.getInstance().getCastleIndex(town.getTaxById());
|
||||
@@ -1144,7 +1143,7 @@ public class NpcInstance extends Creature
|
||||
|
||||
if (_castleIndex < 0)
|
||||
{
|
||||
_castleIndex = CastleManager.getInstance().findNearestCastlesIndex(this);
|
||||
_castleIndex = CastleManager.getInstance().findNearestCastleIndex(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -66,6 +66,7 @@ import org.l2jmobius.gameserver.datatables.xml.FishData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.RecipeData;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
@@ -86,7 +87,6 @@ import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.PlayerCountManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.AccessLevel;
|
||||
import org.l2jmobius.gameserver.model.BlockList;
|
||||
import org.l2jmobius.gameserver.model.Effect;
|
||||
@@ -6090,14 +6090,7 @@ public class PlayerInstance extends Playable
|
||||
{
|
||||
if (Config.TW_RESS_ON_DIE)
|
||||
{
|
||||
int x1;
|
||||
int y1;
|
||||
int z1;
|
||||
x1 = getX();
|
||||
y1 = getY();
|
||||
z1 = getZ();
|
||||
TownZone town;
|
||||
town = TownManager.getInstance().getTown(x1, y1, z1);
|
||||
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
|
||||
if ((town != null) && isinTownWar())
|
||||
{
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
@@ -6769,14 +6762,7 @@ public class PlayerInstance extends Playable
|
||||
*/
|
||||
public void increasePvpKills()
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
x = getX();
|
||||
y = getY();
|
||||
z = getZ();
|
||||
TownZone town;
|
||||
town = TownManager.getInstance().getTown(x, y, z);
|
||||
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
|
||||
if ((town != null) && isinTownWar())
|
||||
{
|
||||
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
|
||||
@@ -7117,18 +7103,9 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
// Add karma to attacker and increase its PK counter
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
x = getX();
|
||||
y = getY();
|
||||
z = getZ();
|
||||
|
||||
// get local town
|
||||
final TownZone town = TownManager.getInstance().getTown(x, y, z);
|
||||
|
||||
setPkKills(getPkKills() + 1);
|
||||
|
||||
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
|
||||
if ((town == null) || (isinTownWar() && Config.TW_ALLOW_KARMA))
|
||||
{
|
||||
setKarma(getKarma() + newKarma);
|
||||
|
@@ -20,14 +20,15 @@ import java.util.StringTokenizer;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.datatables.sql.TeleportLocationTable;
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.model.TeleportLocation;
|
||||
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
|
||||
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.zone.type.BossZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.TownZone;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
@@ -217,7 +218,7 @@ public class TeleporterInstance extends FolkInstance
|
||||
player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
|
||||
return;
|
||||
}
|
||||
else if (!SiegeManager.getInstance().isTeleportToSiegeTownAllowed() && TownManager.getInstance().townHasCastleInSiege(list.getX(), list.getY()) && !player.isNoble())
|
||||
else if (!SiegeManager.getInstance().isTeleportToSiegeTownAllowed() && (ZoneData.getInstance().getZone(list.getX(), list.getY(), list.getZ(), TownZone.class) != null) && CastleManager.getInstance().findNearestCastle(list.getX(), list.getY()).getSiege().isInProgress() && !player.isNoble())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
|
||||
return;
|
||||
|
@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.partymatching;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExManagePartyRoomMember;
|
||||
@@ -44,7 +44,7 @@ public class PartyMatchRoom
|
||||
_id = id;
|
||||
_title = title;
|
||||
_loot = loot;
|
||||
_location = TownManager.getClosestLocation(owner);
|
||||
_location = MapRegionData.getInstance().getClosestLocation(owner.getX(), owner.getY());
|
||||
_minlvl = minlvl;
|
||||
_maxlvl = maxlvl;
|
||||
_maxmem = maxmem;
|
||||
|
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
|
||||
/**
|
||||
* Abstract zone with spawn locations.<br>
|
||||
* It inherits regular ZoneType behavior, with the possible addition of 2 Lists holding Locations.
|
||||
*/
|
||||
public abstract class SpawnZone extends ZoneType
|
||||
{
|
||||
private List<Location> _spawnLocs = null;
|
||||
private List<Location> _chaoticSpawnLocs = null;
|
||||
|
||||
public SpawnZone(int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
public final void addSpawn(int x, int y, int z)
|
||||
{
|
||||
if (_spawnLocs == null)
|
||||
{
|
||||
_spawnLocs = new ArrayList<>();
|
||||
}
|
||||
|
||||
_spawnLocs.add(new Location(x, y, z));
|
||||
}
|
||||
|
||||
public final void addChaoticSpawn(int x, int y, int z)
|
||||
{
|
||||
if (_chaoticSpawnLocs == null)
|
||||
{
|
||||
_chaoticSpawnLocs = new ArrayList<>();
|
||||
}
|
||||
|
||||
_chaoticSpawnLocs.add(new Location(x, y, z));
|
||||
}
|
||||
|
||||
public final List<Location> getSpawns()
|
||||
{
|
||||
return _spawnLocs;
|
||||
}
|
||||
|
||||
public final Location getSpawnLoc()
|
||||
{
|
||||
return _spawnLocs.get(Rnd.get(_spawnLocs.size()));
|
||||
}
|
||||
|
||||
public final Location getChaoticSpawnLoc()
|
||||
{
|
||||
if (_chaoticSpawnLocs != null)
|
||||
{
|
||||
return _chaoticSpawnLocs.get(Rnd.get(_chaoticSpawnLocs.size()));
|
||||
}
|
||||
|
||||
return getSpawnLoc();
|
||||
}
|
||||
}
|
@@ -16,12 +16,20 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone;
|
||||
|
||||
import java.awt.geom.Line2D;
|
||||
|
||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||
import org.l2jmobius.gameserver.idfactory.IdFactory;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
|
||||
/**
|
||||
* Abstract base class for any zone form
|
||||
* @author durgus
|
||||
*/
|
||||
public abstract class ZoneForm
|
||||
{
|
||||
protected static final int STEP = 50;
|
||||
|
||||
public abstract boolean isInsideZone(int x, int y, int z);
|
||||
|
||||
public abstract boolean intersectsRectangle(int x1, int x2, int y1, int y2);
|
||||
@@ -32,11 +40,13 @@ public abstract class ZoneForm
|
||||
|
||||
public abstract int getHighZ(); // New fishing patch makes use of that to get the Z for the hook
|
||||
|
||||
public abstract void visualizeZone(int id, int z);
|
||||
|
||||
// landing coordinates.
|
||||
|
||||
protected boolean lineSegmentsIntersect(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2)
|
||||
{
|
||||
return java.awt.geom.Line2D.linesIntersect(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
|
||||
return Line2D.linesIntersect(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
|
||||
}
|
||||
|
||||
protected boolean lineIntersectsLine(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2)
|
||||
@@ -82,4 +92,13 @@ public abstract class ZoneForm
|
||||
{
|
||||
return b > a ? (c >= a) && (c <= b) : (c >= b) && (c <= a);
|
||||
}
|
||||
|
||||
protected static final void dropDebugItem(int id, int x, int y, int z)
|
||||
{
|
||||
final ItemInstance item = new ItemInstance(IdFactory.getInstance().getNextId(), 57);
|
||||
item.setCount(id);
|
||||
item.spawnMe(x, y, z + 5);
|
||||
|
||||
ZoneData.getInstance().addDebugItem(item);
|
||||
}
|
||||
}
|
||||
|
@@ -22,22 +22,26 @@ package org.l2jmobius.gameserver.model.zone;
|
||||
*/
|
||||
public enum ZoneId
|
||||
{
|
||||
PVP,
|
||||
PEACE,
|
||||
SIEGE,
|
||||
MOTHERTREE,
|
||||
BOSS,
|
||||
CASTLE,
|
||||
CLAN_HALL,
|
||||
UNUSED,
|
||||
NO_LANDING,
|
||||
WATER,
|
||||
DANGER_AREA,
|
||||
HQ,
|
||||
JAIL,
|
||||
MONSTER_TRACK,
|
||||
SWAMP,
|
||||
MOTHERTREE,
|
||||
NO_LANDING,
|
||||
NO_RESTART,
|
||||
NO_STORE,
|
||||
NO_SUMMON_FRIEND,
|
||||
OLYMPIAD,
|
||||
NO_HQ,
|
||||
DANGER_AREA,
|
||||
NO_STORE;
|
||||
PEACE,
|
||||
PVP,
|
||||
SCRIPT,
|
||||
SIEGE,
|
||||
TOWN,
|
||||
SWAMP,
|
||||
WATER;
|
||||
|
||||
public static int getZoneCount()
|
||||
{
|
||||
|
@@ -19,8 +19,6 @@ package org.l2jmobius.gameserver.model.zone;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
@@ -149,10 +147,6 @@ public abstract class ZoneType
|
||||
}
|
||||
}
|
||||
|
||||
public void setSpawnLocs(Node node1)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given character is affected by this zone
|
||||
* @param creature
|
||||
@@ -364,4 +358,9 @@ public abstract class ZoneType
|
||||
{
|
||||
return _characterList;
|
||||
}
|
||||
|
||||
public void visualizeZone(int z)
|
||||
{
|
||||
getZone().visualizeZone(_id, z);
|
||||
}
|
||||
}
|
||||
|
@@ -198,4 +198,21 @@ public class ZoneCuboid extends ZoneForm
|
||||
{
|
||||
return _z2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visualizeZone(int id, int z)
|
||||
{
|
||||
// x1->x2
|
||||
for (int x = _x1; x < _x2; x = x + STEP)
|
||||
{
|
||||
dropDebugItem(id, x, _y1, z);
|
||||
dropDebugItem(id, x, _y2, z);
|
||||
}
|
||||
// y1->y2
|
||||
for (int y = _y1; y < _y2; y = y + STEP)
|
||||
{
|
||||
dropDebugItem(id, _x1, y, z);
|
||||
dropDebugItem(id, _x2, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -130,4 +130,17 @@ public class ZoneCylinder extends ZoneForm
|
||||
{
|
||||
return _z2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visualizeZone(int id, int z)
|
||||
{
|
||||
int count = (int) ((2 * Math.PI * _rad) / STEP);
|
||||
double angle = (2 * Math.PI) / count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
int x = (int) (Math.cos(angle * i) * _rad);
|
||||
int y = (int) (Math.sin(angle * i) * _rad);
|
||||
dropDebugItem(id, _x + x, _y + y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -136,4 +136,27 @@ public class ZoneNPoly extends ZoneForm
|
||||
{
|
||||
return _z2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visualizeZone(int id, int z)
|
||||
{
|
||||
for (int i = 0; i < _x.length; i++)
|
||||
{
|
||||
int nextIndex = i + 1;
|
||||
// ending point to first one
|
||||
if (nextIndex == _x.length)
|
||||
{
|
||||
nextIndex = 0;
|
||||
}
|
||||
int vx = _x[nextIndex] - _x[i];
|
||||
int vy = _y[nextIndex] - _y[i];
|
||||
float lenght = (float) Math.sqrt((vx * vx) + (vy * vy));
|
||||
lenght /= STEP;
|
||||
for (int o = 1; o <= lenght; o++)
|
||||
{
|
||||
float k = o / lenght;
|
||||
dropDebugItem(id, (int) (_x[i] + (k * vx)), (int) (_y[i] + (k * vy)), z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,58 +17,28 @@
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.SpawnZone;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* An arena
|
||||
* @author durgus
|
||||
*/
|
||||
public class ArenaZone extends ZoneType
|
||||
public class ArenaZone extends SpawnZone
|
||||
{
|
||||
private final Location _spawnLoc = new Location(0, 0, 0);
|
||||
|
||||
public ArenaZone(int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParameter(String name, String value)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "spawnX":
|
||||
{
|
||||
_spawnLoc.setX(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnY":
|
||||
{
|
||||
_spawnLoc.setY(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnZ":
|
||||
{
|
||||
_spawnLoc.setZ(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
super.setParameter(name, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, true);
|
||||
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
@@ -80,6 +50,7 @@ public class ArenaZone extends ZoneType
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, false);
|
||||
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
@@ -126,9 +97,4 @@ public class ArenaZone extends ZoneType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Location getSpawnLoc()
|
||||
{
|
||||
return _spawnLoc;
|
||||
}
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
@@ -90,7 +91,14 @@ public class BossZone extends ZoneType
|
||||
*/
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
if (_enabled && (creature instanceof PlayerInstance))
|
||||
if (!_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
creature.setInsideZone(ZoneId.BOSS, true);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
final PlayerInstance player = (PlayerInstance) creature;
|
||||
|
||||
@@ -163,7 +171,6 @@ public class BossZone extends ZoneType
|
||||
* @param y
|
||||
* @param z
|
||||
*/
|
||||
|
||||
public void movePlayersTo(int x, int y, int z)
|
||||
{
|
||||
if (_characterList.isEmpty())
|
||||
@@ -187,7 +194,14 @@ public class BossZone extends ZoneType
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
if (_enabled && (creature instanceof PlayerInstance))
|
||||
if (!_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
creature.setInsideZone(ZoneId.BOSS, false);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
// Thread.dumpStack();
|
||||
final PlayerInstance player = (PlayerInstance) creature;
|
||||
|
@@ -19,25 +19,22 @@ package org.l2jmobius.gameserver.model.zone.type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.SiegeSummonInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.siege.Castle;
|
||||
import org.l2jmobius.gameserver.model.zone.SpawnZone;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* A castle zone
|
||||
* @author durgus
|
||||
*/
|
||||
public class CastleZone extends ZoneType
|
||||
public class CastleZone extends SpawnZone
|
||||
{
|
||||
private Castle _castle;
|
||||
private final Location _spawnLoc = new Location(0, 0, 0);
|
||||
|
||||
public CastleZone(int id)
|
||||
{
|
||||
@@ -57,21 +54,6 @@ public class CastleZone extends ZoneType
|
||||
_castle.setZone(this);
|
||||
break;
|
||||
}
|
||||
case "spawnX":
|
||||
{
|
||||
_spawnLoc.setX(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnY":
|
||||
{
|
||||
_spawnLoc.setY(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnZ":
|
||||
{
|
||||
_spawnLoc.setZ(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
super.setParameter(name, value);
|
||||
@@ -83,6 +65,8 @@ public class CastleZone extends ZoneType
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.CASTLE, true);
|
||||
|
||||
if (_castle.getSiege().isInProgress())
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, true);
|
||||
@@ -98,6 +82,8 @@ public class CastleZone extends ZoneType
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.CASTLE, false);
|
||||
|
||||
if (_castle.getSiege().isInProgress())
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, false);
|
||||
@@ -189,7 +175,7 @@ public class CastleZone extends ZoneType
|
||||
continue;
|
||||
}
|
||||
|
||||
((PlayerInstance) temp).teleToLocation(TeleportWhereType.TOWN);
|
||||
((PlayerInstance) temp).teleToLocation(getChaoticSpawnLoc(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,11 +213,6 @@ public class CastleZone extends ZoneType
|
||||
return players;
|
||||
}
|
||||
|
||||
public Location getSpawn()
|
||||
{
|
||||
return _spawnLoc;
|
||||
}
|
||||
|
||||
public boolean isSiegeActive()
|
||||
{
|
||||
if (_castle != null)
|
||||
|
@@ -20,28 +20,24 @@ import java.util.Map;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.ClanHall;
|
||||
import org.l2jmobius.gameserver.model.zone.SpawnZone;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ClanHallDecoration;
|
||||
|
||||
/**
|
||||
* A clan hall zone
|
||||
* @author durgus
|
||||
*/
|
||||
public class ClanHallZone extends ZoneType
|
||||
public class ClanHallZone extends SpawnZone
|
||||
{
|
||||
private int _clanHallId;
|
||||
private final int[] _spawnLoc;
|
||||
|
||||
public ClanHallZone(int id)
|
||||
{
|
||||
super(id);
|
||||
|
||||
_spawnLoc = new int[3];
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -56,21 +52,6 @@ public class ClanHallZone extends ZoneType
|
||||
ClanHallManager.getInstance().getClanHallById(_clanHallId).setZone(this);
|
||||
break;
|
||||
}
|
||||
case "spawnX":
|
||||
{
|
||||
_spawnLoc[0] = Integer.parseInt(value);
|
||||
break;
|
||||
}
|
||||
case "spawnY":
|
||||
{
|
||||
_spawnLoc[1] = Integer.parseInt(value);
|
||||
break;
|
||||
}
|
||||
case "spawnZ":
|
||||
{
|
||||
_spawnLoc[2] = Integer.parseInt(value);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
super.setParameter(name, value);
|
||||
@@ -100,7 +81,7 @@ public class ClanHallZone extends ZoneType
|
||||
// Send a message
|
||||
if ((clanHall.getOwnerId() != 0) && (clanHall.getOwnerId() == ((PlayerInstance) creature).getClanId()))
|
||||
{
|
||||
((PlayerInstance) creature).sendMessage("You have entered your clan hall");
|
||||
((PlayerInstance) creature).sendMessage("You have entered your clan hall.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -116,7 +97,7 @@ public class ClanHallZone extends ZoneType
|
||||
// Send a message
|
||||
if ((((PlayerInstance) creature).getClanId() != 0) && (ClanHallManager.getInstance().getClanHallById(_clanHallId).getOwnerId() == ((PlayerInstance) creature).getClanId()))
|
||||
{
|
||||
((PlayerInstance) creature).sendMessage("You have left your clan hall");
|
||||
((PlayerInstance) creature).sendMessage("You have left your clan hall.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,13 +139,4 @@ public class ClanHallZone extends ZoneType
|
||||
{
|
||||
return _characterList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the clan hall's spawn
|
||||
* @return
|
||||
*/
|
||||
public Location getSpawn()
|
||||
{
|
||||
return new Location(_spawnLoc[0], _spawnLoc[1], _spawnLoc[2]);
|
||||
}
|
||||
}
|
||||
|
@@ -1,111 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
public class CustomZone extends ZoneType
|
||||
{
|
||||
public CustomZone(int id)
|
||||
{
|
||||
super(id);
|
||||
_isFlyingEnable = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDieInside(Creature l2character)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReviveInside(Creature l2character)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParameter(String name, String value)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "name":
|
||||
{
|
||||
_zoneName = value;
|
||||
break;
|
||||
}
|
||||
case "flying":
|
||||
{
|
||||
_isFlyingEnable = Boolean.parseBoolean(value);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
super.setParameter(name, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
final PlayerInstance player = (PlayerInstance) creature;
|
||||
if (!player.isGM() && player.isFlying() && !player.isInJail() && !_isFlyingEnable)
|
||||
{
|
||||
player.teleToLocation(TeleportWhereType.TOWN);
|
||||
}
|
||||
|
||||
if (_zoneName.equalsIgnoreCase("tradeoff"))
|
||||
{
|
||||
player.sendMessage("Trade restrictions are involved.");
|
||||
player.setTradeDisabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
final PlayerInstance player = (PlayerInstance) creature;
|
||||
|
||||
if (_zoneName.equalsIgnoreCase("tradeoff"))
|
||||
{
|
||||
player.sendMessage("Trade restrictions removed.");
|
||||
player.setTradeDisabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getZoneName()
|
||||
{
|
||||
return _zoneName;
|
||||
}
|
||||
|
||||
public boolean isFlyingEnable()
|
||||
{
|
||||
return _isFlyingEnable;
|
||||
}
|
||||
|
||||
private String _zoneName;
|
||||
private boolean _isFlyingEnable;
|
||||
}
|
@@ -21,23 +21,21 @@ import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.TeleportWhereType;
|
||||
import org.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.SiegeSummonInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.siege.Fort;
|
||||
import org.l2jmobius.gameserver.model.zone.SpawnZone;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* A castle zone
|
||||
* @author programmos
|
||||
*/
|
||||
public class FortZone extends ZoneType
|
||||
public class FortZone extends SpawnZone
|
||||
{
|
||||
private Fort _fort;
|
||||
private final Location _spawnLoc = new Location(0, 0, 0);
|
||||
|
||||
public FortZone(int id)
|
||||
{
|
||||
@@ -57,21 +55,6 @@ public class FortZone extends ZoneType
|
||||
_fort.setZone(this);
|
||||
break;
|
||||
}
|
||||
case "spawnX":
|
||||
{
|
||||
_spawnLoc.setX(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnY":
|
||||
{
|
||||
_spawnLoc.setY(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
case "spawnZ":
|
||||
{
|
||||
_spawnLoc.setZ(Integer.parseInt(value));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
super.setParameter(name, value);
|
||||
@@ -215,7 +198,6 @@ public class FortZone extends ZoneType
|
||||
public List<PlayerInstance> getAllPlayers()
|
||||
{
|
||||
final List<PlayerInstance> players = new ArrayList<>();
|
||||
|
||||
for (Creature temp : _characterList.values())
|
||||
{
|
||||
if (temp instanceof PlayerInstance)
|
||||
@@ -223,16 +205,6 @@ public class FortZone extends ZoneType
|
||||
players.add((PlayerInstance) temp);
|
||||
}
|
||||
}
|
||||
|
||||
return players;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the forts defender spawn
|
||||
* @return
|
||||
*/
|
||||
public Location getSpawn()
|
||||
{
|
||||
return _spawnLoc;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* The only zone where 'Build Headquarters' is allowed.
|
||||
* @author Tryskell, reverted version of Gnat's NoHqZone
|
||||
*/
|
||||
public class HqZone extends ZoneType
|
||||
{
|
||||
public HqZone(final int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(final Creature character)
|
||||
{
|
||||
if (character instanceof PlayerInstance)
|
||||
{
|
||||
character.setInsideZone(ZoneId.HQ, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(final Creature character)
|
||||
{
|
||||
if (character instanceof PlayerInstance)
|
||||
{
|
||||
character.setInsideZone(ZoneId.HQ, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDieInside(final Creature character)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReviveInside(final Creature character)
|
||||
{
|
||||
}
|
||||
}
|
@@ -40,7 +40,6 @@ public class MotherTreeZone extends ZoneType
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
final PlayerInstance player = (PlayerInstance) creature;
|
||||
|
||||
if (player.isInParty())
|
||||
{
|
||||
for (PlayerInstance member : player.getParty().getPartyMembers())
|
||||
|
@@ -1,62 +1,62 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* Zone where 'Build Headquarters' is not allowed.
|
||||
* @author Gnat
|
||||
*/
|
||||
public class NoHqZone extends ZoneType
|
||||
{
|
||||
public NoHqZone(int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.NO_HQ, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
{
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.NO_HQ, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDieInside(Creature creature)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReviveInside(Creature creature)
|
||||
{
|
||||
}
|
||||
}
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* A simple no restart zone
|
||||
* @author GKR
|
||||
*/
|
||||
public class NoRestartZone extends ZoneType
|
||||
{
|
||||
public NoRestartZone(final int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature character)
|
||||
{
|
||||
if (character instanceof PlayerInstance)
|
||||
{
|
||||
character.setInsideZone(ZoneId.NO_RESTART, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(Creature character)
|
||||
{
|
||||
if (character instanceof PlayerInstance)
|
||||
{
|
||||
character.setInsideZone(ZoneId.NO_RESTART, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDieInside(Creature character)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReviveInside(Creature character)
|
||||
{
|
||||
}
|
||||
}
|
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* A simple no summon zone
|
||||
* @author JIV
|
||||
*/
|
||||
public class NoSummonFriendZone extends ZoneType
|
||||
{
|
||||
|
||||
public NoSummonFriendZone(int id)
|
||||
{
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature character)
|
||||
{
|
||||
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(Creature character)
|
||||
{
|
||||
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDieInside(Creature character)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReviveInside(Creature character)
|
||||
{
|
||||
}
|
||||
}
|
@@ -53,6 +53,8 @@ public class OlympiadStadiumZone extends ZoneType
|
||||
public void onEnter(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, true);
|
||||
creature.setInsideZone(ZoneId.NO_RESTART, true);
|
||||
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
@@ -71,6 +73,8 @@ public class OlympiadStadiumZone extends ZoneType
|
||||
public void onExit(Creature creature)
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PVP, false);
|
||||
creature.setInsideZone(ZoneId.NO_RESTART, false);
|
||||
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
|
||||
|
||||
if (creature instanceof PlayerInstance)
|
||||
{
|
||||
|
@@ -17,6 +17,7 @@
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
@@ -30,13 +31,15 @@ public class ScriptZone extends ZoneType
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
protected void onEnter(Creature character)
|
||||
{
|
||||
character.setInsideZone(ZoneId.SCRIPT, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExit(Creature creature)
|
||||
protected void onExit(Creature character)
|
||||
{
|
||||
character.setInsideZone(ZoneId.SCRIPT, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -16,38 +16,29 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.zone.type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.zone.SpawnZone;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* A Town zone
|
||||
* @author durgus
|
||||
*/
|
||||
public class TownZone extends ZoneType
|
||||
public class TownZone extends SpawnZone
|
||||
{
|
||||
private String _townName;
|
||||
private int _townId;
|
||||
private int _redirectTownId;
|
||||
private int _taxById;
|
||||
private boolean _noPeace;
|
||||
private final List<Location> _spawnLoc;
|
||||
|
||||
public TownZone(int id)
|
||||
{
|
||||
super(id);
|
||||
|
||||
_taxById = 0;
|
||||
_spawnLoc = new ArrayList<>();
|
||||
|
||||
// Default to Giran
|
||||
_redirectTownId = 9;
|
||||
@@ -85,12 +76,6 @@ public class TownZone extends ZoneType
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSpawnLocs(Node node)
|
||||
{
|
||||
_spawnLoc.add(new Location(Integer.parseInt(node.getAttributes().getNamedItem("X").getNodeValue()), Integer.parseInt(node.getAttributes().getNamedItem("Y").getNodeValue()), Integer.parseInt(node.getAttributes().getNamedItem("Z").getNodeValue())));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEnter(Creature creature)
|
||||
{
|
||||
@@ -106,6 +91,7 @@ public class TownZone extends ZoneType
|
||||
creature.setInsideZone(ZoneId.PEACE, true);
|
||||
}
|
||||
|
||||
creature.setInsideZone(ZoneId.TOWN, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,6 +101,8 @@ public class TownZone extends ZoneType
|
||||
{
|
||||
creature.setInsideZone(ZoneId.PEACE, false);
|
||||
}
|
||||
|
||||
creature.setInsideZone(ZoneId.TOWN, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -155,15 +143,6 @@ public class TownZone extends ZoneType
|
||||
return _redirectTownId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this zones spawn location
|
||||
* @return
|
||||
*/
|
||||
public Location getSpawnLoc()
|
||||
{
|
||||
return _spawnLoc.get(Rnd.get(_spawnLoc.size()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this town zones castle id
|
||||
* @return
|
||||
|
@@ -2096,10 +2096,23 @@ public enum SystemMessageId
|
||||
PLAYING_FOR_LONG_TIME(764),
|
||||
|
||||
/**
|
||||
* ID: 769 Message: A hacking tool has been discovered. Please try again after closing unnecessary programs.
|
||||
* ID: 769<br>
|
||||
* Message: A hacking tool has been discovered. Please try again after closing unnecessary programs.
|
||||
*/
|
||||
HACKING_TOOL(769),
|
||||
|
||||
/**
|
||||
* ID: 778<br>
|
||||
* Message: You may not log out from this location.
|
||||
*/
|
||||
NO_LOGOUT_HERE(778),
|
||||
|
||||
/**
|
||||
* ID: 779<br>
|
||||
* Message: You may not restart in this location.
|
||||
*/
|
||||
NO_RESTART_HERE(779),
|
||||
|
||||
/**
|
||||
* ID: 780<br>
|
||||
* Message: Observation is only possible during a siege.
|
||||
|
@@ -50,7 +50,6 @@ public class Action extends GameClientPacket
|
||||
{
|
||||
// Get the current PlayerInstance of the player
|
||||
final PlayerInstance player = getClient().getPlayer();
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
@@ -64,7 +63,6 @@ public class Action extends GameClientPacket
|
||||
}
|
||||
|
||||
final WorldObject obj;
|
||||
|
||||
if (player.getTargetId() == _objectId)
|
||||
{
|
||||
obj = player.getTarget();
|
||||
|
@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.entity.sevensigns.SevenSignsFestival;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -38,9 +39,8 @@ public class Logout extends GameClientPacket
|
||||
@Override
|
||||
protected void runImpl()
|
||||
{
|
||||
// Dont allow leaving if player is fighting
|
||||
// Do not allow leaving if player is fighting
|
||||
final PlayerInstance player = getClient().getPlayer();
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
@@ -53,7 +53,12 @@ public class Logout extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
player.getInventory().updateDatabase();
|
||||
if (player.isInsideZone(ZoneId.NO_RESTART))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NO_LOGOUT_HERE);
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
||||
if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player) && (!player.isGM() || !Config.GM_RESTART_FIGHTING))
|
||||
{
|
||||
@@ -62,7 +67,7 @@ public class Logout extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
// Dont allow leaving if player is in combat
|
||||
// Do not allow leaving if player is in combat
|
||||
if (player.isInCombat() && !player.isGM())
|
||||
{
|
||||
player.sendMessage("You cannot logout while in combat mode.");
|
||||
@@ -70,7 +75,7 @@ public class Logout extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
// Dont allow leaving if player is teleporting
|
||||
// Do not allow leaving if player is teleporting
|
||||
if (player.isTeleporting() && !player.isGM())
|
||||
{
|
||||
player.sendMessage("You cannot logout while teleporting.");
|
||||
@@ -107,6 +112,8 @@ public class Logout extends GameClientPacket
|
||||
}
|
||||
}
|
||||
|
||||
player.getInventory().updateDatabase();
|
||||
|
||||
if (player.isFlying())
|
||||
{
|
||||
player.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
|
||||
|
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
|
||||
@@ -82,8 +82,7 @@ public class RequestOustFromPartyRoom extends GameClientPacket
|
||||
PartyMatchWaitingList.getInstance().addPlayer(member);
|
||||
|
||||
// Send Room list
|
||||
final int loc = TownManager.getClosestLocation(member);
|
||||
member.sendPacket(new PartyMatchList(member, 0, loc, member.getLevel()));
|
||||
member.sendPacket(new PartyMatchList(member, 0, MapRegionData.getInstance().getClosestLocation(member.getX(), member.getY()), member.getLevel()));
|
||||
|
||||
// Clean player's LFP title
|
||||
member.broadcastUserInfo();
|
||||
|
@@ -69,14 +69,14 @@ public class RequestRecipeShopListSet extends GameClientPacket
|
||||
|
||||
if (player.isTradeDisabled())
|
||||
{
|
||||
player.sendMessage("Private manufacture is disabled here. Try in another place.");
|
||||
player.sendMessage("Private manufacture is disabled here. Try another place.");
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isInsideZone(ZoneId.NO_STORE))
|
||||
{
|
||||
player.sendMessage("Private manufacture is disabled here. Try in another place.");
|
||||
player.sendMessage("Private manufacture is disabled here. Try another place.");
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.Party;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.entity.sevensigns.SevenSignsFestival;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.GameClient.GameClientState;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
@@ -49,11 +50,8 @@ public class RequestRestart extends GameClientPacket
|
||||
protected void runImpl()
|
||||
{
|
||||
final PlayerInstance player = getClient().getPlayer();
|
||||
|
||||
// Check if player is == null
|
||||
if (player == null)
|
||||
{
|
||||
LOGGER.warning("[RequestRestart] activeChar null!?");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -64,6 +62,13 @@ public class RequestRestart extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isInsideZone(ZoneId.NO_RESTART))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NO_RESTART_HERE);
|
||||
sendPacket(RestartResponse.valueOf(false));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if player are changing class
|
||||
if (player.isLocked())
|
||||
{
|
||||
@@ -72,8 +77,6 @@ public class RequestRestart extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
player.getInventory().updateDatabase();
|
||||
|
||||
// Check if player is in private store
|
||||
if (player.getPrivateStoreType() != 0)
|
||||
{
|
||||
@@ -126,6 +129,8 @@ public class RequestRestart extends GameClientPacket
|
||||
return;
|
||||
}
|
||||
|
||||
player.getInventory().updateDatabase();
|
||||
|
||||
// Fix against exploit anti-target
|
||||
if (player.isCastingNow())
|
||||
{
|
||||
|
@@ -54,6 +54,40 @@ public class RequestRestartPoint extends GameClientPacket
|
||||
_requestedPointType = readD();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runImpl()
|
||||
{
|
||||
final PlayerInstance player = getClient().getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isFakeDeath())
|
||||
{
|
||||
player.stopFakeDeath(null);
|
||||
player.broadcastPacket(new Revive(player));
|
||||
return;
|
||||
}
|
||||
else if (!player.isAlikeDead())
|
||||
{
|
||||
LOGGER.warning("Living player [" + player.getName() + "] called RestartPointPacket! Ban this player!");
|
||||
return;
|
||||
}
|
||||
|
||||
final Castle castle = CastleManager.getInstance().getCastle(player.getX(), player.getY(), player.getZ());
|
||||
if ((castle != null) && castle.getSiege().isInProgress() && (player.getClan() != null) && castle.getSiege().checkIsAttacker(player.getClan()))
|
||||
{
|
||||
// Schedule respawn delay for attacker
|
||||
ThreadPool.schedule(new DeathTask(player), castle.getSiege().getAttackerRespawnDelay());
|
||||
player.sendMessage("You will be re-spawned in " + (castle.getSiege().getAttackerRespawnDelay() / 1000) + " seconds");
|
||||
return;
|
||||
}
|
||||
|
||||
// Run immediately (no need to schedule)
|
||||
new DeathTask(player).run();
|
||||
}
|
||||
|
||||
class DeathTask implements Runnable
|
||||
{
|
||||
PlayerInstance _player;
|
||||
@@ -71,6 +105,7 @@ public class RequestRestartPoint extends GameClientPacket
|
||||
_player.sendMessage("You cannot restart while participating in an event!");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Location loc = null;
|
||||
@@ -213,38 +248,4 @@ public class RequestRestartPoint extends GameClientPacket
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runImpl()
|
||||
{
|
||||
final PlayerInstance player = getClient().getPlayer();
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isFakeDeath())
|
||||
{
|
||||
player.stopFakeDeath(null);
|
||||
player.broadcastPacket(new Revive(player));
|
||||
return;
|
||||
}
|
||||
else if (!player.isAlikeDead())
|
||||
{
|
||||
LOGGER.warning("Living player [" + player.getName() + "] called RestartPointPacket! Ban this player!");
|
||||
return;
|
||||
}
|
||||
|
||||
final Castle castle = CastleManager.getInstance().getCastle(player.getX(), player.getY(), player.getZ());
|
||||
if ((castle != null) && castle.getSiege().isInProgress() && (player.getClan() != null) && castle.getSiege().checkIsAttacker(player.getClan()))
|
||||
{
|
||||
// Schedule respawn delay for attacker
|
||||
ThreadPool.schedule(new DeathTask(player), castle.getSiege().getAttackerRespawnDelay());
|
||||
player.sendMessage("You will be re-spawned in " + (castle.getSiege().getAttackerRespawnDelay() / 1000) + " seconds");
|
||||
return;
|
||||
}
|
||||
// run immediately (no need to schedule)
|
||||
new DeathTask(player).run();
|
||||
}
|
||||
}
|
@@ -99,7 +99,7 @@ public class SetPrivateStoreListBuy extends GameClientPacket
|
||||
if (player.isInsideZone(ZoneId.NO_STORE))
|
||||
{
|
||||
player.sendPacket(new PrivateStoreManageListBuy(player));
|
||||
player.sendMessage("Trade are disable here. Try in another place.");
|
||||
player.sendMessage("Trade is disable here. Try another place.");
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
@@ -99,7 +99,7 @@ public class SetPrivateStoreListSell extends GameClientPacket
|
||||
if (player.isInsideZone(ZoneId.NO_STORE))
|
||||
{
|
||||
player.sendPacket(new PrivateStoreManageListSell(player));
|
||||
player.sendMessage("Trade are disable here. Try in another place.");
|
||||
player.sendMessage("Trade is disable here. Try another place.");
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
|
||||
|
||||
@@ -46,7 +46,7 @@ public class ExManagePartyRoomMember extends GameServerPacket
|
||||
writeS(_player.getName());
|
||||
writeD(_player.getActiveClass());
|
||||
writeD(_player.getLevel());
|
||||
writeD(TownManager.getClosestLocation(_player));
|
||||
writeD(MapRegionData.getInstance().getClosestLocation(_player.getX(), _player.getY()));
|
||||
if (_room.getOwner().equals(_player))
|
||||
{
|
||||
writeD(1);
|
||||
|
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.TownManager;
|
||||
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
|
||||
|
||||
@@ -41,18 +41,18 @@ public class ExPartyRoomMember extends GameServerPacket
|
||||
writeH(0x0e);
|
||||
writeD(_mode);
|
||||
writeD(_room.getMembers());
|
||||
for (PlayerInstance _member : _room.getPartyMembers())
|
||||
for (PlayerInstance member : _room.getPartyMembers())
|
||||
{
|
||||
writeD(_member.getObjectId());
|
||||
writeS(_member.getName());
|
||||
writeD(_member.getActiveClass());
|
||||
writeD(_member.getLevel());
|
||||
writeD(TownManager.getClosestLocation(_member));
|
||||
if (_room.getOwner().equals(_member))
|
||||
writeD(member.getObjectId());
|
||||
writeS(member.getName());
|
||||
writeD(member.getActiveClass());
|
||||
writeD(member.getLevel());
|
||||
writeD(MapRegionData.getInstance().getClosestLocation(member.getX(), member.getY()));
|
||||
if (_room.getOwner().equals(member))
|
||||
{
|
||||
writeD(1);
|
||||
}
|
||||
else if ((_room.getOwner().isInParty() && _member.isInParty()) && (_room.getOwner().getParty().getPartyLeaderOID() == _member.getParty().getPartyLeaderOID()))
|
||||
else if ((_room.getOwner().isInParty() && member.isInParty()) && (_room.getOwner().getParty().getPartyLeaderOID() == member.getParty().getPartyLeaderOID()))
|
||||
{
|
||||
writeD(2);
|
||||
}
|
||||
|
@@ -758,8 +758,8 @@ public class GameStatusThread extends Thread
|
||||
}
|
||||
else if (type.equals("zone"))
|
||||
{
|
||||
_print.print("Reloading zone tables... ");
|
||||
ZoneData.getInstance().load();
|
||||
_print.print("Reloading zones... ");
|
||||
ZoneData.getInstance().reload();
|
||||
_print.println("done");
|
||||
}
|
||||
else if (type.equals("teleports"))
|
||||
|
Reference in New Issue
Block a user