Door data moved from CSV to XML.
This commit is contained in:
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
@@ -93,7 +93,7 @@ public class FenceData
|
||||
}
|
||||
}
|
||||
|
||||
LOGGER.info("Loaded " + _fences.size() + " Fences.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _fences.size() + " Fences.");
|
||||
}
|
||||
|
||||
public int getLoadedElementsCount()
|
||||
|
@@ -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.
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
@@ -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();
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user