Door data moved from CSV to XML.

This commit is contained in:
MobiusDevelopment
2020-01-25 11:48:18 +00:00
parent 3965ed7615
commit 0ef951835a
49 changed files with 1598 additions and 1755 deletions

View File

@@ -46,7 +46,6 @@ import org.l2jmobius.gameserver.datatables.NobleSkillTable;
import org.l2jmobius.gameserver.datatables.OfflineTradeTable;
import org.l2jmobius.gameserver.datatables.SchemeBufferTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.csv.ExtractableItemsData;
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
@@ -70,6 +69,7 @@ import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
import org.l2jmobius.gameserver.datatables.sql.TeleportLocationTable;
import org.l2jmobius.gameserver.datatables.xml.AdminData;
import org.l2jmobius.gameserver.datatables.xml.AugmentationData;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
import org.l2jmobius.gameserver.datatables.xml.FenceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
@@ -367,7 +367,7 @@ public class GameServer
BoatManager.getInstance();
Util.printSection("Doors");
DoorTable.getInstance().load();
DoorData.getInstance().load();
FenceData.getInstance();
Util.printSection("Four Sepulchers");
@@ -400,7 +400,7 @@ public class GameServer
try
{
final DoorTable doorTable = DoorTable.getInstance();
final DoorData doorTable = DoorData.getInstance();
// Opened by players like L2OFF
doorTable.getDoor(19160012).openMe();

View File

@@ -1,398 +1,330 @@
/*
* 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.datatables.csv;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
import org.l2jmobius.gameserver.model.entity.ClanHall;
public class DoorTable
{
private static final Logger LOGGER = Logger.getLogger(DoorTable.class.getName());
private final Map<Integer, DoorInstance> _doors = new HashMap<>();
private static DoorTable _instance;
public static DoorTable getInstance()
{
if (_instance == null)
{
_instance = new DoorTable();
}
return _instance;
}
public DoorTable()
{
_doors.clear();
// load();
}
public void load()
{
FileReader reader = null;
BufferedReader buff = null;
LineNumberReader lnr = null;
try
{
final File doorData = new File(Config.DATAPACK_ROOT, "data/csv/door.csv");
reader = new FileReader(doorData);
buff = new BufferedReader(reader);
lnr = new LineNumberReader(buff);
String line = null;
LOGGER.info("Searching clan halls doors:");
while ((line = lnr.readLine()) != null)
{
if ((line.trim().length() == 0) || line.startsWith("#"))
{
continue;
}
final DoorInstance door = parseList(line);
_doors.put(door.getDoorId(), door);
door.spawnMe(door.getX(), door.getY(), door.getZ());
final ClanHall clanhall = ClanHallManager.getInstance().getNearbyClanHall(door.getX(), door.getY(), 500);
if (clanhall != null)
{
clanhall.getDoors().add(door);
door.setClanHall(clanhall);
}
}
LOGGER.info("DoorTable: Loaded " + _doors.size() + " Door Templates.");
}
catch (FileNotFoundException e)
{
_initialized = false;
LOGGER.warning("door.csv is missing in data csv folder");
}
catch (IOException e)
{
_initialized = false;
LOGGER.warning("Error while creating door table " + e);
}
finally
{
if (lnr != null)
{
try
{
lnr.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with DoorTable: " + e1.getMessage());
}
}
if (buff != null)
{
try
{
buff.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with DoorTable: " + e1.getMessage());
}
}
if (reader != null)
{
try
{
reader.close();
}
catch (Exception e1)
{
LOGGER.warning("Problem with DoorTable: " + e1.getMessage());
}
}
}
}
public static DoorInstance parseList(String line)
{
final StringTokenizer st = new StringTokenizer(line, ";");
final String name = st.nextToken();
final int id = Integer.parseInt(st.nextToken());
final int x = Integer.parseInt(st.nextToken());
final int y = Integer.parseInt(st.nextToken());
final int z = Integer.parseInt(st.nextToken());
final int rangeXMin = Integer.parseInt(st.nextToken());
final int rangeYMin = Integer.parseInt(st.nextToken());
final int rangeZMin = Integer.parseInt(st.nextToken());
final int rangeXMax = Integer.parseInt(st.nextToken());
final int rangeYMax = Integer.parseInt(st.nextToken());
final int rangeZMax = Integer.parseInt(st.nextToken());
final int hp = Integer.parseInt(st.nextToken());
final int pdef = Integer.parseInt(st.nextToken());
final int mdef = Integer.parseInt(st.nextToken());
boolean unlockable = false;
if (st.hasMoreTokens())
{
unlockable = Boolean.parseBoolean(st.nextToken());
}
boolean autoOpen = false;
if (st.hasMoreTokens())
{
autoOpen = Boolean.parseBoolean(st.nextToken());
}
if (rangeXMin > rangeXMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
if (rangeYMin > rangeYMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
if (rangeZMin > rangeZMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
int collisionRadius; // (max) radius for movement checks
if ((rangeXMax - rangeXMin) > (rangeYMax - rangeYMin))
{
collisionRadius = rangeYMax - rangeYMin;
}
else
{
collisionRadius = rangeXMax - rangeXMin;
}
final StatsSet npcDat = new StatsSet();
npcDat.set("npcId", id);
npcDat.set("level", 0);
npcDat.set("jClass", "door");
npcDat.set("baseSTR", 0);
npcDat.set("baseCON", 0);
npcDat.set("baseDEX", 0);
npcDat.set("baseINT", 0);
npcDat.set("baseWIT", 0);
npcDat.set("baseMEN", 0);
npcDat.set("baseShldDef", 0);
npcDat.set("baseShldRate", 0);
npcDat.set("baseAccCombat", 38);
npcDat.set("baseEvasRate", 38);
npcDat.set("baseCritRate", 38);
// npcDat.set("name", "");
npcDat.set("collision_radius", collisionRadius);
npcDat.set("collision_height", rangeZMax - rangeZMin);
npcDat.set("sex", "male");
npcDat.set("type", "");
npcDat.set("baseAtkRange", 0);
npcDat.set("baseMpMax", 0);
npcDat.set("baseCpMax", 0);
npcDat.set("rewardExp", 0);
npcDat.set("rewardSp", 0);
npcDat.set("basePAtk", 0);
npcDat.set("baseMAtk", 0);
npcDat.set("basePAtkSpd", 0);
npcDat.set("aggroRange", 0);
npcDat.set("baseMAtkSpd", 0);
npcDat.set("rhand", 0);
npcDat.set("lhand", 0);
npcDat.set("armor", 0);
npcDat.set("baseWalkSpd", 0);
npcDat.set("baseRunSpd", 0);
npcDat.set("name", name);
npcDat.set("baseHpMax", hp);
npcDat.set("baseHpReg", 3.e-3f);
npcDat.set("baseMpReg", 3.e-3f);
npcDat.set("basePDef", pdef);
npcDat.set("baseMDef", mdef);
final CreatureTemplate template = new CreatureTemplate(npcDat);
final DoorInstance door = new DoorInstance(IdFactory.getInstance().getNextId(), template, id, name, unlockable);
door.setRange(rangeXMin, rangeYMin, rangeZMin, rangeXMax, rangeYMax, rangeZMax);
try
{
door.setMapRegion(MapRegionTable.getInstance().getMapRegion(x, y));
}
catch (Exception e)
{
LOGGER.warning("Error in door data, ID:" + id + " " + e);
}
door.setCurrentHpMp(door.getMaxHp(), door.getMaxMp());
door.setOpen(autoOpen);
door.setXYZInvisible(x, y, z);
return door;
}
public boolean isInitialized()
{
return _initialized;
}
private boolean _initialized = true;
public DoorInstance getDoor(Integer id)
{
return _doors.get(id);
}
public void putDoor(DoorInstance door)
{
_doors.put(door.getDoorId(), door);
}
public Collection<DoorInstance> getDoors()
{
return _doors.values();
}
/**
* Performs a check and sets up a scheduled task for those doors that require auto opening/closing.
*/
public void checkAutoOpen()
{
for (DoorInstance doorInst : _doors.values())
{
// Garden of Eva (every 7 minutes)
if (doorInst.getDoorName().startsWith("goe"))
{
doorInst.setAutoActionDelay(420000);
}
// Tower of Insolence (every 5 minutes)
else if (doorInst.getDoorName().startsWith("aden_tower"))
{
doorInst.setAutoActionDelay(300000);
}
// Cruma Tower (every 20 minutes)
else if (doorInst.getDoorName().startsWith("cruma"))
{
doorInst.setAutoActionDelay(1200000);
}
}
}
public boolean checkIfDoorsBetween(Location start, Location end)
{
return checkIfDoorsBetween(start.getX(), start.getY(), start.getZ(), end.getX(), end.getY(), end.getZ());
}
public boolean checkIfDoorsBetween(int x, int y, int z, int tx, int ty, int tz)
{
int region;
try
{
region = MapRegionTable.getInstance().getMapRegion(x, y);
}
catch (Exception e)
{
return false;
}
for (DoorInstance doorInst : _doors.values())
{
if (doorInst.getMapRegion() != region)
{
continue;
}
if (doorInst.getXMax() == 0)
{
continue;
}
// line segment goes through box
// heavy approximation disabling some shooting angles especially near 2-piece doors
// but most calculations should stop short
// phase 1, x
if (((x <= doorInst.getXMax()) && (tx >= doorInst.getXMin())) || ((tx <= doorInst.getXMax()) && (x >= doorInst.getXMin())))
{
// phase 2, y
if (((y <= doorInst.getYMax()) && (ty >= doorInst.getYMin())) || ((ty <= doorInst.getYMax()) && (y >= doorInst.getYMin())))
{
// phase 3, basically only z remains but now we calculate it with another formula (by rage)
// in some cases the direct line check (only) in the beginning isn't sufficient,
// when char z changes a lot along the path
if ((doorInst.getStatus().getCurrentHp() > 0) && !doorInst.isOpen())
{
final int px1 = doorInst.getXMin();
final int py1 = doorInst.getYMin();
final int pz1 = doorInst.getZMin();
final int px2 = doorInst.getXMax();
final int py2 = doorInst.getYMax();
final int pz2 = doorInst.getZMax();
final int l = tx - x;
final int m = ty - y;
final int n = tz - z;
final int dk = ((doorInst.getA() * l) + (doorInst.getB() * m) + (doorInst.getC() * n));
if (dk == 0)
{
continue; // Parallel
}
final float p = (float) ((doorInst.getA() * x) + (doorInst.getB() * y) + (doorInst.getC() * z) + doorInst.getD()) / dk;
final int fx = (int) (x - (l * p));
final int fy = (int) (y - (m * p));
final int fz = (int) (z - (n * p));
if (((Math.min(x, tx) <= fx) && (fx <= Math.max(x, tx))) && ((Math.min(y, ty) <= fy) && (fy <= Math.max(y, ty))) && ((Math.min(z, tz) <= fz) && (fz <= Math.max(z, tz))))
{
if ((((fx >= px1) && (fx <= px2)) || ((fx >= px2) && (fx <= px1))) && (((fy >= py1) && (fy <= py2)) || ((fy >= py2) && (fy <= py1))) && (((fz >= pz1) && (fz <= pz2)) || ((fz >= pz2) && (fz <= pz1))))
{
return true; // Door between
}
}
}
}
}
}
return false;
}
}
/*
* 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.datatables.xml;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate;
import org.l2jmobius.gameserver.model.entity.ClanHall;
/**
* @author Mobius
*/
public class DoorData implements IXmlReader
{
private static final Logger LOGGER = Logger.getLogger(DoorData.class.getName());
private static final Map<Integer, DoorInstance> DOORS = new HashMap<>();
@Override
public void load()
{
parseDatapackFile("data/Doors.xml");
LOGGER.info("DoorData: Loaded " + DOORS.size() + " doors.");
}
@Override
public void parseDocument(Document doc, File f)
{
try
{
final StatsSet set = new StatsSet();
final Node n = doc.getFirstChild();
for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling())
{
if (!"door".equalsIgnoreCase(node.getNodeName()))
{
continue;
}
final NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
final Node attr = attrs.item(i);
set.set(attr.getNodeName(), attr.getNodeValue());
}
final DoorInstance door = parseList(set);
DOORS.put(door.getDoorId(), door);
door.spawnMe(door.getX(), door.getY(), door.getZ());
final ClanHall clanhall = ClanHallManager.getInstance().getNearbyClanHall(door.getX(), door.getY(), 500);
if (clanhall != null)
{
clanhall.getDoors().add(door);
door.setClanHall(clanhall);
}
}
}
catch (Exception e)
{
LOGGER.warning("DoorData: Error while reading door data: " + e);
}
}
public static DoorInstance parseList(StatsSet set)
{
final String name = set.getString("name");
final int id = set.getInt("id");
final int x = set.getInt("x");
final int y = set.getInt("y");
final int z = set.getInt("z");
final int xMin = set.getInt("xMin");
final int yMin = set.getInt("yMin");
final int zMin = set.getInt("zMin");
final int xMax = set.getInt("xMax");
final int yMax = set.getInt("yMax");
final int zMax = set.getInt("zMax");
final int hp = set.getInt("hp");
final int pDef = set.getInt("pDef");
final int mDef = set.getInt("mDef");
final boolean unlockable = set.getBoolean("unlockable", false);
final boolean autoOpen = set.getBoolean("autoOpen", false);
if (xMin > xMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
if (yMin > yMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
if (zMin > zMax)
{
LOGGER.warning("Error in door data, ID:" + id);
}
int collisionRadius; // (max) radius for movement checks
if ((xMax - xMin) > (yMax - yMin))
{
collisionRadius = yMax - yMin;
}
else
{
collisionRadius = xMax - xMin;
}
final StatsSet npcDat = new StatsSet();
npcDat.set("npcId", id);
npcDat.set("level", 0);
npcDat.set("jClass", "door");
npcDat.set("baseSTR", 0);
npcDat.set("baseCON", 0);
npcDat.set("baseDEX", 0);
npcDat.set("baseINT", 0);
npcDat.set("baseWIT", 0);
npcDat.set("baseMEN", 0);
npcDat.set("baseShldDef", 0);
npcDat.set("baseShldRate", 0);
npcDat.set("baseAccCombat", 38);
npcDat.set("baseEvasRate", 38);
npcDat.set("baseCritRate", 38);
// npcDat.set("name", "");
npcDat.set("collision_radius", collisionRadius);
npcDat.set("collision_height", zMax - zMin);
npcDat.set("sex", "male");
npcDat.set("type", "");
npcDat.set("baseAtkRange", 0);
npcDat.set("baseMpMax", 0);
npcDat.set("baseCpMax", 0);
npcDat.set("rewardExp", 0);
npcDat.set("rewardSp", 0);
npcDat.set("basePAtk", 0);
npcDat.set("baseMAtk", 0);
npcDat.set("basePAtkSpd", 0);
npcDat.set("aggroRange", 0);
npcDat.set("baseMAtkSpd", 0);
npcDat.set("rhand", 0);
npcDat.set("lhand", 0);
npcDat.set("armor", 0);
npcDat.set("baseWalkSpd", 0);
npcDat.set("baseRunSpd", 0);
npcDat.set("name", name);
npcDat.set("baseHpMax", hp);
npcDat.set("baseHpReg", 3.e-3f);
npcDat.set("baseMpReg", 3.e-3f);
npcDat.set("basePDef", pDef);
npcDat.set("baseMDef", mDef);
final CreatureTemplate template = new CreatureTemplate(npcDat);
final DoorInstance door = new DoorInstance(IdFactory.getInstance().getNextId(), template, id, name, unlockable);
door.setRange(xMin, yMin, zMin, xMax, yMax, zMax);
try
{
door.setMapRegion(MapRegionTable.getInstance().getMapRegion(x, y));
}
catch (Exception e)
{
LOGGER.warning("Error in door data, ID:" + id + " " + e);
}
door.setCurrentHpMp(door.getMaxHp(), door.getMaxMp());
door.setOpen(autoOpen);
door.setXYZInvisible(x, y, z);
return door;
}
public DoorInstance getDoor(Integer id)
{
return DOORS.get(id);
}
public void putDoor(DoorInstance door)
{
DOORS.put(door.getDoorId(), door);
}
public Collection<DoorInstance> getDoors()
{
return DOORS.values();
}
/**
* Performs a check and sets up a scheduled task for those doors that require auto opening/closing.
*/
public void checkAutoOpen()
{
for (DoorInstance doorInst : DOORS.values())
{
// Garden of Eva (every 7 minutes)
if (doorInst.getDoorName().startsWith("goe"))
{
doorInst.setAutoActionDelay(420000);
}
// Tower of Insolence (every 5 minutes)
else if (doorInst.getDoorName().startsWith("aden_tower"))
{
doorInst.setAutoActionDelay(300000);
}
// Cruma Tower (every 20 minutes)
else if (doorInst.getDoorName().startsWith("cruma"))
{
doorInst.setAutoActionDelay(1200000);
}
}
}
public boolean checkIfDoorsBetween(Location start, Location end)
{
return checkIfDoorsBetween(start.getX(), start.getY(), start.getZ(), end.getX(), end.getY(), end.getZ());
}
public boolean checkIfDoorsBetween(int x, int y, int z, int tx, int ty, int tz)
{
int region;
try
{
region = MapRegionTable.getInstance().getMapRegion(x, y);
}
catch (Exception e)
{
return false;
}
for (DoorInstance doorInst : DOORS.values())
{
if (doorInst.getMapRegion() != region)
{
continue;
}
if (doorInst.getXMax() == 0)
{
continue;
}
// line segment goes through box
// heavy approximation disabling some shooting angles especially near 2-piece doors
// but most calculations should stop short
// phase 1, x
if (((x <= doorInst.getXMax()) && (tx >= doorInst.getXMin())) || ((tx <= doorInst.getXMax()) && (x >= doorInst.getXMin())))
{
// phase 2, y
if (((y <= doorInst.getYMax()) && (ty >= doorInst.getYMin())) || ((ty <= doorInst.getYMax()) && (y >= doorInst.getYMin())))
{
// phase 3, basically only z remains but now we calculate it with another formula (by rage)
// in some cases the direct line check (only) in the beginning isn't sufficient,
// when char z changes a lot along the path
if ((doorInst.getStatus().getCurrentHp() > 0) && !doorInst.isOpen())
{
final int px1 = doorInst.getXMin();
final int py1 = doorInst.getYMin();
final int pz1 = doorInst.getZMin();
final int px2 = doorInst.getXMax();
final int py2 = doorInst.getYMax();
final int pz2 = doorInst.getZMax();
final int l = tx - x;
final int m = ty - y;
final int n = tz - z;
final int dk = ((doorInst.getA() * l) + (doorInst.getB() * m) + (doorInst.getC() * n));
if (dk == 0)
{
continue; // Parallel
}
final float p = (float) ((doorInst.getA() * x) + (doorInst.getB() * y) + (doorInst.getC() * z) + doorInst.getD()) / dk;
final int fx = (int) (x - (l * p));
final int fy = (int) (y - (m * p));
final int fz = (int) (z - (n * p));
if (((Math.min(x, tx) <= fx) && (fx <= Math.max(x, tx))) && ((Math.min(y, ty) <= fy) && (fy <= Math.max(y, ty))) && ((Math.min(z, tz) <= fz) && (fz <= Math.max(z, tz))))
{
if ((((fx >= px1) && (fx <= px2)) || ((fx >= px2) && (fx <= px1))) && (((fy >= py1) && (fy <= py2)) || ((fy >= py2) && (fy <= py1))) && (((fz >= pz1) && (fz <= pz2)) || ((fz >= pz2) && (fz <= pz1))))
{
return true; // Door between
}
}
}
}
}
}
return false;
}
public static DoorData getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final DoorData INSTANCE = new DoorData();
}
}

View File

@@ -93,7 +93,7 @@ public class FenceData
}
}
LOGGER.info("Loaded " + _fences.size() + " Fences.");
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _fences.size() + " Fences.");
}
public int getLoadedElementsCount()

View File

@@ -52,7 +52,7 @@ public class FishData implements IXmlReader
@Override
public void parseDocument(Document doc, File f)
{
// StatsSet used to feed informations. Cleaned on every entry.
// StatsSet used to feed informations.
final StatsSet set = new StatsSet();
// First element is never read.

View File

@@ -25,7 +25,7 @@ import java.util.List;
import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.FenceData;
import org.l2jmobius.gameserver.geoengine.geodata.ABlock;
import org.l2jmobius.gameserver.geoengine.geodata.BlockComplex;
@@ -368,7 +368,7 @@ public class GeoEngine
final int ty = target.getY();
final int tz = target.getZ();
if (DoorTable.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
{
return false;
}
@@ -436,7 +436,7 @@ public class GeoEngine
final int ty = position.getY();
final int tz = position.getZ();
if (DoorTable.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
{
return false;
}
@@ -721,7 +721,7 @@ public class GeoEngine
public Location canMoveToTargetLoc(int ox, int oy, int oz, int tx, int ty, int tz, int instanceId)
{
// Mobius: Double check for doors before normal checkMove to avoid exploiting key movement.
if (DoorTable.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
if (DoorData.getInstance().checkIfDoorsBetween(ox, oy, oz, tx, ty, tz))
{
return new Location(ox, oy, oz);
}
@@ -785,7 +785,7 @@ public class GeoEngine
*/
protected final GeoLocation checkMove(int gox, int goy, int goz, int gtx, int gty, int gtz, int instanceId)
{
if (DoorTable.getInstance().checkIfDoorsBetween(gox, goy, goz, gtx, gty, gtz))
if (DoorData.getInstance().checkIfDoorsBetween(gox, goy, goz, gtx, gty, gtz))
{
return new GeoLocation(gox, goy, goz);
}

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.handler.admincommandhandlers;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.model.WorldObject;
@@ -55,7 +55,7 @@ public class AdminDoorControl implements IAdminCommandHandler
@Override
public boolean useAdminCommand(String command, PlayerInstance activeChar)
{
final DoorTable doorTable = DoorTable.getInstance();
final DoorData doorTable = DoorData.getInstance();
WorldObject target2 = null;

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.handler.itemhandlers;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Playable;
@@ -88,10 +88,10 @@ public class MOSKey implements IItemHandler
if ((itemId == 8056) && ((door.getDoorId() == 23150003) || (door.getDoorId() == 23150004)))
{
DoorTable.getInstance().getDoor(23150003).openMe();
DoorTable.getInstance().getDoor(23150004).openMe();
DoorTable.getInstance().getDoor(23150003).onOpen();
DoorTable.getInstance().getDoor(23150004).onOpen();
DoorData.getInstance().getDoor(23150003).openMe();
DoorData.getInstance().getDoor(23150004).openMe();
DoorData.getInstance().getDoor(23150003).onOpen();
DoorData.getInstance().getDoor(23150004).onOpen();
player.broadcastPacket(new SocialAction(player.getObjectId(), 3));
_lastOpen = System.currentTimeMillis();
}

View File

@@ -32,9 +32,9 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -1538,7 +1538,7 @@ public class FourSepulchersManager extends GrandBossManager
{
for (int doorId : _hallGateKeepers.values())
{
final DoorInstance door = DoorTable.getInstance().getDoor(doorId);
final DoorInstance door = DoorData.getInstance().getDoor(doorId);
try
{
if (door != null)

View File

@@ -25,7 +25,7 @@ import java.util.concurrent.Future;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.instancemanager.FourSepulchersManager;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
@@ -358,7 +358,7 @@ public class SepulcherNpcInstance extends NpcInstance
public void openNextDoor(int npcId)
{
final int doorId = FourSepulchersManager.getInstance().getHallGateKeepers().get(npcId).intValue();
DoorTable.getInstance().getDoor(doorId).openMe();
DoorData.getInstance().getDoor(doorId).openMe();
if (_closeTask != null)
{
_closeTask.cancel(true);
@@ -373,7 +373,7 @@ public class SepulcherNpcInstance extends NpcInstance
private class CloseNextDoor implements Runnable
{
final DoorTable _DoorTable = DoorTable.getInstance();
final DoorData _DoorTable = DoorData.getInstance();
private final int _DoorId;

View File

@@ -27,10 +27,11 @@ import java.util.logging.Logger;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.instancemanager.AuctionManager;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
@@ -53,7 +54,7 @@ public class ClanHall
public static final int FUNC_DECO_CURTAINS = 8;
final int _clanHallId;
private final List<DoorInstance> _doors = new ArrayList<>();
private final List<String> _doorDefault = new ArrayList<>();
private final List<StatsSet> _doorDefault = new ArrayList<>();
final String _name;
private int _ownerId;
private Clan _ownerClan;
@@ -526,7 +527,7 @@ public class ClanHall
if (door.getCurrentHp() <= 0)
{
door.decayMe(); // Kill current if not killed already
door = DoorTable.parseList(_doorDefault.get(i));
door = DoorData.parseList(_doorDefault.get(i));
door.spawnMe(door.getX(), door.getY(), door.getZ());
getDoors().set(i, door);
@@ -864,13 +865,28 @@ public class ClanHall
while (rs.next())
{
// Create list of the door default for use when respawning dead doors
_doorDefault.add(rs.getString("name") + ";" + rs.getInt("id") + ";" + rs.getInt("x") + ";" + rs.getInt("y") + ";" + rs.getInt("z") + ";" + rs.getInt("range_xmin") + ";" + rs.getInt("range_ymin") + ";" + rs.getInt("range_zmin") + ";" + rs.getInt("range_xmax") + ";" + rs.getInt("range_ymax") + ";" + rs.getInt("range_zmax") + ";" + rs.getInt("hp") + ";" + rs.getInt("pDef") + ";" + rs.getInt("mDef"));
// Create set of the door default for use when respawning dead doors
final StatsSet set = new StatsSet();
set.set("name", rs.getString("name"));
set.set("id", rs.getInt("id"));
set.set("x", rs.getInt("x"));
set.set("y", rs.getInt("y"));
set.set("z", rs.getInt("z"));
set.set("xMin", rs.getInt("range_xmin"));
set.set("yMin", rs.getInt("range_ymin"));
set.set("zMin", rs.getInt("range_zmin"));
set.set("xMax", rs.getInt("range_xmax"));
set.set("yMax", rs.getInt("range_ymax"));
set.set("zMax", rs.getInt("range_zmax"));
set.set("hp", rs.getInt("hp"));
set.set("pDef", rs.getInt("pDef"));
set.set("mDef", rs.getInt("mDef"));
_doorDefault.add(set);
final DoorInstance door = DoorTable.parseList(_doorDefault.get(_doorDefault.size() - 1));
final DoorInstance door = DoorData.parseList(_doorDefault.get(_doorDefault.size() - 1));
door.spawnMe(door.getX(), door.getY(), door.getZ());
_doors.add(door);
DoorTable.getInstance().putDoor(door);
DoorData.getInstance().putDoor(door);
}
rs.close();

View File

@@ -28,9 +28,9 @@ import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.ItemTable;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.model.Location;
@@ -2766,16 +2766,16 @@ public class TvT implements EventTask
*/
private static void closeFortDoors()
{
DoorTable.getInstance().getDoor(23170004).closeMe();
DoorTable.getInstance().getDoor(23170005).closeMe();
DoorTable.getInstance().getDoor(23170002).closeMe();
DoorTable.getInstance().getDoor(23170003).closeMe();
DoorTable.getInstance().getDoor(23170006).closeMe();
DoorTable.getInstance().getDoor(23170007).closeMe();
DoorTable.getInstance().getDoor(23170008).closeMe();
DoorTable.getInstance().getDoor(23170009).closeMe();
DoorTable.getInstance().getDoor(23170010).closeMe();
DoorTable.getInstance().getDoor(23170011).closeMe();
DoorData.getInstance().getDoor(23170004).closeMe();
DoorData.getInstance().getDoor(23170005).closeMe();
DoorData.getInstance().getDoor(23170002).closeMe();
DoorData.getInstance().getDoor(23170003).closeMe();
DoorData.getInstance().getDoor(23170006).closeMe();
DoorData.getInstance().getDoor(23170007).closeMe();
DoorData.getInstance().getDoor(23170008).closeMe();
DoorData.getInstance().getDoor(23170009).closeMe();
DoorData.getInstance().getDoor(23170010).closeMe();
DoorData.getInstance().getDoor(23170011).closeMe();
try
{
@@ -2792,16 +2792,16 @@ public class TvT implements EventTask
*/
private static void openFortDoors()
{
DoorTable.getInstance().getDoor(23170004).openMe();
DoorTable.getInstance().getDoor(23170005).openMe();
DoorTable.getInstance().getDoor(23170002).openMe();
DoorTable.getInstance().getDoor(23170003).openMe();
DoorTable.getInstance().getDoor(23170006).openMe();
DoorTable.getInstance().getDoor(23170007).openMe();
DoorTable.getInstance().getDoor(23170008).openMe();
DoorTable.getInstance().getDoor(23170009).openMe();
DoorTable.getInstance().getDoor(23170010).openMe();
DoorTable.getInstance().getDoor(23170011).openMe();
DoorData.getInstance().getDoor(23170004).openMe();
DoorData.getInstance().getDoor(23170005).openMe();
DoorData.getInstance().getDoor(23170002).openMe();
DoorData.getInstance().getDoor(23170003).openMe();
DoorData.getInstance().getDoor(23170006).openMe();
DoorData.getInstance().getDoor(23170007).openMe();
DoorData.getInstance().getDoor(23170008).openMe();
DoorData.getInstance().getDoor(23170009).openMe();
DoorData.getInstance().getDoor(23170010).openMe();
DoorData.getInstance().getDoor(23170011).openMe();
}
/**
@@ -2809,8 +2809,8 @@ public class TvT implements EventTask
*/
private static void closeAdenColosseumDoors()
{
DoorTable.getInstance().getDoor(24190002).closeMe();
DoorTable.getInstance().getDoor(24190003).closeMe();
DoorData.getInstance().getDoor(24190002).closeMe();
DoorData.getInstance().getDoor(24190003).closeMe();
try
{
@@ -2827,7 +2827,7 @@ public class TvT implements EventTask
*/
private static void openAdenColosseumDoors()
{
DoorTable.getInstance().getDoor(24190002).openMe();
DoorTable.getInstance().getDoor(24190003).openMe();
DoorData.getInstance().getDoor(24190002).openMe();
DoorData.getInstance().getDoor(24190003).openMe();
}
}

View File

@@ -29,14 +29,15 @@ import java.util.logging.Logger;
import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.CropProcure;
import org.l2jmobius.gameserver.instancemanager.CastleManorManager.SeedProduction;
import org.l2jmobius.gameserver.instancemanager.CrownManager;
import org.l2jmobius.gameserver.model.Manor;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -67,7 +68,7 @@ public class Castle
private int _castleId = 0;
private final List<DoorInstance> _doors = new ArrayList<>();
private final List<String> _doorDefault = new ArrayList<>();
private final List<StatsSet> _doorDefault = new ArrayList<>();
private String _name = "";
private int _ownerId = 0;
private Siege _siege = null;
@@ -453,7 +454,7 @@ public class Castle
if (door.getCurrentHp() <= 0)
{
door.decayMe(); // Kill current if not killed already
door = DoorTable.parseList(_doorDefault.get(i));
door = DoorData.parseList(_doorDefault.get(i));
if (isDoorWeak)
{
@@ -569,13 +570,28 @@ public class Castle
while (rs.next())
{
// Create list of the door default for use when respawning dead doors
_doorDefault.add(rs.getString("name") + ";" + rs.getInt("id") + ";" + rs.getInt("x") + ";" + rs.getInt("y") + ";" + rs.getInt("z") + ";" + rs.getInt("range_xmin") + ";" + rs.getInt("range_ymin") + ";" + rs.getInt("range_zmin") + ";" + rs.getInt("range_xmax") + ";" + rs.getInt("range_ymax") + ";" + rs.getInt("range_zmax") + ";" + rs.getInt("hp") + ";" + rs.getInt("pDef") + ";" + rs.getInt("mDef"));
// Create set of the door default for use when respawning dead doors
final StatsSet set = new StatsSet();
set.set("name", rs.getString("name"));
set.set("id", rs.getInt("id"));
set.set("x", rs.getInt("x"));
set.set("y", rs.getInt("y"));
set.set("z", rs.getInt("z"));
set.set("xMin", rs.getInt("range_xmin"));
set.set("yMin", rs.getInt("range_ymin"));
set.set("zMin", rs.getInt("range_zmin"));
set.set("xMax", rs.getInt("range_xmax"));
set.set("yMax", rs.getInt("range_ymax"));
set.set("zMax", rs.getInt("range_zmax"));
set.set("hp", rs.getInt("hp"));
set.set("pDef", rs.getInt("pDef"));
set.set("mDef", rs.getInt("mDef"));
_doorDefault.add(set);
final DoorInstance door = DoorTable.parseList(_doorDefault.get(_doorDefault.size() - 1));
final DoorInstance door = DoorData.parseList(_doorDefault.get(_doorDefault.size() - 1));
door.spawnMe(door.getX(), door.getY(), door.getZ());
_doors.add(door);
DoorTable.getInstance().putDoor(door);
DoorData.getInstance().putDoor(door);
}
rs.close();

View File

@@ -26,8 +26,9 @@ import java.util.logging.Logger;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -47,7 +48,7 @@ public class Fort
private int _fortId = 0;
private final List<DoorInstance> _doors = new ArrayList<>();
private final List<String> _doorDefault = new ArrayList<>();
private final List<StatsSet> _doorDefault = new ArrayList<>();
private String _name = "";
private int _ownerId = 0;
private Clan _fortOwner = null;
@@ -286,7 +287,7 @@ public class Fort
if (door.getCurrentHp() >= 0)
{
door.decayMe(); // Kill current if not killed already
door = DoorTable.parseList(_doorDefault.get(i));
door = DoorData.parseList(_doorDefault.get(i));
if (isDoorWeak)
{
@@ -394,15 +395,30 @@ public class Fort
while (rs.next())
{
// Create list of the door default for use when respawning dead doors
_doorDefault.add(rs.getString("name") + ";" + rs.getInt("id") + ";" + rs.getInt("x") + ";" + rs.getInt("y") + ";" + rs.getInt("z") + ";" + rs.getInt("range_xmin") + ";" + rs.getInt("range_ymin") + ";" + rs.getInt("range_zmin") + ";" + rs.getInt("range_xmax") + ";" + rs.getInt("range_ymax") + ";" + rs.getInt("range_zmax") + ";" + rs.getInt("hp") + ";" + rs.getInt("pDef") + ";" + rs.getInt("mDef"));
// Create set of the door default for use when respawning dead doors
final StatsSet set = new StatsSet();
set.set("name", rs.getString("name"));
set.set("id", rs.getInt("id"));
set.set("x", rs.getInt("x"));
set.set("y", rs.getInt("y"));
set.set("z", rs.getInt("z"));
set.set("xMin", rs.getInt("range_xmin"));
set.set("yMin", rs.getInt("range_ymin"));
set.set("zMin", rs.getInt("range_zmin"));
set.set("xMax", rs.getInt("range_xmax"));
set.set("yMax", rs.getInt("range_ymax"));
set.set("zMax", rs.getInt("range_zmax"));
set.set("hp", rs.getInt("hp"));
set.set("pDef", rs.getInt("pDef"));
set.set("mDef", rs.getInt("mDef"));
_doorDefault.add(set);
final DoorInstance door = DoorTable.parseList(_doorDefault.get(_doorDefault.size() - 1));
final DoorInstance door = DoorData.parseList(_doorDefault.get(_doorDefault.size() - 1));
door.spawnMe(door.getX(), door.getY(), door.getZ());
_doors.add(door);
DoorTable.getInstance().putDoor(door);
DoorData.getInstance().putDoor(door);
}
rs.close();

View File

@@ -25,9 +25,9 @@ import java.util.concurrent.ScheduledFuture;
import java.util.logging.Logger;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.World;
@@ -179,17 +179,17 @@ public class BanditStrongholdSiege extends ClanHallSiege
{
if (val == 1)
{
DoorTable.getInstance().getDoor(22170001).openMe();
DoorTable.getInstance().getDoor(22170002).openMe();
DoorTable.getInstance().getDoor(22170003).closeMe();
DoorTable.getInstance().getDoor(22170004).closeMe();
DoorData.getInstance().getDoor(22170001).openMe();
DoorData.getInstance().getDoor(22170002).openMe();
DoorData.getInstance().getDoor(22170003).closeMe();
DoorData.getInstance().getDoor(22170004).closeMe();
}
else if (val == 2)
{
DoorTable.getInstance().getDoor(22170001).closeMe();
DoorTable.getInstance().getDoor(22170002).closeMe();
DoorTable.getInstance().getDoor(22170003).closeMe();
DoorTable.getInstance().getDoor(22170004).closeMe();
DoorData.getInstance().getDoor(22170001).closeMe();
DoorData.getInstance().getDoor(22170002).closeMe();
DoorData.getInstance().getDoor(22170003).closeMe();
DoorData.getInstance().getDoor(22170004).closeMe();
}
}

View File

@@ -25,9 +25,9 @@ import java.util.concurrent.ScheduledFuture;
import java.util.logging.Logger;
import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.World;
@@ -172,17 +172,17 @@ public class WildBeastFarmSiege extends ClanHallSiege
{
if (val == 1)
{
DoorTable.getInstance().getDoor(21150003).openMe();
DoorTable.getInstance().getDoor(21150004).openMe();
DoorTable.getInstance().getDoor(21150001).closeMe();
DoorTable.getInstance().getDoor(21150002).closeMe();
DoorData.getInstance().getDoor(21150003).openMe();
DoorData.getInstance().getDoor(21150004).openMe();
DoorData.getInstance().getDoor(21150001).closeMe();
DoorData.getInstance().getDoor(21150002).closeMe();
}
else if (val == 2)
{
DoorTable.getInstance().getDoor(21150001).closeMe();
DoorTable.getInstance().getDoor(21150002).closeMe();
DoorTable.getInstance().getDoor(21150003).closeMe();
DoorTable.getInstance().getDoor(21150004).closeMe();
DoorData.getInstance().getDoor(21150001).closeMe();
DoorData.getInstance().getDoor(21150002).closeMe();
DoorData.getInstance().getDoor(21150003).closeMe();
DoorData.getInstance().getDoor(21150004).closeMe();
}
}

View File

@@ -20,7 +20,7 @@ import java.nio.BufferUnderflowException;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -112,7 +112,7 @@ public class MoveBackwardToLocation extends GameClientPacket
}
// Mobius: Check for possible door logout and move over exploit. Also checked at ValidatePosition.
if (DoorTable.getInstance().checkIfDoorsBetween(player.getX(), player.getY(), player.getZ(), _targetX, _targetY, _targetZ))
if (DoorData.getInstance().checkIfDoorsBetween(player.getX(), player.getY(), player.getZ(), _targetX, _targetY, _targetZ))
{
player.stopMove(player.getLastServerPosition());
player.sendPacket(ActionFailed.STATIC_PACKET);

View File

@@ -17,7 +17,7 @@
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.csv.DoorTable;
import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
@@ -165,7 +165,7 @@ public class ValidatePosition extends GameClientPacket
player.setClientHeading(_heading); // No real need to validate heading.
// Mobius: Check for possible door logout and move over exploit. Also checked at MoveBackwardToLocation.
if (!DoorTable.getInstance().checkIfDoorsBetween(realX, realY, realZ, _x, _y, _z))
if (!DoorData.getInstance().checkIfDoorsBetween(realX, realY, realZ, _x, _y, _z))
{
player.setLastServerPosition(realX, realY, realZ);
}