GetClickedButton() иногда неправильно работает. Очень странная проблема. В большинстве случаев все исправно, но иногда GetClickedButton() возвращает неизвестную мне кнопку.
кат
    private function lcButtonConditions takes nothing returns boolean //условие кнопки
        local integer i
        set i = lcButtonId
        call dbgT("check btn[" + I2S(i) + "]")
        if dialogButton[i] != null then
            call dbgT("not  null btn")
        else
            call dbgT("null btn")
        endif
        
        if (GetClickedButton() == dialogButton[i]) then //Иногда возвращает ложь, когда должно истину.
            call dbgT("true btn[" + I2S(i) + "]")
            return true
        endif
        return false
    endfunction
    
    private function lcDialogCreate takes nothing returns nothing
        local integer i
        local integer iEnd
        local integer dialogPlayerId = P2I(GetEnumPlayer())
        local integer buttonPlayerId
        local integer teamId = bInt
        local player dialogPlayer = GetEnumPlayer()
        local player buttonPlayer
        call DialogClear(dialogWindow[dialogPlayerId])
        call DialogDisplay(dialogPlayer, dialogWindow[dialogPlayerId], false)
        call DialogSetMessage(dialogWindow[dialogPlayerId], "Выберите лидера клана")
        set i = 1
        set iEnd = players
        loop
            exitwhen i > iEnd
            set buttonPlayerId = GetPlayerNumber(i)
            set buttonPlayer = I2P(buttonPlayerId)
            if IsPlayerInForce(buttonPlayer, csClanMembers[teamId]) then
                set lcButtonId = lcButtonId + 1
                set dialogButton[lcButtonId] = DialogAddButton(dialogWindow[dialogPlayerId], color[buttonPlayerId] + GetPlayerName(buttonPlayer), 0) //Создаю кнопку
                set trgButton[lcButtonId] = CreateTrigger()																																						 //Создаю триггер для кнопки
                call TriggerRegisterDialogEvent(trgButton[lcButtonId], dialogWindow[dialogPlayerId])																					 //Создаю событие с тем же id
                call TriggerAddCondition(trgButton[lcButtonId], Condition(function lcButtonConditions))																				 //Даю условие, куда вписываю эту же кнопку (смотреть выше).
                call TriggerAddAction(trgButton[lcButtonId], function lcButtonActions)
                call dbgT("create button[" + I2S(lcButtonId) + "] " + GetPlayerName(buttonPlayer) + " for dialog[" + I2S(dialogPlayerId) + "]")
                call SaveInteger(HT, lcButtonId, buttonPlayerId_hid, buttonPlayerId)
                call SaveInteger(HT, lcButtonId, dialogPlayerId_hid, dialogPlayerId)
                call SaveInteger(HT, lcButtonId, teamId_hid, teamId)
            endif
            set i = i + 1
        endloop
        call DialogDisplay(dialogPlayer, dialogWindow[dialogPlayerId], true)
        call dbgT(GetPlayerName(dialogPlayer) + " end create dialog[" + I2S(dialogPlayerId) + "] by clan[" + I2S(teamId) + "]")
        set dialogPlayer = null
        set buttonPlayer = null
    endfunction
При том что действия я провожу совершенно одинаковые, а результат получаю разный...
Прилагаю карту. (тестировать нужно в одиночку и изменить клан с "Нет")
Разные результаты при одинаковых действиях:

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

KaneThaumaturge, версия вара какая? Сталкивался с таким на 1.26. Скорее всего оп лимит или цикл где-то прерывается. Используй доп условия к кнопкам.

Ожидал, что условие будет не работать. Но проблема все равно не в нём. Кстати, как сделать работающее условие для кнопки?
Я просто создавал диалог каждый раз по новой и засовывал каждую кнопку в ифы, мне помогало.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
4 года назад
Отредактирован KaneThaumaturge
0
Кнопка вообще одна создается за всю игру. А мне пишет что кнопка не та...

TriggerRegisterDialogButtonEvent не подходит, т.к GetClickedButton() возвращает null

Такое впечетление, что GetClickedButton() просто возвращает иногда не то значение, что должно. Или я полный идиот, который убил на это 3 часа или близзы конченные.

Ожидал, что условие будет не работать. Но проблема все равно не в нём. Кстати, как сделать работающее условие для кнопки?
1
23
4 года назад
1
KaneThaumaturge, версия вара какая? Сталкивался с таким на 1.26. Скорее всего оп лимит или цикл где-то прерывается. Используй доп условия к кнопкам.

Ожидал, что условие будет не работать. Но проблема все равно не в нём. Кстати, как сделать работающее условие для кнопки?
Я просто создавал диалог каждый раз по новой и засовывал каждую кнопку в ифы, мне помогало.
Принятый ответ
0
19
4 года назад
0
Obelick, не знаю. Взял старый код, который был с багами, но с ним такой проблемы не было. И он работает... Хотя он практически идентичный. Версия 1.26.

Я просто создавал диалог каждый раз по новой и засовывал каждую кнопку в ифы, мне помогало.
У меня просто в диалоге не фиксированное количество кнопок. Сделал вообще без условия.
0
23
4 года назад
0
У меня просто в диалоге не фиксированное количество кнопок. Сделал вообще без условия.
Так кнопки как и диалог можно каждый раз новые создавать
Чтобы оставить комментарий, пожалуйста, войдите на сайт.