Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Spawn и Unspawn мобов
#1
Есть небольшой квест, в котором нужно заспаунить много мобов, запустить таймер (на час), в течении часа - эти мобы ведут себя как любые другие (т.е. ресаются по своему времени респауна), после того как час истек - нужно удалить из спаунлиста мобов.

Начал искать методы, нашел:

Код:
List<L2NpcInstance> MobsArrayOne = new ArrayList<L2NpcInstance>();
...
MobsArrayOne.add(addSpawn(21336, 172159, 20148, -3331, 9074, false, 0));
MobsArrayOne.add(addSpawn(21336, 172333, 20148, -3331, 9074, false, 0));
MobsArrayOne.add(addSpawn(21336, 153134, 20148, -3331, 9074, false, 0));
...
после чего пытался сделать так:

Код:
L2NpcInstance npc;
MobsArrayOne.deleteMe();
MobsArrayOne.remove(npc);

но что-то не хочет(
подскажите плз что я делаю не так? существуют ли более простые методы для спауна целой "кучи" и потом её аккуратного удаления?
Ответ
#2
а что конкретно у вас не выходит?

[src=java]
// удаляем нпс из списка
for(L2NpcInstance npc : MobsArrayOne)
npc.deleteMe();

// чистим список
MobsArrayOne.clear();
[/src]
[Изображение: l2nextgen.gif]
Ответ
#3
Не список, а сам спаунлист*
Как заспаунили в мир, так и удалить из таблицы вообще )
Ответ
#4
Так у вас вверху спавн в мир есть,
Цитата:addSpawn(21336, 172159, 20148, -3331, 9074, false, 0)
а bloodshed написал очистку
Ответ
#5
Код:
ArrayList<L2Npc> spawnedNpcs = new ArrayList<L2Npc>(){{
        add(addSpawn(21336, 172159, 20148, -3331, 9074, false, 0));
        add(addSpawn(21336, 172159, 20148, -3331, 9074, false, 0));
        add(addSpawn(21336, 172159, 20148, -3331, 9074, false, 0));
    }};

    private void clearList(ArrayList<L2Npc> arrayList){
        for (L2Npc npc : arrayList){
            npc.decayMe();
        }
    }

    private void spawnList(ArrayList<L2Npc> arrayList){
        for (L2Npc npc : arrayList){
            npc.spawnMe();
        }
    }

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

Хотя поидее уже при создании объекта нпц заспавнится, т.е. не нужно заполнять лист в начале кода. Поэтому лучше, наверное, заспавнить когда надо и при этом уже заносить все это в лист. а потом уже удалять, после формирования листа.
Ответ
#6
Биг спс!!!

А как можно сделать по аналогу addSpawn, только если речь идет не о квестах, как я понимаю addSpawn(...) работает только в АИ, а просто в классе не хочет=/, такого метода в L2Npc нету(
Ответ
#7
halaymoon Написал:Биг спс!!!

А как можно сделать по аналогу addSpawn, только если речь идет не о квестах, как я понимаю addSpawn(...) работает только в АИ, а просто в классе не хочет=/, такого метода в L2Npc нету(

Разбирайтесь в структуре эмулятора. Никто за вас все писать не будет.
Ответ
#8
Вроде бы разобрался, только вот маленькая проблемка: Не хочет удалять мобов из спауна, собсна то о чем я говорил, это и не получилось в самом начале((

Код:
    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);
                _npcInsts.add(festivalMob);
            }
            catch(Exception e)
            {
                if(Config.ENABLE_ALL_EXCEPTIONS)
                    e.printStackTrace();
            }
        currSpawn = null;
        }
    }
    
    protected void unspawnMobs()
    {
        if(_npcInsts != null)
        {
            for(L2NpcInstance monsterInst : _npcInsts)
                if(monsterInst != null)
                {
                    monsterInst.deleteMe();
                }
        }
    }

Вот методы. Спаунит - все нормально, когда вызываю еще раз - спавнит еще . Но вот вызов unspawnMobs() не удаляет предыдущих и вообще ничего не делает =(

Вот лист, куда заносятся нпцшки:

Код:
private List<L2NpcInstance> _npcInsts;

Вот сам список мобов:

Код:
protected static final int[][] MOBS_IN_FIRST =
    {
            {172159, 20148, -3331, 0, 21336},
            {172181, 20494, -3331, 0, 21336},
            {171721, 20311, -3331, 0, 21336}
    };

Что здесь может быть не так?(((
Ответ
#9
[src=java]
for(L2NpcInstance monsterInst : _npcInsts)
if(monsterInst != null)
{
L2Spawn spawn = monsterInst.getSpawn();
if(spawn != null)
spawn.despawnAll();
}
[/src]
так попробуйте
[Изображение: l2nextgen.gif]
Ответ
#10
bloodshed Написал:а что конкретно у вас не выходит?

[src=java]
// удаляем нпс из списка
for(L2NpcInstance npc : MobsArrayOne)
npc.deleteMe();

// чистим список
MobsArrayOne.clear();
[/src]
offtop
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Нет агра мобов после респа 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,674 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,085 11-01-2014, 09:56 PM
Последний пост: Snowball1
  Длина имен мобов gre4ka 0 880 03-16-2014, 12:54 PM
Последний пост: gre4ka

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


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