Если ты хочешь создавать событие только для юнитов, у которых есть нужная абилка, делай это отдельным триггером отслеживая вход юнита на карту, а не в инициализации этого триггера.
Но все равно это все ерунда, просто поменяй назад как было, не надо ломать то что работает. Эти события не нужно оптимизировать.
function InitTrig_SPELL_ACT takes nothing returns nothing
local trigger t = CreateTrigger()
local unit u = GetTriggerUnit() // Вот это вот что такое?
call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_SPELL_FINISH) // на кого у тебя событие создается? юнит не существует, события на него не создастся, конечно отслеживаться не будет
call TriggerAddAction(t, function SPELL_ACT )
set t = null
set u = null
endfunction
Надо все делать заново и разбирать что именно ты хочешь достичь этим триггером. Почему цикл выполняется именно для всех игроков с номером не больше номера владельца несуществующего владельца юнита вызывающего инициализацию конвертнутого ГУИ триггера?
exitwhen i == GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
Возможно фатал выдает потому что если событие вызвал юнит красного игрока то цикл бесконечный и создается куча событий у триггера. В какой то момент вызывается Player(i) с недопустимо большим i.
У красного игрока номер 0, и условие exitwhen никогда не выполнится т.к. к моменту проверки i уже =1.
Либо событие вызвал вообще не юнит, тогда тоже индекс игрока будет 0.
Просто строки хранятся в таблице строк карты но на ГУИ этого не видно, а при конверте в джасс это заметно. Редактор подменяет саму строку на вот этот TRIGSTR и потом во время игры при исполнении кода по этому номеру находит строку в этой таблице.
на джассе можно писать текст как обычно, в кавычках
BJDebugMsg("вот этот вот текст выведется на экран")
Не стоит делать кучу ГУИ действий и потом конвертить, все равно ничего хорошего из этого не выйдет, делайте сразу на джассе. В jngp есть поисковик функций так что не нужно копаться с накликиванием чтобы что-то найти.
ток фигня в том что в массиве максимум 8192 ячеек
а хендлов в игре может насоздаваться и поболее
т.ч. просто вычитать число из хендлид не выход, может будет фатал
Проблема в том что это конверт из ГУИ со всякими ненужными бжфункциями типа GetLastCreatedLightningBJ() и CountUnitsInGroup(Group) == 0 вместо FirstOfGroup(Group)==null, без форматирования под код, в котором черт ногу сломит. target_integer - переменная объявлена, нигде не используется, и т.д.
Начал делать 3д вариант на 6 игроков. Будет типо теккен7 с рейджартами и слоумоушеном при одновременных ударах. Пока сделал меню и движение вроде рывков и прыжков, плюс основу для работы с камерой и скоростью игры. Мб запощу проект когда сделаю больше, нужно будет тестить систему с дуэлями через диалоги в мультиплеере.
Слишком много всего переписывать, не знаю с чего начать даже. Переделывать полностью меню причем я вообще не представляю на что, таймеры сокращать чтобы не фаталило, переменные связанные с боем и ареной менять на массивы везде, все триггеры управления переделывать. Клава еще эта поломанная с нерабочими скобками, 8,9,0 кнопками u, o, r, кодить с экранной клавы ад. Плюс все равно анимации по сети толком не синхронизируются почему-то да и народу столько не найти.
Здорово. Давно хотел поиграть в эту карту, а самому ИИ писать лень.
Только боты юзают абилки когда не надо, например маг юзает кольцо холода хотя в радиусе действия только башня. При этом моего героя боты не бьют. Играл 3на3 орком рогой. Напротив маг, жрец и друид, только пару раз гнев деревьев в меня кинули.
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
Но все равно это все ерунда, просто поменяй назад как было, не надо ломать то что работает. Эти события не нужно оптимизировать.
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
неработает потому что не сушествует GetTriggerUnit() этот момент
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
» WarCraft 3 / почему не работает Изменение структуры событие
откуда там возьмется local unit u = GetTriggerUnit() ?
» WarCraft 3 / почему не работает Изменение структуры событие
» WarCraft 3 / почему не работает Изменение структуры событие
» WarCraft 3 / почему не работает Изменение структуры событие
вобщем меняй на exitwhen i > 15
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
TriggerRegisterPlayerUnitEvent(t, Player(-1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
и только потом i=i+1
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / почему не работает Изменение структуры событие
Ред. biridius
» WarCraft 3 / ТЕКСТ
Ред. biridius
» WarCraft 3 / как найти айди юнита
а хендлов в игре может насоздаваться и поболее
т.ч. просто вычитать число из хендлид не выход, может будет фатал
» WarCraft 3 / как найти айди юнита
Ред. biridius
» WarCraft 3 / как найти айди юнита
мб в чьей-то системе?
Ред. biridius
» WarCraft 3 / Есть ли функция
Ред. biridius
» WarCraft 3 / Не работает заклинание
target_integer - переменная объявлена, нигде не используется, и т.д.
» WarCraft 3 / Fighting for Azeroth
» WarCraft 3 / Разъясните про номер игрока
а ГУИ в нем для простоты Игрок 1 - номер 1
Ред. biridius
» WarCraft 3 / Fighting for Azeroth
Ред. biridius
» WarCraft 3 / Extreme Candy War AI