Всем привет.
Нужна помощь по правильному синтаксису АИ.
Суть следующая - хочу сделать ограничение для 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);
}
}
EventHandler SEE_CREATURE(creature, c0)
{
if(creature.is_pc == @TRUE && creature.level > level_check)
{
myself.Say("Твой уровень слишком большой для этого места!");
myself.InstantTeleport(-21458, 182564, -5712);
}
}
Вообще си_креатуре должен и без таймеров работать. Это просто триггер, когда креатура замечает другую креатуру.
Но есть и функции типа LookNeighbor(int range), которая, если не ошибаюсь, заставлят принудительно отработать see_creature (вот тут меня кто поумнее поправит, я ей пользовался пару раз всего и то 100 лет назад).
Но беда в том, делей у этой функции секунд 20-30 (внутри движка), так что спамить ей не получится. Но она есть.
Ну, а вообще - советую посмотреть просто как химеры и другие мобы на хб устроены. Они телепортируют тебя с хб если нет квеста. Логика там вроде аналогичная, по си_креатур.
Не могу понять, как сделать проверку на уровень именно любого чара, myself.sm - это проверка на уровень нпц, , если указывать просто myself , то при компиляции выдает ошибку. Пробовал так же Talker/Attacker - не работает, да и по логике не подходит, т.к. не тот хэндл - с нпц не разговаривают и не атакуют его. По идее, нужно оказывать здесь любого creature, но как его объявить и задетектить - не знаю.
Можно с этого места поподробнее, как обходят?)
P.S. Всем огромное спасибо за помощь, сделал, вроде работает. Правда нпц нужно обязательно указывать типа Boss, как подсказал Blitzkrieg. Пока поставил Рейдбосса, поднял ему статы и убрал дроп). Хоть и костыль, дальше буду пробовать сделать его невидимым.
Ну, а вообще - советую посмотреть просто как химеры и другие мобы на хб устроены. Они телепортируют тебя с хб если нет квеста. Логика там вроде аналогичная, по си_креатур.
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.