Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Я телепортировался по этим локациям, да, это оно, но босс все же спавнится на 0 0 0 координатахвот же оно ?
Я так понял у него никакого спавна не происходит вообще, чтобы применять onEvtSpawnвот же оно ?
Он спустя какое то время спавнится, но с нулевыми координатамиЯ так понял у него никакого спавна не происходит вообще, чтобы применять onEvtSpawn
Что это за сборка вообще? она приватная или какая-то с шары? Каким образом устанавливали и разворачивали все?Он спустя какое то время спавнится, но с нулевыми координатами
С шары, L2GW от RageЧто это за сборка вообще? она приватная или какая-то с шары? Каким образом устанавливали и разворачивали все?
В смысле? Его нет в базе и его нужно залить отдельно, просто сам этот файл npcpos я нашелПонял. Для содержательности темы:
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
Видимо отсюда. Там и обсуждают, что spawn list большой и его лучше бы быть на части перед загрузкой в базу. И именно мог и не залиться адекватно. Все вроде как и будет работать, но спавнов нет
Хотя нет, открыл data packПосмотреть вложение 44020
pos="{-21610;181594;-5734;0}" вот такое есть, например
Можешь помочь с этим?Ну а сама папка data(возможно после compile.bat) должна быть рядом с gameserver.bat( ну или по пути по которому gameserver будет искать) и все подтянется. Т.е там будет l2-dp.zip, который просто нужно правильно распаковать
Не знаю.Но как я понял он не включился и нужно включить отдельно или что?
Все сделано, когда при внесении базы была одна ошибка, она была очень давно, мы ее проигнорировали. Я не помню ее вообще. Для меня единственное остается это правильно вставить базу данных? Нет ли возможности просто 1 таблицу вставить в базу, чтобы не сносить все и создавать по новой?Не знаю.
Путь установки в твоём случае(как я его вижу):
1. Собрать core в итоге будет l2-server.zip
2. Собрать scripts в итоге будет l2-script.zip
3. Собрать датапак l2-dp.zip
Распаковываешь все в одно место server, script, datapack. В файлах датапака будет установщик бд(все для людей сделали).
4. Рекаверишь базу данных через установщик
5. На этом этапе(если применены все фиксы из темы) у тебя будет запускаемые gs, ls
6. И если датапак был перенесен корректно, анквин должна спавниться согласно таблице npcpos.
Если все так и было сделано, то предлагаю в исходники добавить трассировку(логировать все подряд) от чтения файла npcpos(поиском найти что там как), до самой анквин и логированием в месте onEvtSpawn и локализовывать проблему постепенно сужая поиск.
Я думаю в случае если спавн ant queen зависит от npcpos, то база тут не причем и нужно смотреть, подгружается ли этот файл при старте gameserver'a.Все сделано, когда при внесении базы была одна ошибка, она была очень давно, мы ее проигнорировали. Я не помню ее вообще. Для меня единственное остается это правильно вставить базу данных? Нет ли возможности просто 1 таблицу вставить в базу, чтобы не сносить все и создавать по новой?
Не думаю, но не уверен. Потому что когда серв запускается после рестарта все мобы и боссы на месте + после убийства спавнятся в своем месте, кроме ант квина и еще некоторых боссовЯ думаю в случае если спавн ant queen зависит от npcpos, то база тут не причем и нужно смотреть, подгружается ли этот файл при старте gameserver'a.
Не думаю, но не уверен. Потому что когда серв запускается после рестарта все мобы и боссы на месте + после убийства спавнятся в своем месте, кроме ант квина и еще некоторых боссов
_log.info("The " + Config.NPCPOS_FILE + " file is missing.");
_log.warn("SpawnTable: can't find npcmaker ai: " + ai + " use DefaultMake. " + e);
_log.warn("SpawnTable: can't create npcmaker ai: " + ai + " " + e);
_log.warn("SpawnTable: maker " + ai + " has no public field: " + key);
_log.warn("SpawnTable: maker " + ai + " field: " + key + " unsupported type: " + field.getType().getSimpleName());
_log.warn("SpawnTable: maker " + ai + " field: " + key + " illegal access: " + e);
_log.warn("SpawnTable: npc template id: " + npcId + " not found!");
_log.warn("SpawnTable: can't load npcpos data " + e);
_log.warn("SpawnTable: error while loading " + Config.NPCPOS_FILE + " " + e);
_log.info("SpawnTable: loaded " + _npcMakers.size() + " npc makers.");
package ru.l2gw.gameserver.tables;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilderFactory;
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 ru.l2gw.commons.arrays.GArray;
import ru.l2gw.commons.utils.DbUtils;
import ru.l2gw.gameserver.Config;
import ru.l2gw.gameserver.database.DatabaseFactory;
import ru.l2gw.gameserver.database.mysql;
import ru.l2gw.gameserver.instancemanager.DayNightSpawnManager;
import ru.l2gw.gameserver.instancemanager.RaidBossSpawnManager;
import ru.l2gw.gameserver.model.L2GroupSpawn;
import ru.l2gw.gameserver.model.L2Spawn;
import ru.l2gw.gameserver.model.L2Territory;
import ru.l2gw.gameserver.model.L2World;
import ru.l2gw.gameserver.model.Player;
import ru.l2gw.gameserver.model.entity.instance.Instance;
import ru.l2gw.gameserver.model.npcmaker.DefaultMaker;
import ru.l2gw.gameserver.model.npcmaker.RespawnData;
import ru.l2gw.gameserver.model.npcmaker.SpawnDefine;
import ru.l2gw.gameserver.scripts.Scripts;
import ru.l2gw.gameserver.templates.L2NpcTemplate;
import ru.l2gw.gameserver.util.Location;
@SuppressWarnings(
{
"nls",
"unqualified-field-access",
"boxing"
})
public class SpawnTable
{
private static final Log _log = LogFactory.getLog(SpawnTable.class.getName());
private static SpawnTable _instance;
private FastMap<Integer, L2Spawn> _spawntable;
private FastMap<Integer, GArray<L2Spawn>> _spawnsByNpcId;
private FastMap<String, GArray<L2Spawn>> _eventSpawns;
private FastMap<String, DefaultMaker> _npcMakers;
private FastMap<String, RespawnData> _respawnData;
private int _npcSpawnCount;
private int _spawnCount;
private int _highestId;
public static SpawnTable getInstance()
{
if (_instance == null)
{
new SpawnTable();
}
return _instance;
}
private SpawnTable()
{
_instance = this;
NpcTable.getInstance().applyServerSideTitle();
if (!Config.DONTLOADSPAWN)
{
fillSpawnTable(true);
}
else
{
_log.info("Spawn Correctly Disabled");
Scripts.getInstance().callOnLoad();
}
}
public FastMap<Integer, L2Spawn> getSpawnTable()
{
return _spawntable;
}
private void fillSpawnTable(boolean scripts)
{
_spawntable = new FastMap<Integer, L2Spawn>().shared();
_spawnsByNpcId = new FastMap<Integer, GArray<L2Spawn>>().shared();
_eventSpawns = new FastMap<String, GArray<L2Spawn>>().shared();
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT s.spawn_id, count, s.npc_templateid, locx, locy, locz, heading, randomx, randomy, ai, ai_parameters, respawn_delay, respawn_random, loc_id, ks.respawn_time, periodOfDay, event_name, spawn_time FROM `spawnlist` s LEFT JOIN `kill_status` AS ks ON ( s.spawn_id = ks.spawn_id ) ORDER BY npc_templateid");
rset = statement.executeQuery();
L2Spawn spawnDat;
L2NpcTemplate template1;
_npcSpawnCount = 0;
_spawnCount = 0;
while (rset.next())
{
template1 = NpcTable.getTemplate(rset.getInt("npc_templateid"));
if (template1 != null)
{
if (rset.getString("event_name") != null)
{
spawnDat = new L2Spawn(template1);
spawnDat.setId(rset.getInt("spawn_id"));
spawnDat.setAmount(rset.getInt("count"));
spawnDat.setLocx(rset.getInt("locx"));
spawnDat.setLocy(rset.getInt("locy"));
spawnDat.setLocz(rset.getInt("locz"));
spawnDat.setHeading(rset.getInt("heading"));
spawnDat.setRandomX(rset.getInt("randomx"));
spawnDat.setRandomY(rset.getInt("randomy"));
spawnDat.setAIType(rset.getString("ai"));
spawnDat.setAIParameters(rset.getString("ai_parameters"));
spawnDat.setRespawnDelay(rset.getInt("respawn_delay"));
spawnDat.setRespawnRandom(rset.getInt("respawn_random"));
spawnDat.setEventName(rset.getString("event_name"));
if (rset.getString("respawn_time") == null)
{
spawnDat.setRespawnTime(0);
}
else
{
spawnDat.setRespawnTime(rset.getInt("respawn_time"));
}
spawnDat.setLocation(rset.getInt("loc_id"));
GArray<L2Spawn> spawns = _eventSpawns.get(rset.getString("event_name"));
if (spawns == null)
{
spawns = new GArray<>();
_eventSpawns.put(rset.getString("event_name"), spawns);
}
spawns.add(spawnDat);
if (rset.getBoolean("spawn_time"))
{
_npcSpawnCount += spawnDat.init();
}
}
else if (template1.type.equalsIgnoreCase("L2SiegeGuard") || template1.type.equalsIgnoreCase("L2RaidBoss") || template1.type.equalsIgnoreCase("L2Boss") || template1.type.equalsIgnoreCase("QueenAnt"))
{
// Don't spawn
}
else if (Config.ALLOW_CLASS_MASTERS_LIST.isEmpty() && template1.type.equals("L2ClassMaster"))
{
// Dont' spawn class masters
}
else
{
spawnDat = new L2Spawn(template1);
spawnDat.setId(rset.getInt("spawn_id"));
spawnDat.setAmount(rset.getInt("count") * (Config.ALT_DOUBLE_SPAWN ? 2 : 1));
spawnDat.setLocx(rset.getInt("locx"));
spawnDat.setLocy(rset.getInt("locy"));
spawnDat.setLocz(rset.getInt("locz"));
spawnDat.setHeading(rset.getInt("heading"));
spawnDat.setAIType(rset.getString("ai"));
spawnDat.setAIParameters(rset.getString("ai_parameters"));
spawnDat.setRespawnDelay(rset.getInt("respawn_delay"));
spawnDat.setRespawnRandom(rset.getInt("respawn_random"));
if (rset.getString("respawn_time") == null)
{
spawnDat.setRespawnTime(0);
}
else
{
spawnDat.setRespawnTime(rset.getInt("respawn_time"));
}
spawnDat.setLocation(rset.getInt("loc_id"));
switch (rset.getInt("periodOfDay"))
{
case 0: // default
_npcSpawnCount += spawnDat.init();
_spawntable.put(spawnDat.getId(), spawnDat);
GArray<L2Spawn> s = _spawnsByNpcId.get(spawnDat.getNpcId());
if (s == null)
{
s = new GArray<>();
_spawnsByNpcId.put(spawnDat.getNpcId(), s);
}
s.add(spawnDat);
break;
case 1: // Day
DayNightSpawnManager.getInstance().addDayMob(spawnDat);
break;
case 2: // Night
DayNightSpawnManager.getInstance().addNightMob(spawnDat);
break;
}
_spawnCount++;
if ((_npcSpawnCount % 1000) == 0)
{
_log.info("Spawned " + _npcSpawnCount + " npc");
}
if (spawnDat.getId() > _highestId)
{
_highestId = spawnDat.getId();
}
}
}
else
{
_log.warn("mob data for id:" + rset.getInt("npc_templateid") + " missing in npc table");
}
}
DayNightSpawnManager.getInstance().notifyChangeMode();
}
catch (Exception e1)
{
// problem with initializing spawn, go to next one
_log.warn("spawn couldnt be initialized:" + e1);
e1.printStackTrace();
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
_log.info("SpawnTable: Loaded " + _spawnCount + " Npc Spawn Locations. Total NPCs: " + _npcSpawnCount);
if (Config.DEBUG)
{
_log.info("Spawning completed, total number of NPCs in the world: " + _npcSpawnCount);
}
loadRespawnData();
loadNpcMakers();
if (scripts)
{
Scripts.getInstance().callOnLoad();
}
}
private void loadRespawnData()
{
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
_respawnData = new FastMap<String, RespawnData>().shared();
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT * FROM `respawn`");
rset = statement.executeQuery();
while (rset.next())
{
if ((rset.getLong("respawn_time") > 0) && (rset.getLong("respawn_time") < System.currentTimeMillis()))
{
continue;
}
_respawnData.put(rset.getString("dbname"), new RespawnData(rset.getString("dbname"), rset.getLong("respawn_time"), rset.getInt("hp"), rset.getInt("mp"), rset.getInt("x"), rset.getInt("y"), rset.getInt("z")));
}
mysql.set("DELETE FROM respawn WHERE respawn_time < " + System.currentTimeMillis());
}
catch (Exception e)
{
_log.warn("SpawnTable: can't load respawn data: " + e);
e.printStackTrace();
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
_log.info("SpawnTable: Loaded " + _respawnData.size() + " scheduled respawns.");
}
public void saveRespawn(String dbname, long respawnTime, int hp, int mp, Location pos)
{
mysql.set("REPLACE INTO respawn VALUES('" + dbname + "'," + respawnTime + "," + hp + "," + mp + "," + pos.getX() + "," + pos.getY() + "," + pos.getZ() + ")");
}
public void removeRespawnData(RespawnData rd)
{
_respawnData.remove(rd.dbname);
}
public static Pattern tp = Pattern.compile("\\{(\\-?\\d+);(\\-?\\d+);(\\-?\\d+);(\\-?\\d+);?(.+?\\%)?\\}");
private void loadNpcMakers()
{
_npcMakers = new FastMap<>();
File file = new File(Config.DATAPACK_ROOT, "data/npcpos.xml");
if (!file.exists())
{
_log.info("The npcpos.xml file is missing.");
return;
}
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);
Document doc = factory.newDocumentBuilder().parse(file);
for (Node l = doc.getFirstChild(); l != null; l = l.getNextSibling())
{
try
{
if ("list".equalsIgnoreCase(l.getNodeName()))
{
for (Node n = l.getFirstChild(); n != null; n = n.getNextSibling())
{
if ("territory".equalsIgnoreCase(n.getNodeName()))
{
String name = n.getAttributes().getNamedItem("name").getNodeValue();
String points = n.getAttributes().getNamedItem("points").getNodeValue();
Matcher m = tp.matcher(points);
L2Territory terr = new L2Territory(name);
while (m.find())
{
terr.add(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3)), Integer.parseInt(m.group(4)));
}
if (terr.getCoords().size() < 3)
{
_log.warn("SpawnTable: can't parse territory " + name + " points=" + points);
}
TerritoryTable.getInstance().getLocations().put(name, terr);
}
else if ("npcmaker".equalsIgnoreCase(n.getNodeName()))
{
NamedNodeMap attr = n.getAttributes();
String name = getStringFromNode(attr.getNamedItem("name"), null);
String ai = getStringFromNode(attr.getNamedItem("ai"), "DefaultMaker");
String ai_params = getStringFromNode(attr.getNamedItem("ai_parameters"), null);
String terr = getStringFromNode(attr.getNamedItem("territory"), "");
String ban_terr = getStringFromNode(attr.getNamedItem("banned_territory"), "");
int maximum_npc = Integer.parseInt(getStringFromNode(attr.getNamedItem("maximum_npc"), "1"));
Constructor<?> constructor = null;
try
{
if (!ai.equals("DefaultMaker"))
{
constructor = Scripts.getInstance().getClasses().get("npc.maker." + ai).getRawClass().getConstructors()[0];
}
}
catch (Exception e)
{
_log.warn("SpawnTable: can't find npcmaker ai: " + ai + " use DefaultMake. " + e);
}
DefaultMaker defaultMaker = null;
if (constructor != null)
{
try
{
defaultMaker = (DefaultMaker) constructor.newInstance(maximum_npc, name);
}
catch (Exception e)
{
_log.warn("SpawnTable: can't create npcmaker ai: " + ai + " " + e);
e.printStackTrace();
}
}
if (defaultMaker == null)
{
defaultMaker = new DefaultMaker(maximum_npc, name);
}
if (ai_params != null)
{
Class<?> dmClass = defaultMaker.getClass();
Field field;
for (String key_val : ai_params.split(";"))
{
if (!key_val.isEmpty())
{
String key = key_val.split("=")[0];
String val = key_val.split("=")[1];
key = key.replace("[", "").replace("]", "");
try
{
field = dmClass.getField(key);
}
catch (NoSuchFieldException e)
{
_log.warn("SpawnTable: maker " + ai + " has no public field: " + key);
continue;
}
try
{
if (field.getType().getSimpleName().equalsIgnoreCase("boolean"))
{
field.setBoolean(defaultMaker, Boolean.parseBoolean(val));
}
else if (field.getType().getSimpleName().equalsIgnoreCase("int"))
{
field.setInt(defaultMaker, Integer.valueOf(val));
}
else if (field.getType().getSimpleName().equalsIgnoreCase("long"))
{
field.setLong(defaultMaker, Long.valueOf(val));
}
else if (field.getType().getSimpleName().equalsIgnoreCase("double"))
{
field.setDouble(defaultMaker, Double.valueOf(val));
}
else if (field.getType().getSimpleName().equalsIgnoreCase("string"))
{
field.set(defaultMaker, val);
}
else if (field.getType().getSimpleName().equalsIgnoreCase("L2Skill"))
{
if (val.contains("-"))
{
field.set(defaultMaker, SkillTable.parseSkillInfo(val));
}
else
{
field.set(defaultMaker, SkillTable.getInstance().getInfo(Integer.parseInt(val)));
}
}
else
{
_log.warn("SpawnTable: maker " + ai + " field: " + key + " unsupported type: " + field.getType().getSimpleName());
}
}
catch (IllegalAccessException e)
{
_log.warn("SpawnTable: maker " + ai + " field: " + key + " illegal access: " + e);
}
}
}
}
if (!terr.isEmpty())
{
for (String terr_name : terr.split(";"))
{
if (!terr_name.isEmpty())
{
L2Territory territory = TerritoryTable.getInstance().getLocations().get(terr_name);
if (territory == null)
{
_log.warn("SpawnTable: maker " + ai + " territory: " + terr_name + " not found.");
}
else
{
defaultMaker.addTerritory(territory);
}
}
}
}
if (!ban_terr.isEmpty())
{
for (String terr_name : ban_terr.split(";"))
{
if (!terr_name.isEmpty())
{
L2Territory territory = TerritoryTable.getInstance().getLocations().get(terr_name);
if (territory == null)
{
_log.warn("SpawnTable: maker " + ai + " banned territory: " + terr_name + " not found.");
}
else
{
defaultMaker.addBannedTerritory(territory);
}
}
}
}
for (Node s = n.getFirstChild(); s != null; s = s.getNextSibling())
{
if ("npc".equalsIgnoreCase(s.getNodeName()))
{
attr = s.getAttributes();
int npcId = Integer.parseInt(getStringFromNode(attr.getNamedItem("id"), "0"));
int total = Integer.parseInt(getStringFromNode(attr.getNamedItem("total"), "1"));
int respawn = getSecFromString(getStringFromNode(attr.getNamedItem("respawn"), "no"));
int respawn_rand = getSecFromString(getStringFromNode(attr.getNamedItem("respawn_rand"), "0"));
int is_chase_pc = Integer.parseInt(getStringFromNode(attr.getNamedItem("is_chase_pc"), "0"));
String pos = getStringFromNode(attr.getNamedItem("pos"), "anywhere");
String npc_ai = getStringFromNode(attr.getNamedItem("ai"), null);
String npc_ai_params = getStringFromNode(attr.getNamedItem("ai_parameters"), null);
String privates = getStringFromNode(attr.getNamedItem("Privates"), null);
String dbname = getStringFromNode(attr.getNamedItem("dbname"), null);
String dbsaving = getStringFromNode(attr.getNamedItem("dbsaving"), "");
boolean rbSpawnSet = getStringFromNode(attr.getNamedItem("boss_respawn_set"), "no").equalsIgnoreCase("yes");
L2NpcTemplate template;
if ((npcId > 0) && ((template = NpcTable.getTemplate(npcId)) != null))
{
SpawnDefine spawnDefine = new SpawnDefine(template, total, respawn, respawn_rand, npc_ai, npc_ai_params, privates, dbname, dbsaving, defaultMaker, rbSpawnSet);
if (is_chase_pc > 0)
{
spawnDefine.setChasePc(is_chase_pc);
}
if (!"anywhere".equals(pos))
{
Matcher m = tp.matcher(pos);
while (m.find())
{
if (m.group(5) != null)
{
spawnDefine.addPosition(new Location(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3)), Integer.parseInt(m.group(4))), Integer.parseInt(m.group(5).replace("%", "")));
}
else
{
spawnDefine.addPosition(new Location(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3)), Integer.parseInt(m.group(4))), 100);
}
}
}
defaultMaker.addSpawnDefine(spawnDefine);
}
else
{
_log.warn("SpawnTable: npc template id: " + npcId + " not found!");
}
_npcMakers.put(name, defaultMaker);
}
}
}
}
}
}
catch (Exception e)
{
_log.warn("SpawnTable: can't load npcpos data " + e);
e.printStackTrace();
}
}
}
catch (Exception e)
{
_log.warn("SpawnTable: error while loading npcpos.xml " + e);
e.printStackTrace();
}
_log.info("SpawnTable: loaded " + _npcMakers.size() + " npc makers.");
for (DefaultMaker maker : _npcMakers.values())
{
maker.onStart();
}
}
public DefaultMaker getNpcMaker(String name)
{
return _npcMakers.get(name);
}
public RespawnData getRespawnData(String name)
{
return _respawnData.get(name);
}
private static String getStringFromNode(Node n, String def)
{
return n == null ? def : n.getNodeValue();
}
public static int getSecFromString(String time)
{
if (time.endsWith("sec"))
{
return Integer.parseInt(time.replace("sec", ""));
}
if (time.endsWith("min"))
{
return Integer.parseInt(time.replace("min", "")) * 60;
}
if (time.endsWith("hour"))
{
return Integer.parseInt(time.replace("hour", "")) * 3600;
}
if (time.equalsIgnoreCase("no"))
{
return 0;
}
return Integer.parseInt(time);
}
public L2Spawn getTemplate(int id)
{
return _spawntable.get(id);
}
public GArray<L2Spawn> getSpawnsByNpcId(int id)
{
return _spawnsByNpcId.get(id);
}
public void addNewSpawn(L2Spawn spawn, boolean storeInDb, Player editor)
{
if (Config.DONTLOADSPAWN)
{
return;
}
if (spawn.getId() == 0)
{
_highestId++;
spawn.setId(_highestId);
}
_spawntable.put(spawn.getId(), spawn);
GArray<L2Spawn> s = _spawnsByNpcId.get(spawn.getNpcId());
if (s == null)
{
s = new GArray<>();
_spawnsByNpcId.put(spawn.getId(), s);
}
s.add(spawn);
if (!storeInDb)
{
return;
}
Connection con = null;
PreparedStatement statement = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
if (editor == null)
{
statement = con.prepareStatement("INSERT INTO `spawnlist` (location,count,npc_templateid,locx,locy,locz,heading,respawn_delay,loc_id) values(?,?,?,?,?,?,?,?,?)");
}
else
{
statement = con.prepareStatement("INSERT INTO `spawnlist` (location,count,npc_templateid,locx,locy,locz,heading,respawn_delay,loc_id,last_editor) values(?,?,?,?,?,?,?,?,?,?)");
statement.setString(10, editor.getName());
}
statement.setString(1, "");// spawn.getLocation());
statement.setInt(2, spawn.getAmount());
statement.setInt(3, spawn.getNpcId());
statement.setInt(4, spawn.getLocx());
statement.setInt(5, spawn.getLocy());
statement.setInt(6, spawn.getLocz());
statement.setInt(7, spawn.getHeading());
statement.setInt(8, spawn.getRespawnDelay());
statement.setInt(9, spawn.getLocation());
statement.execute();
}
catch (Exception e1)
{
// problem with storing spawn
_log.warn("spawn couldnt be stored in db:" + e1);
}
finally
{
DbUtils.closeQuietly(con, statement);
}
}
public void deleteSpawn(L2Spawn spawn, boolean updateDb)
{
GArray<L2Spawn> s = _spawnsByNpcId.get(spawn.getNpcId());
if (s != null)
{
s.remove(spawn);
}
if ((_spawntable.remove(new Integer(spawn.getId())) != null) && updateDb)
{
Connection con = null;
PreparedStatement statement = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("DELETE FROM `spawnlist` WHERE `npc_templateid`=? AND `locx`=? AND `locy`=? AND `locz`=? AND `loc_id`=?");
statement.setInt(1, spawn.getNpcId());
statement.setInt(2, spawn.getLocx());
statement.setInt(3, spawn.getLocy());
statement.setInt(4, spawn.getLocz());
statement.setInt(5, spawn.getLocation());
statement.execute();
}
catch (Exception e1)
{
// problem with deleting spawn
_log.warn("spawn couldnt be deleted in db:" + e1);
}
finally
{
DbUtils.closeQuietly(con, statement);
}
}
}
public void startEventSpawn(String event)
{
if (_eventSpawns.containsKey(event))
{
for (L2Spawn spawn : _eventSpawns.get(event))
{
if (spawn.getNpcTemplate().type.equals("L2RaidBoss") || spawn.getNpcTemplate().type.equals("L2Boss") || spawn.getNpcTemplate().type.equals("QueenAnt"))
{
RaidBossSpawnManager.getInstance().addNewSpawn(spawn, false, null);
}
else
{
spawn.init();
}
}
}
else if (_npcMakers.containsKey(event))
{
DefaultMaker dm = _npcMakers.get(event);
dm.onScriptEvent(1001, 0, 0);
}
else
{
_log.warn("SpawnTable: no spawn list for event: " + event);
}
}
public GArray<L2Spawn> getEventSpawn(String event, Instance inst)
{
if (!_eventSpawns.containsKey(event))
{
_log.warn("SpawnTable: no spawn list for event: " + event);
return null;
}
GArray<L2Spawn> res = new GArray<>(_eventSpawns.get(event).size());
for (L2Spawn spawn : _eventSpawns.get(event))
{
L2Spawn instSpawn = spawn.copy();
if (inst != null)
{
instSpawn.setInstance(inst);
instSpawn.setReflection(inst.getReflection());
}
res.add(instSpawn);
}
return res;
}
public void stopEventSpawn(String event, boolean despawn)
{
if (_eventSpawns.containsKey(event))
{
for (L2Spawn spawn : _eventSpawns.get(event))
{
if (spawn.getNpcTemplate().type.equals("L2RaidBoss") || spawn.getNpcTemplate().type.equals("L2Boss") || spawn.getNpcTemplate().type.equals("QueenAnt"))
{
RaidBossSpawnManager.getInstance().deleteSpawn(spawn, false);
}
else
{
spawn.stopRespawn();
}
if (despawn)
{
spawn.despawnAll();
}
}
}
else if (_npcMakers.containsKey(event))
{
DefaultMaker dm = _npcMakers.get(event);
dm.despawn();
}
else
{
_log.warn("SpawnTable: no spawn list for event: " + event);
}
}
public L2GroupSpawn getEventGroupSpawn(String event, Instance inst)
{
if (!_eventSpawns.containsKey(event))
{
_log.warn("SpawnTable: no spawn list for event: " + event);
return null;
}
L2GroupSpawn group = new L2GroupSpawn();
group.setEventName(event);
if (inst != null)
{
group.setReflection(inst.getReflection());
group.setInstance(inst);
}
for (L2Spawn spawn : _eventSpawns.get(event))
{
group.addSpawn(spawn.copy());
}
return group;
}
public GArray<L2Spawn> getEventSpawns(String event)
{
return _eventSpawns.get(event);
}
// just wrapper
public void reloadAll()
{
L2World.deleteVisibleNpcSpawns();
for (DefaultMaker defaultMaker : _npcMakers.values())
{
defaultMaker.save();
defaultMaker.despawn();
defaultMaker.stopTimers();
}
DayNightSpawnManager.getInstance().cleanUp();
fillSpawnTable(false);
RaidBossSpawnManager.getInstance().reloadBosses();
}
public void reloadNpcMakers()
{
for (DefaultMaker defaultMaker : _npcMakers.values())
{
defaultMaker.save();
defaultMaker.despawn();
defaultMaker.stopTimers();
}
loadNpcMakers();
}
}
Немного подумав, я так понял что не должно быть нулевой координатыЯ и у себя этот код вижу) И дело скорее всего не в нем. Лучше посмотри логи геймсервера при загрузке, на строки, что я выше скинул. И вообще поправьте все ошибки и ворнинги если они будут
14:06:51.631 CommunityBoard: Capture Event loaded.
14:06:51.634 Loaded Event: Choose Your Destiny [state: deactivated]
14:06:51.636 Loaded Event: Christmas [state: deactivated]
Exception in thread "main" java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at ru.l2gw.extensions.scripts.Script.newInstance(Script.java:23)
at ru.l2gw.extensions.scripts.Scripts.loadAndInitHandlers(Scripts.java:199)
at ru.l2gw.extensions.scripts.Scripts.callOnLoad(Scripts.java:172)
at ru.l2gw.gameserver.tables.SpawnTable.fillSpawnTable(SpawnTable.java:212)
at ru.l2gw.gameserver.tables.SpawnTable.<init>(SpawnTable.java:64)
at ru.l2gw.gameserver.tables.SpawnTable.getInstance(SpawnTable.java:55)
at ru.l2gw.gameserver.GameServer.<init>(GameServer.java:225)
at ru.l2gw.gameserver.GameServer.main(GameServer.java:405)
Caused by: java.lang.NullPointerException
at ru.l2gw.gameserver.model.L2DropData.<init>(L2DropData.java:34)
at events.CofferofShadows.Coffer.<clinit>(Coffer.java:54)
... 14 more
Когда-то и у меня была такая проблема, мне ее решили )Как вы вообще с этим сервером работает - это же говно говна...
Или у меня руки из жопы.
Я его собрал - бд поставил, вручную все файлы с optional перекинул ибо он и на них ругается.
Я хз как вообще это запускать... Думал ща через дебаг посмотрю на скрипты - так он их даже не грузит ! На ивентах умирает и дальше не идет.
Возьмите другую сборку и все проблемы уйдут.Код:14:06:51.631 CommunityBoard: Capture Event loaded. 14:06:51.634 Loaded Event: Choose Your Destiny [state: deactivated] 14:06:51.636 Loaded Event: Christmas [state: deactivated] Exception in thread "main" java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at java.lang.Class.newInstance0(Class.java:372) at java.lang.Class.newInstance(Class.java:325) at ru.l2gw.extensions.scripts.Script.newInstance(Script.java:23) at ru.l2gw.extensions.scripts.Scripts.loadAndInitHandlers(Scripts.java:199) at ru.l2gw.extensions.scripts.Scripts.callOnLoad(Scripts.java:172) at ru.l2gw.gameserver.tables.SpawnTable.fillSpawnTable(SpawnTable.java:212) at ru.l2gw.gameserver.tables.SpawnTable.<init>(SpawnTable.java:64) at ru.l2gw.gameserver.tables.SpawnTable.getInstance(SpawnTable.java:55) at ru.l2gw.gameserver.GameServer.<init>(GameServer.java:225) at ru.l2gw.gameserver.GameServer.main(GameServer.java:405) Caused by: java.lang.NullPointerException at ru.l2gw.gameserver.model.L2DropData.<init>(L2DropData.java:34) at events.CofferofShadows.Coffer.<clinit>(Coffer.java:54) ... 14 more
Так есть еще от Гоглика шара этих же сурсов, только что то он там пилил. Может эти проблемы там решены. Глянь, тут в ресурсах должны быть залиты.Не на что не повлияло
Так есть еще от Гоглика шара этих же сурсов, только что то он там пилил. Может эти проблемы там решены. Глянь, тут в ресурсах должны быть залиты.