Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Spawn и Unspawn мобов
#11
shocked Написал:
offtop

Я не знаю, что он дальше с ним делать будет, в предоставленном им коде он из списка удалял элементы, так что скорее всего нужен.
[Изображение: l2nextgen.gif]
Ответ
#12
Благодарю вас!

Вроде бы со всем разобрался, но вот только наткнулся на 1 проблему:

НПЦ заспаунены, запущен таймер ожидания до их удаления 60 сек.

метод спауна:

Код:
    protected void spawnMonsters(int respawnDelay)
    {
        int[][] _npcSpawns = null;
        
        _npcSpawns = MOBS_IN_FIRST;
        
        for(int[] npcSpawn2 : _npcSpawns)
        {
            FestivalSpawn currSpawn = new FestivalSpawn(npcSpawn2);
            
            L2NpcTemplate npcTemplate = NpcTable.getInstance().getTemplate(currSpawn._npcId);
            try
            {
                L2Spawn npcSpawn = new L2Spawn(npcTemplate);

                npcSpawn.setLocx(currSpawn._x); npcSpawn.setLocy(currSpawn._y); npcSpawn.setLocz(currSpawn._z);
                npcSpawn.setHeading(Rnd.nextInt(65536));
                npcSpawn.setAmount(1);
                npcSpawn.setRespawnDelay(respawnDelay);
                npcSpawn.startRespawn();
                
                L2NpcInstance festivalMob = (L2NpcInstance) npcSpawn.doSpawn();
                SpawnTable.getInstance().addNewSpawn(npcSpawn, false);
                [B]_npcInsts.add(festivalMob);[/B]
            }
            catch(Exception e)
            {
                if(Config.ENABLE_ALL_EXCEPTIONS)
                    e.printStackTrace();
            }
        currSpawn = null;
        }
    }

В методе добавляет всех поставленных нпц в список _npcInsts, из которого потом мне и надо брать инфу о заспауненых ранее мобах.

Список работает нормально, т.е. очищается и заполняется как надо. Но тут другая трабла:

когда использую анспаун:

Код:
    protected void unspawnMobs()
    {
        if(_npcInsts != null)
        {
            for(L2NpcInstance monsterInst : _npcInsts)
            {
                if(monsterInst != null)
                    {
                    monsterInst.deleteMe();
                    }
            }
            _npcInsts.clear();
        }
    }

Мобы удаляются только в том случае, если их ниразу не убивали и они не респались.
Т.е. если убить хоть 1 моба - то он появится через время респа, даже если метод unspawnMobs() не влияет на это никак. Он удаляет только тех, кого ниразу не убивали. В итоге на одном месте будет два моба.

Как отловить мобов, которые прошли через респаун? Хотя я чуть недопонимаю, если они есть в списке, почему их не удаляет??=(
Ответ
#13
halaymoon Написал:Хотя я чуть недопонимаю, если они есть в списке, почему их не удаляет??=(

Потому что после addSpawn() мы получаем ссылку на объект и храним эту ссылку в List. После респавна этот нпц объект этого же типа, но с другой ссылкой, которой, понятное дело, у тебя нету в списке.

Надеюсь правильно понял вопрос.
Ответ
#14
Кажется понял теперь))
А как получать ссылки на мобов после их респавна?
Ответ
#15
halaymoon Написал:Кажется понял теперь))
А как получать ссылки на мобов после их респавна?

[src=java]
private final List<L2Spawn> _npcSpawns = new ArrayList<L2Spawn>();

protected void spawnMonsters(int respawnDelay)
{
for(int[] npcSpawn2 : MOBS_IN_FIRST)
{
FestivalSpawn currSpawn = new FestivalSpawn(npcSpawn2);

L2NpcTemplate npcTemplate = NpcTable.getInstance().getTemplate(currSpawn._npcId);
try
{
L2Spawn npcSpawn = new L2Spawn(npcTemplate);

npcSpawn.setLocx(currSpawn._x);
npcSpawn.setLocy(currSpawn._y);
npcSpawn.setLocz(currSpawn._z);
npcSpawn.setHeading(Rnd.nextInt(65536));
npcSpawn.setAmount(1);
npcSpawn.setRespawnDelay(respawnDelay);
npcSpawn.startRespawn();

L2NpcInstance festivalMob = (L2NpcInstance) npcSpawn.doSpawn();
SpawnTable.getInstance().addNewSpawn(npcSpawn, false);
_npcSpawns.add(npcSpawn);
}
catch(Exception e)
{
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
}
currSpawn = null;
}
}

protected void unspawnMobs()
{
for(L2Spawn spawn : _npcSpawns)
{
if(spawn != null)
{
// spawn.getAllSpawned(); можно получить список всех заспауненых нпс
spawn.despawnAll(); // удаляем всех заспауненых
}
}
_npcSpawns.clear();
}
[/src]
[Изображение: l2nextgen.gif]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Нет агра мобов после респа Kagaku 0 895 03-30-2020, 06:54 PM
Последний пост: Kagaku
  Хп мобов silok 6 2,367 03-04-2018, 08:08 AM
Последний пост: silok
  Пропадание мобов Map 7 2,057 11-09-2017, 04:35 PM
Последний пост: Map
  Добавление РБ и Мобов virusoflove 1 1,571 01-23-2017, 08:52 PM
Последний пост: virusoflove
  Spawn в клиенте Andro 3 1,216 11-21-2015, 08:33 PM
Последний пост: Donatte
  Random spawn ELFMAN 3 1,675 10-31-2015, 01:13 PM
Последний пост: Gaikotsu
  Spawn в Reflection'е . Как сделать? BorlandC 1 1,458 07-25-2015, 06:09 PM
Последний пост: Gaikotsu
  прыжки мобов/игроков KoKoS 4 1,583 04-19-2015, 02:48 PM
Последний пост: KoKoS
  Spawn [Help!] Snowball1 7 2,086 11-01-2014, 09:56 PM
Последний пост: Snowball1
  Длина имен мобов gre4ka 0 880 03-16-2014, 12:54 PM
Последний пост: gre4ka

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


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