04-18-2014, 12:22 PM
Доброе время суток. Сделал аванпосты. Все хорошо компилится, но вот только я запускаю гс, самая первая ошибка появляется такая:
Но такой нпц есть и даже можно его самому заспавнить.
Дальше идет загрузка гс и появляется куча ошибок:
В итоге гс не запускается.
Помогите пожалуйста, я думаю ошибка в коде, подскажите где именно, вот код:
[SRC="java"]package l2p.gameserver.instancemanager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import gnu.trove.TIntObjectHashMap;
import l2p.commons.dbutils.DbUtils;
import l2p.commons.geometry.Circle;
import l2p.commons.threading.RunnableImpl;
import l2p.commons.util.Rnd;
import l2p.gameserver.Announcements;
import l2p.gameserver.Config;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.ai.CtrlEvent;
import l2p.gameserver.data.xml.holder.NpcHolder;
import l2p.gameserver.database.DatabaseFactory;
import l2p.gameserver.database.mysql;
import l2p.gameserver.geodata.GeoEngine;
import l2p.gameserver.idfactory.IdFactory;
import l2p.gameserver.model.*;
import l2p.gameserver.model.instances.AvanpostFlagInstance;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.model.pledge.Clan;
import l2p.gameserver.templates.npc.NpcTemplate;
import l2p.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AvanpostManager
{
private final Logger _log = LoggerFactory.getLogger(AvanpostManager.class);
private static AvanpostManager _instance;
private TIntObjectHashMap<Avanpost> _avanposts;
public static AvanpostManager getInstance()
{
return _instance == null ? (_instance = new AvanpostManager()) : _instance;
}
public AvanpostManager()
{
_avanposts = new TIntObjectHashMap<Avanpost>();
_log.info("[GVE]: Avanpost spawn...");
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT * FROM gve_avanposts");
rset = statement.executeQuery();
while (rset.next())
{
// создаем флаг
SimpleSpawner spawn = new SimpleSpawner(rset.getInt("npcId"));
spawn.setAmount(1);
spawn.setLoc(new Location(rset.getInt("x"), rset.getInt("y"), rset.getInt("z")));
spawn.setRespawnDelay(240);
Avanpost a = new Avanpost(rset.getInt("id"), spawn, rset.getString("name"), rset.getBoolean("capturable"), getFactionId(rset.getInt("factionId")));
_avanposts.put(rset.getInt("id"), a);
_log.info("[GVE]: Avanpost ID: " + a.ID + ", Faction: " + a.getFactionId());
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
}
public int factionId = 0;
public int getFactionId(int factionId)
{
return this.factionId;
}
public void setFactionId(int i)
{
factionId=i;
}
public Avanpost getAvanpostById(int id)
{
return _avanposts.get(id);
}
public Avanpost[] getAvanposts()
{
return _avanposts.getValues(new Avanpost[]{});
}
public class Avanpost
{
private String _name;
public final int ID;
private boolean _capturable;
public final int _factionId;
private SimpleSpawner _baseSpawn;
// guards
private List<SimpleSpawner> _guards;
public Avanpost(int id, SimpleSpawner spawn, String name, boolean canCapture, int factionId)
{
ID = id;
_factionId = factionId;
_name = name;
_capturable = canCapture;
_baseSpawn = spawn;
_baseSpawn.startRespawn();
for(int i = 0; i < _baseSpawn.getAmount(); i++)
{
AvanpostFlagInstance flag = (AvanpostFlagInstance)_baseSpawn.doSpawn(true);
flag.setAvanpost(this);
flag.setFactionId(factionId);
flag.setTitle("Аванпост " + getName());
}
ThreadPoolManager.getInstance().schedule(new Runnable()
{
@Override
public void run()
{
// спавним охрану
spawnGuards();
}
}, 1000);
}
public void spawnGuards()
{
// уже есть гварды
if(_guards != null)
{
for(SimpleSpawner spawn : _guards)
{
spawn.stopRespawn();
for(NpcInstance npc : spawn.getAllSpawned())
{
npc.deleteMe();
}
}
_guards = null;
}
_guards = new ArrayList<SimpleSpawner>(4);
int zMin = GeoEngine.getHeight(_baseSpawn.getLoc(), _baseSpawn.getReflection().getGeoIndex()) - 50;
int zMax = zMin + 150;
SimpleSpawner fighter = new SimpleSpawner(factionId == 1 ? 36609 : 36611);
fighter.setAmount(3);
fighter.setTerritory(new Territory().add(new Circle(_baseSpawn.getLoc(), 400).setZmin(zMin).setZmax(zMax)));
fighter.setRespawnTime(0);
fighter.setRespawnDelay(60);
fighter.startRespawn();
fighter.init();
_guards.add(fighter);
SimpleSpawner arch = new SimpleSpawner(factionId == 1 ? 36608 : 36610);
arch.setAmount(3);
arch.setTerritory(new Territory().add(new Circle(_baseSpawn.getLoc(), 400).setZmin(zMin).setZmax(zMax)));
arch.setRespawnTime(0);
arch.setRespawnDelay(60);
arch.startRespawn();
arch.init();
_guards.add(arch);
}
public String getName()
{
return _name;
}
public boolean isCapturable()
{
return _capturable;
}
public Location getLocation()
{
return _baseSpawn.getLoc();
}
public int factionId = 0;
public int getFactionId()
{
return this.factionId;
}
public void setFactionId(int i)
{
factionId=i;
}
public boolean canTeleport(Player player)
{
return getFactionId() == player.getFactionId();
}
private long _nextAttackNotify;
public void onEvtAttacked(Creature attacker, int damage)
{
long temp = System.currentTimeMillis();
if(_nextAttackNotify <= temp)
{
_nextAttackNotify = temp + (60 * 2 * 1000);
Announcements.getInstance().announceToAll("Аванпост " + getName() + " был атакован фракцией " + attacker.getFactionId());
}
for (NpcInstance flag : _baseSpawn.getAllSpawned())
{
for (NpcInstance npc : flag.getAroundNpc(2500, 200))
{
if(npc.isDead())
continue;
if(npc.getFactionId() == flag.getFactionId())
{
npc.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, attacker, damage);
}
}
}
}
public void onEvtDead(Creature killer)
{
Player player = killer.getPlayer();
if(player == null)
return;
{
StringBuilder sb = new StringBuilder();
sb.append("Аванпост ").append(getName()).append(" был ");
if(_capturable)
{
sb.append("захвачен");
}
else
{
sb.append("уничтожен");
}
Clan clan = player.getClan();
if(clan != null)
{
sb.append(" кланом ").append(clan.getName()).append(".");
}
else
{
sb.append(" игроком ").append(player.getName()).append(".");
}
if(!_capturable)
{
sb.append(" Начаты восстановительные работы!");
}
Announcements.getInstance().announceToAll(sb.toString());
}
if(_capturable)
{
factionId = player.getFactionId();
mysql.set("UPDATE `gve_avanposts` SET `factionId` = " + factionId + " WHERE `id` = " + ID);
ThreadPoolManager.getInstance().schedule(new Runnable()
{
@Override
public void run()
{
// спавним охрану
spawnGuards();
}
}, 2000);
}
}
}
}
[/SRC]
Дальше идет загрузка гс и появляется куча ошибок:
Помогите пожалуйста, я думаю ошибка в коде, подскажите где именно, вот код:
[SRC="java"]package l2p.gameserver.instancemanager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import gnu.trove.TIntObjectHashMap;
import l2p.commons.dbutils.DbUtils;
import l2p.commons.geometry.Circle;
import l2p.commons.threading.RunnableImpl;
import l2p.commons.util.Rnd;
import l2p.gameserver.Announcements;
import l2p.gameserver.Config;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.ai.CtrlEvent;
import l2p.gameserver.data.xml.holder.NpcHolder;
import l2p.gameserver.database.DatabaseFactory;
import l2p.gameserver.database.mysql;
import l2p.gameserver.geodata.GeoEngine;
import l2p.gameserver.idfactory.IdFactory;
import l2p.gameserver.model.*;
import l2p.gameserver.model.instances.AvanpostFlagInstance;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.model.pledge.Clan;
import l2p.gameserver.templates.npc.NpcTemplate;
import l2p.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AvanpostManager
{
private final Logger _log = LoggerFactory.getLogger(AvanpostManager.class);
private static AvanpostManager _instance;
private TIntObjectHashMap<Avanpost> _avanposts;
public static AvanpostManager getInstance()
{
return _instance == null ? (_instance = new AvanpostManager()) : _instance;
}
public AvanpostManager()
{
_avanposts = new TIntObjectHashMap<Avanpost>();
_log.info("[GVE]: Avanpost spawn...");
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT * FROM gve_avanposts");
rset = statement.executeQuery();
while (rset.next())
{
// создаем флаг
SimpleSpawner spawn = new SimpleSpawner(rset.getInt("npcId"));
spawn.setAmount(1);
spawn.setLoc(new Location(rset.getInt("x"), rset.getInt("y"), rset.getInt("z")));
spawn.setRespawnDelay(240);
Avanpost a = new Avanpost(rset.getInt("id"), spawn, rset.getString("name"), rset.getBoolean("capturable"), getFactionId(rset.getInt("factionId")));
_avanposts.put(rset.getInt("id"), a);
_log.info("[GVE]: Avanpost ID: " + a.ID + ", Faction: " + a.getFactionId());
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
}
public int factionId = 0;
public int getFactionId(int factionId)
{
return this.factionId;
}
public void setFactionId(int i)
{
factionId=i;
}
public Avanpost getAvanpostById(int id)
{
return _avanposts.get(id);
}
public Avanpost[] getAvanposts()
{
return _avanposts.getValues(new Avanpost[]{});
}
public class Avanpost
{
private String _name;
public final int ID;
private boolean _capturable;
public final int _factionId;
private SimpleSpawner _baseSpawn;
// guards
private List<SimpleSpawner> _guards;
public Avanpost(int id, SimpleSpawner spawn, String name, boolean canCapture, int factionId)
{
ID = id;
_factionId = factionId;
_name = name;
_capturable = canCapture;
_baseSpawn = spawn;
_baseSpawn.startRespawn();
for(int i = 0; i < _baseSpawn.getAmount(); i++)
{
AvanpostFlagInstance flag = (AvanpostFlagInstance)_baseSpawn.doSpawn(true);
flag.setAvanpost(this);
flag.setFactionId(factionId);
flag.setTitle("Аванпост " + getName());
}
ThreadPoolManager.getInstance().schedule(new Runnable()
{
@Override
public void run()
{
// спавним охрану
spawnGuards();
}
}, 1000);
}
public void spawnGuards()
{
// уже есть гварды
if(_guards != null)
{
for(SimpleSpawner spawn : _guards)
{
spawn.stopRespawn();
for(NpcInstance npc : spawn.getAllSpawned())
{
npc.deleteMe();
}
}
_guards = null;
}
_guards = new ArrayList<SimpleSpawner>(4);
int zMin = GeoEngine.getHeight(_baseSpawn.getLoc(), _baseSpawn.getReflection().getGeoIndex()) - 50;
int zMax = zMin + 150;
SimpleSpawner fighter = new SimpleSpawner(factionId == 1 ? 36609 : 36611);
fighter.setAmount(3);
fighter.setTerritory(new Territory().add(new Circle(_baseSpawn.getLoc(), 400).setZmin(zMin).setZmax(zMax)));
fighter.setRespawnTime(0);
fighter.setRespawnDelay(60);
fighter.startRespawn();
fighter.init();
_guards.add(fighter);
SimpleSpawner arch = new SimpleSpawner(factionId == 1 ? 36608 : 36610);
arch.setAmount(3);
arch.setTerritory(new Territory().add(new Circle(_baseSpawn.getLoc(), 400).setZmin(zMin).setZmax(zMax)));
arch.setRespawnTime(0);
arch.setRespawnDelay(60);
arch.startRespawn();
arch.init();
_guards.add(arch);
}
public String getName()
{
return _name;
}
public boolean isCapturable()
{
return _capturable;
}
public Location getLocation()
{
return _baseSpawn.getLoc();
}
public int factionId = 0;
public int getFactionId()
{
return this.factionId;
}
public void setFactionId(int i)
{
factionId=i;
}
public boolean canTeleport(Player player)
{
return getFactionId() == player.getFactionId();
}
private long _nextAttackNotify;
public void onEvtAttacked(Creature attacker, int damage)
{
long temp = System.currentTimeMillis();
if(_nextAttackNotify <= temp)
{
_nextAttackNotify = temp + (60 * 2 * 1000);
Announcements.getInstance().announceToAll("Аванпост " + getName() + " был атакован фракцией " + attacker.getFactionId());
}
for (NpcInstance flag : _baseSpawn.getAllSpawned())
{
for (NpcInstance npc : flag.getAroundNpc(2500, 200))
{
if(npc.isDead())
continue;
if(npc.getFactionId() == flag.getFactionId())
{
npc.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, attacker, damage);
}
}
}
}
public void onEvtDead(Creature killer)
{
Player player = killer.getPlayer();
if(player == null)
return;
{
StringBuilder sb = new StringBuilder();
sb.append("Аванпост ").append(getName()).append(" был ");
if(_capturable)
{
sb.append("захвачен");
}
else
{
sb.append("уничтожен");
}
Clan clan = player.getClan();
if(clan != null)
{
sb.append(" кланом ").append(clan.getName()).append(".");
}
else
{
sb.append(" игроком ").append(player.getName()).append(".");
}
if(!_capturable)
{
sb.append(" Начаты восстановительные работы!");
}
Announcements.getInstance().announceToAll(sb.toString());
}
if(_capturable)
{
factionId = player.getFactionId();
mysql.set("UPDATE `gve_avanposts` SET `factionId` = " + factionId + " WHERE `id` = " + ID);
ThreadPoolManager.getInstance().schedule(new Runnable()
{
@Override
public void run()
{
// спавним охрану
spawnGuards();
}
}, 2000);
}
}
}
}
[/SRC]