AI телепортер

Spectre7TS

Знаменитый
Участник
Сообщения
33
Розыгрыши
0
Репутация
0
Реакции
11
Баллы
1 285
Всем привет.
Нужна помощь по правильному синтаксису АИ.
Суть следующая - хочу сделать ограничение для Ant Queen по уровню, чтобы чаров выше 45 уровня выкидывало наружу, и они не сливали мелких твинков.

В голову пока пришла такая идея - сделать спавнмейкер невидимого нпц, которые каждые 10 сек будет делать проверку в цикле лвл, в npсpos прописать его АИ.

Код:
class queen_Level_controller_tp : default_npc
{
parameter:
        int    say_time = 10000;
        int    level_check = 45;
   

handler:
EventHandler CREATED()
    {
        myself.AddTimerEx(1001,say_time);
    }

    EventHandler TIMER_FIRED_EX(timer_id, myself)
    {
   
       
        if( timer_id == 1001 )
      
        {
           
            {
           
            if(myself.sm.level > level_check )
                {
                myself.Say("Твой уровень слишком большой для этого места!");
                myself.InstantTeleportInMyTerritory(-21458, 182564, -5712, 200);
                }
            else
            super;      
            }
          
            myself.AddTimerEx(1001,say_time);
        }
        super;
   
   
    }
}

Слепил вот такой вот быдло-код по примеру из разных классов декомпила ai.obj, телепортирует чара из зоны нпц спавн-мейкера , но

Не могу понять, как сделать проверку на уровень именно любого чара, myself.sm - это проверка на уровень нпц, , если указывать просто myself , то при компиляции выдает ошибку. Пробовал так же Talker/Attacker - не работает, да и по логике не подходит, т.к. не тот хэндл - с нпц не разговаривают и не атакуют его. По идее, нужно оказывать здесь любого creature, но как его объявить и задетектить - не знаю.

Буду рад любой помощи.
 

Код:
EventHandler SEE_CREATURE(creature, c0)
{  
    if(creature.is_pc == @TRUE && creature.level > level_check)
    {    
        myself.Say("Твой уровень слишком большой для этого места!");
        myself.InstantTeleport(-21458, 182564, -5712);      
    }
}

ну и agro_range ставишь побольше
 
Код:
EventHandler SEE_CREATURE(creature, c0)
{ 
    if(creature.is_pc == @TRUE && creature.level > level_check)
    {   
        myself.Say("Твой уровень слишком большой для этого места!");
        myself.InstantTeleport(-21458, 182564, -5712);     
    }
}

ну и agro_range ставишь побольше
Спасибо, теперь осталось еще понять, как воткнуть это в TIMER_FIRED_EX, чтобы обрабатывало по таймеру....
 
Спасибо, теперь осталось еще понять, как воткнуть это в TIMER_FIRED_EX, чтобы обрабатывало по таймеру....
Just use it without timer_fired_ex

But if you insist, a solution is to create another npc that spawns the teleporter npc every x seconds, uses see_creature code and then despawns

Also keep in mind that agro_range works only if the npc is declared as boss in npcdata (not citizen etc)
 
И на лайве это как же на изи обходится, ты бы видел, с критами в шаут, админ лох :loltt0:
Там что-то по серьезнее надо.
 
Спасибо, теперь осталось еще понять, как воткнуть это в TIMER_FIRED_EX, чтобы обрабатывало по таймеру....
Вообще си_креатуре должен и без таймеров работать. Это просто триггер, когда креатура замечает другую креатуру.
Но есть и функции типа LookNeighbor(int range), которая, если не ошибаюсь, заставлят принудительно отработать see_creature (вот тут меня кто поумнее поправит, я ей пользовался пару раз всего и то 100 лет назад).

Но беда в том, делей у этой функции секунд 20-30 (внутри движка), так что спамить ей не получится. Но она есть.

C#:
EventHandler TIMER_FIRED_EX( timer_id )
    {
        if ( timer_id == 2001 )
        {
            myself.LookNeighbor( 1500 );
            myself.AddTimerEx( 2001, 20000 );
        }
    }
Ну, а вообще - советую посмотреть просто как химеры и другие мобы на хб устроены. Они телепортируют тебя с хб если нет квеста. Логика там вроде аналогичная, по си_креатур.

Не могу понять, как сделать проверку на уровень именно любого чара, myself.sm - это проверка на уровень нпц, , если указывать просто myself , то при компиляции выдает ошибку. Пробовал так же Talker/Attacker - не работает, да и по логике не подходит, т.к. не тот хэндл - с нпц не разговаривают и не атакуют его. По идее, нужно оказывать здесь любого creature, но как его объявить и задетектить - не знаю.
Два разных объекта.
Майселф.см - это шардед креатур. К примеру хм, мп, координаты - лежат именно в sm. Левел - лежит просто в myself.
 
Последнее редактирование:
И на лайве это как же на изи обходится, ты бы видел, с критами в шаут, админ лох :loltt0:
Там что-то по серьезнее надо.
Можно с этого места поподробнее, как обходят?)
P.S. Всем огромное спасибо за помощь, сделал, вроде работает. Правда нпц нужно обязательно указывать типа Boss, как подсказал Blitzkrieg. Пока поставил Рейдбосса, поднял ему статы и убрал дроп). Хоть и костыль, дальше буду пробовать сделать его невидимым.
 
Don't forget some1 can summon a player there.. you should protect the zone also
 
Ну, а вообще - советую посмотреть просто как химеры и другие мобы на хб устроены. Они телепортируют тебя с хб если нет квеста. Логика там вроде аналогичная, по си_креатур.
Also the mobs from the Seven Signs system. If you are not part of a seven signs cabal, the mobs will teleport you out of the zone as soon as they see you.
 
Назад
Сверху Снизу