Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
AvanpostManager.java
#1
Доброе время суток. Сделал аванпосты. Все хорошо компилится, но вот только я запускаю гс, самая первая ошибка появляется такая:
Ошибка
Но такой нпц есть и даже можно его самому заспавнить.
Дальше идет загрузка гс и появляется куча ошибок:
далее
В итоге гс не запускается.
Помогите пожалуйста, я думаю ошибка в коде, подскажите где именно, вот код:
[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]
Ответ
#2
up 10101010
Ответ
#3
L2J Написал:up 10101010

Он и не будет у вас находить Template этого NPC, т.к. они еще не спарсились. В GameServer.java перенесите строку с инициализацией аванпоста, хотя бы после парса NPC, а лучше вообще в самый низ.
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
Ответ
#4
WoWan-SM Написал:Он и не будет у вас находить Template этого NPC, т.к. они еще не спарсились. В GameServer.java перенесите строку с инициализацией аванпоста, хотя бы после парса NPC, а лучше вообще в самый низ.

Лол. Спасибо большое, не знал что имеет разницу где расположена инициализация Smile
Ответ
#5
L2J Написал:Лол. Спасибо большое, не знал что имеет разницу где расположена инициализация Smile

Это почти как сначала надеть штаны, а потом только трусы под штаны :redlol:
[Изображение: 1852855861.png]
Ответ
#6
GOODPower Написал:Это почти как сначала надеть штаны, а потом только трусы под штаны :redlol:
норм сравнение, улыбнуло :redlol:
Ответ
#7
Подскажите пожалуйста, когда в базе меняю factionId у поста, не меняется ничего, 1 или 2 разницы нет, спавнятся гварды 2 фракции, откуда он взял это значение?
Ответ
#8
OffTop
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
Ответ
#9
Подскажите еще по этой теме, почему при рестарте все посты спавнятся с factionId = 0?
Как сделать чтобы они спавнились которые в базе прописаны?
Ответ
#10
[Изображение: 9181o4iw2pnhqwas76i6is8v2.jpg]

Big Grin
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  java прогер Light87 0 1,958 01-18-2021, 12:15 AM
Последний пост: Light87
  Помогите переписать скрипт с Python на Java Virrilis3 0 1,500 03-29-2018, 10:55 PM
Последний пост: Virrilis3
  Ищу исполнителя [Java] Abstragetic 3 2,190 02-05-2017, 03:01 AM
Последний пост: Deazer
  альт+G java HiredKiller 10 3,520 12-15-2015, 09:40 AM
Последний пост: HiredKiller
  Servise Manager Lucera 2 Java 8. DiName 8 2,780 12-07-2015, 07:43 AM
Последний пост: Deazer
  Дюп через Kamaloka.java dantest 7 2,385 09-14-2015, 09:01 PM
Последний пост: dantest
  GameServer.java dantest 10 3,211 09-11-2015, 07:23 PM
Последний пост: Zeratyl
  время для java Valent 7 2,292 08-15-2015, 10:13 PM
Последний пост: Bacek
  Ошибки в GS. Exception in thread "AISTPool-8" java.lang.StackOverflowError vokforever 3 2,209 07-27-2015, 05:52 PM
Последний пост: n3k0nation
  Java 8 Laguerro 10 4,022 03-21-2015, 03:26 PM
Последний пост: Klay

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)