Перейти к содержанию
Авторизация  
refert12

Как сделать ПВП зону!

Рекомендуемые сообщения

Помогите сделать дино остров пвп зоной, у меня сборка l2j, в дате нет файла зона и я не знаю где его найти может тут не так делается подскажите кто то!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там не файл зона, а папка зона должна быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zone_vertices таблица у тебя есть а?

и

data\zones \ папка есть а?

таблица есть а папки нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
/*

 * 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 *.gameserver.instancemanager;

 

import java.io.File;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Collection;

 

import javax.xml.parsers.DocumentBuilderFactory;

 

import javolution.util.FastList;

import javolution.util.FastMap;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

 

import *.Config;

import *.L2DatabaseFactory;

import *.gameserver.model.L2World;

import *.gameserver.model.L2WorldRegion;

import *.gameserver.model.actor.L2Character;

import *.gameserver.model.zone.L2ZoneForm;

import *.gameserver.model.zone.L2ZoneType;

import *.gameserver.model.zone.form.ZoneCuboid;

import *.gameserver.model.zone.form.ZoneCylinder;

import *.gameserver.model.zone.form.ZoneNPoly;

import *.gameserver.model.zone.type.L2ArenaZone;

import *.gameserver.model.zone.type.L2BigheadZone;

import *.gameserver.model.zone.type.L2BossZone;

import *.gameserver.model.zone.type.L2CastleTeleportZone;

import *.gameserver.model.zone.type.L2CastleZone;

import *.gameserver.model.zone.type.L2ClanHallZone;

import *.gameserver.model.zone.type.L2DamageZone;

import *.gameserver.model.zone.type.L2DerbyTrackZone;

import *.gameserver.model.zone.type.L2FishingZone;

import *.gameserver.model.zone.type.L2FortZone;

import *.gameserver.model.zone.type.L2HellBoundZone;

import *.gameserver.model.zone.type.L2JailZone;

import *.gameserver.model.zone.type.L2LandingZone;

import *.gameserver.model.zone.type.L2MotherTreeZone;

import *.gameserver.model.zone.type.L2NoHqZone;

import *.gameserver.model.zone.type.L2NoLandingZone;

import *.gameserver.model.zone.type.L2NoStoreZone;

import *.gameserver.model.zone.type.L2OlympiadStadiumZone;

import *.gameserver.model.zone.type.L2PaganZone;

import *.gameserver.model.zone.type.L2PeaceZone;

import *.gameserver.model.zone.type.L2PoisonZone;

import *.gameserver.model.zone.type.L2ScriptZone;

import *.gameserver.model.zone.type.L2SwampZone;

import *.gameserver.model.zone.type.L2TownZone;

import *.gameserver.model.zone.type.L2WaterZone;

 

/**

 * This class manages the augmentation data and can also create new augmentations.

 * 

 * @author durgus

 */

public class ZoneManager

{

private final static Log _log = LogFactory.getLog(ZoneManager.class);

private final FastMap<Integer, L2ZoneType> _zones = new FastMap<Integer, L2ZoneType>();

 

public static final ZoneManager getInstance()

{

return SingletonHolder._instance;

}

 

// =========================================================

// Data Field

// =========================================================

// Constructor

private ZoneManager()

{

load();

}

 

public void reload()

{

// int zoneCount = 0;

// Get the world regions

int count = 0;

L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();

for (int x = 0; x < worldRegions.length; x++)

{

for (int y = 0; y < worldRegions[x].length; y++)

{

worldRegions[x][y].clearZones();

count++;

}

}

GrandBossManager.getInstance().getZones().clear();

_log.info("Removed zones in " + count + " regions.");

load();

}

 

// =========================================================

// Method - Private

@SuppressWarnings("unchecked")

private final void load()

{

_log.info("Loading zones...");

Connection con = null;

int zoneCount = 0;

_zones.clear();

// Get the world regions

L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();

try

{

con = L2DatabaseFactory.getInstance().getConnection();

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setValidating(false);

factory.setIgnoringComments(true);

File file = new File(Config.DATAPACK_ROOT + "/data/zones/zone.xml");

if (!file.exists())

{

if (Config.DEBUG)

_log.info("The zone.xml file is missing.");

return;

}

Document doc = factory.newDocumentBuilder().parse(file);

FastList[][] regZones = new FastList[worldRegions.length][];

for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())

{

if ("list".equalsIgnoreCase(n.getNodeName()))

{

for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())

{

if ("zone".equalsIgnoreCase(d.getNodeName()))

{

NamedNodeMap attrs = d.getAttributes();

int zoneId = Integer.parseInt(attrs.getNamedItem("id").getNodeValue());

int minZ = Integer.parseInt(attrs.getNamedItem("minZ").getNodeValue());

int maxZ = Integer.parseInt(attrs.getNamedItem("maxZ").getNodeValue());

String zoneType = attrs.getNamedItem("type").getNodeValue();

String zoneShape = attrs.getNamedItem("shape").getNodeValue();

// Create the zone

L2ZoneType temp = null;

if (zoneType.equals("FishingZone"))

temp = new L2FishingZone(zoneId);

else if (zoneType.equals("ClanHallZone"))

temp = new L2ClanHallZone(zoneId);

else if (zoneType.equals("PeaceZone"))

temp = new L2PeaceZone(zoneId);

else if (zoneType.equals("Town"))

temp = new L2TownZone(zoneId);

else if (zoneType.equals("OlympiadStadium"))

temp = new L2OlympiadStadiumZone(zoneId);

else if (zoneType.equals("CastleZone"))

temp = new L2CastleZone(zoneId);

else if (zoneType.equals("CastleTeleportZone"))

temp = new L2CastleTeleportZone(zoneId);

else if (zoneType.equals("FortZone"))

temp = new L2FortZone(zoneId);

else if (zoneType.equals("DamageZone"))

temp = new L2DamageZone(zoneId);

else if (zoneType.equals("PoisonZone"))

temp = new L2PoisonZone(zoneId);

else if (zoneType.equals("SwampZone"))

temp = new L2SwampZone(zoneId);

else if (zoneType.equals("Arena"))

temp = new L2ArenaZone(zoneId);

else if (zoneType.equals("MotherTree"))

temp = new L2MotherTreeZone(zoneId);

else if (zoneType.equals("BigheadZone"))

temp = new L2BigheadZone(zoneId);

else if (zoneType.equals("LandingZone"))

temp = new L2LandingZone(zoneId);

else if (zoneType.equals("NoLandingZone"))

temp = new L2NoLandingZone(zoneId);

else if (zoneType.equals("JailZone"))

temp = new L2JailZone(zoneId);

else if (zoneType.equals("DerbyTrackZone"))

temp = new L2DerbyTrackZone(zoneId);

else if (zoneType.equals("BossZone"))

temp = new L2BossZone(zoneId);

else if (zoneType.equals("WaterZone"))

temp = new L2WaterZone(zoneId);

else if (zoneType.equals("NoStoreZone"))

temp = new L2NoStoreZone(zoneId);

else if (zoneType.equals("PaganZone"))

temp = new L2PaganZone(zoneId);

else if (zoneType.equals("NoHqZone"))

temp = new L2NoHqZone(zoneId);

else if (zoneType.equals("HellBoundZone"))

temp = new L2HellBoundZone(zoneId);

else if (zoneType.equals("ScriptZone"))

temp = new L2ScriptZone(zoneId);

// Check for unknown type

if (temp == null)

{

_log.warn("ZoneData: No such zone type: " + zoneType);

continue;

}

// Get the zone shape from sql

try

{

PreparedStatement statement = null;

// Set the correct query

statement = con.prepareStatement("SELECT x,y FROM zone_vertices WHERE id=? ORDER BY 'order' ASC ");

statement.setInt(1, zoneId);

ResultSet rset = statement.executeQuery();

// Create this zone. Parsing for cuboids is a

// bit different than for other polygons

// cuboids need exactly 2 points to be defined.

// Other polygons need at least 3 (one per

// vertex)

if (zoneShape.equalsIgnoreCase("Cuboid"))

{

int[] x = { 0, 0 };

int[] y = { 0, 0 };

boolean successfulLoad = true;

for (int i = 0; i < 2; i++)

{

if (rset.next())

{

x = rset.getInt("x");

y = rset.getInt("y");

}

else

{

_log.warn("ZoneData: Missing cuboid vertex in sql data for zone: " + zoneId);

rset.close();

statement.close();

successfulLoad = false;

break;

}

}

if (successfulLoad)

temp.setZone(new ZoneCuboid(x[0], x[1], y[0], y[1], minZ, maxZ));

else

continue;

}

else if (zoneShape.equalsIgnoreCase("NPoly"))

{

FastList<Integer> fl_x = new FastList<Integer>(), fl_y = new FastList<Integer>();

while (rset.next())

{

fl_x.add(rset.getInt("x"));

fl_y.add(rset.getInt("y"));

}

// An nPoly needs to have at least 3

// vertices

if ((fl_x.size() == fl_y.size()) && (fl_x.size() > 2))

{

// Create arrays

int[] aX = new int[fl_x.size()];

int[] aY = new int[fl_y.size()];

// This runs only at server startup so

// don't complain :>

for (int i = 0; i < fl_x.size(); i++)

{

aX = fl_x.get(i);

aY = fl_y.get(i);

}

// Create the zone

temp.setZone(new ZoneNPoly(aX, aY, minZ, maxZ));

}

else

{

_log.warn("ZoneData: Bad sql data for zone: " + zoneId);

rset.close();

statement.close();

continue;

}

}

else if (zoneShape.equalsIgnoreCase("Cylinder"))

{

// A Cylinder zone requires a center point

// at x,y and a radius

int zoneRad = Integer.parseInt(attrs.getNamedItem("rad").getNodeValue());

if (rset.next() && zoneRad > 0)

{

int zoneX = rset.getInt("x");

int zoneY = rset.getInt("y");

// create the zone

temp.setZone(new ZoneCylinder(zoneX, zoneY, minZ, maxZ, zoneRad));

}

else

{

_log.warn("ZoneData: Bad sql data for zone: " + zoneId);

rset.close();

statement.close();

continue;

}

}

else

{

_log.warn("ZoneData: Unknown shape: " + zoneShape);

rset.close();

statement.close();

continue;

}

rset.close();

statement.close();

}

catch (Exception e)

{

_log.warn("ZoneData: Failed to load zone coordinates: " + e);

}

// Check for additional parameters

for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())

{

if ("stat".equalsIgnoreCase(cd.getNodeName()))

{

attrs = cd.getAttributes();

String name = attrs.getNamedItem("name").getNodeValue();

String val = attrs.getNamedItem("val").getNodeValue();

temp.setParameter(name, val);

}

}

addZone(zoneId, temp);

L2ZoneForm form = temp.getZone();

// Register the zone into any world region it

// intersects with...

// currently 11136 test for each zone :>

int ax, ay, bx, by;

for (int x = 0; x < worldRegions.length; x++)

{

if (regZones[x] == null)

regZones[x] = new FastList[worldRegions[x].length];

for (int y = 0; y < worldRegions[x].length; y++)

{

ax = (x - L2World.OFFSET_X) << L2World.SHIFT_BY;

bx = ((x + 1) - L2World.OFFSET_X) << L2World.SHIFT_BY;

ay = (y - L2World.OFFSET_Y) << L2World.SHIFT_BY;

by = ((y + 1) - L2World.OFFSET_Y) << L2World.SHIFT_BY;

if (form.intersectsRectangle(ax, bx, ay, by))

{

if (Config.DEBUG)

{

_log.info("Zone (" + zoneId + ") added to: " + x + " " + y);

}

if (regZones[x][y] == null)

regZones[x][y] = new FastList<L2ZoneType>();

regZones[x][y].add(temp);

}

}

}

// Special managers for granbosses...

if (temp instanceof L2BossZone)

GrandBossManager.getInstance().addZone((L2BossZone) temp);

// Increase the counter

zoneCount++;

}

}

}

}

for (int x = 0; x < worldRegions.length; x++) {

for (int y = 0; y < worldRegions[x].length; y++) {

if (regZones[x][y] != null)

worldRegions[x][y].setZones(regZones[x][y]);

}

}

}

catch (Exception e)

{

_log.error("Error while loading zones.", e);

return;

}

finally

{

L2DatabaseFactory.close(con);

}

_log.info("ZoneManager: Loaded: " + zoneCount + " zones.");

}

 

/**

* Add new zone


* @param zone

*/

public void addZone(Integer id, L2ZoneType zone)

{

_zones.put(id, zone);

}

 

/**

* Returns all zones registered with the ZoneManager. To minimise iteration processing retrieve zones from L2WorldRegion for a specific location instead.


* @return zones

*/

public Collection<L2ZoneType> getAllZones()

{

return _zones.values();

}

 

public L2ZoneType getZoneById(int id)

{

return _zones.get(id);

}

 

/**

* Returns all zones from given coordinates (plane)


* @param x

* @param y

* @return zones

*/

public FastList<L2ZoneType> getZones(int x, int y)

{

L2WorldRegion region = L2World.getInstance().getRegion(x, y);

FastList<L2ZoneType> temp = new FastList<L2ZoneType>();

for (L2ZoneType zone : region.getZones())

{

if (zone.isInsideZone(x, y))

temp.add(zone);

}

return temp;

}

 

/**

* Returns all zones from given coordinates


* @param x

* @param y

* @param z

* @return zones

*/

public FastList<L2ZoneType> getZones(int x, int y, int z)

{

L2WorldRegion region = L2World.getInstance().getRegion(x, y);

FastList<L2ZoneType> temp = new FastList<L2ZoneType>();

for (L2ZoneType zone : region.getZones())

{

if (zone.isInsideZone(x, y, z))

temp.add(zone);

}

return temp;

}

 

public final L2ArenaZone getArena(L2Character character)

{

for (L2ZoneType temp : ZoneManager.getInstance().getZones(character.getX(), character.getY(), character.getZ()))

{

if (temp instanceof L2ArenaZone && temp.isCharacterInZone(character))

return ((L2ArenaZone) temp);

}

return null;

}

 

public final L2OlympiadStadiumZone getOlympiadStadium(L2Character character)

{

for (L2ZoneType temp : ZoneManager.getInstance().getZones(character.getX(), character.getY(), character.getZ()))

{

if (temp instanceof L2OlympiadStadiumZone && temp.isCharacterInZone(character))

return ((L2OlympiadStadiumZone) temp);

}

return null;

}

 

@SuppressWarnings("synthetic-access")

private static class SingletonHolder

{

protected static final ZoneManager _instance = new ZoneManager();

}

}

 

 

 

Это у меня а ты у себя в ядре глянь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...