function InitTrig_SPELL_END takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_FINISH, null)
set i = i + 1
exitwhen i == GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
endloop
call TriggerAddAction(t, function SPELL_END )
set t = null
endfunction

Принятый ответ

MATRITSA, причём тут событие?
чтобы существовал GetTriggerUnit() необходимо чтобы функция в которой он используется была вызвана по событию связанным с юнитом
функция InitTrig_SPELL_END вызывается из мейна и как следствие не содержит никакого юнита
элементарная логика же
короче сначала иди в школу (первые 4 класса)
а потом в статьи
и начни писать нормально
надоел слова коверкать
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
14
6 лет назад
0
извини но мне просто фотал ерор выдаёть как я тебе отлатку зделаю
0
21
6 лет назад
Отредактирован biridius
0
что именно должен делать этот триггер?.
exitwhen i == GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
Возможно фатал выдает потому что если событие вызвал юнит красного игрока то цикл бесконечный и создается куча событий у триггера. В какой то момент вызывается Player(i) с недопустимо большим i.
У красного игрока номер 0, и условие exitwhen никогда не выполнится т.к. к моменту проверки i уже =1.
Либо событие вызвал вообще не юнит, тогда тоже индекс игрока будет 0.
0
14
6 лет назад
0
ну как он может быть бесконечным если 1 пребовляеца сначало проверка событие потом +1 и ваше почему нелизя вместо цыкла от 0 до 10 зделать нахождение юнита сразу
я ставил начало и с -1 нефига
0
21
6 лет назад
Отредактирован biridius
0
Если начинать с -1 то будет вызов Player(-1) что тоже вызывает фатал
0
14
6 лет назад
0
как если loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set i = i + 1
exitwhen i == GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
сначало тригер потом + 1
0
21
6 лет назад
Отредактирован biridius
0
MATRITSA, потому что сперва будет
TriggerRegisterPlayerUnitEvent(t, Player(-1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
и только потом i=i+1
индекс игрока нельзя делать меньше 0 или больше 15
0
14
6 лет назад
0
хорошо а если
TriggerRegisterPlayerUnitEvent(t, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
и только потом i=i+1
так
0
21
6 лет назад
0
MATRITSA, зачем тогда вообще цикл если событие всегда для красного игрока?
0
14
6 лет назад
0
нет ано может быть и для других но я хочю без цыкла определять владелица
ну или прекрашять как тока активатар событие нашолся
0
21
6 лет назад
Отредактирован biridius
0
Надо все делать заново и разбирать что именно ты хочешь достичь этим триггером. Почему цикл выполняется именно для всех игроков с номером не больше номера владельца несуществующего владельца юнита вызывающего инициализацию конвертнутого ГУИ триггера?
0
14
6 лет назад
0
а вот так почему фаталить
function InitTrig_SPELL_END takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i =GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
call TriggerRegisterPlayerUnitEvent(t,Player(i), EVENT_PLAYER_UNIT_SPELL_FINISH, null)
call TriggerAddAction(t, function SPELL_END )
set t = null
endfunction
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.