Добавлен KaneThaumaturge
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. Скорее всего оп лимит или цикл где-то прерывается. Используй доп условия к кнопкам.
Я просто создавал диалог каждый раз по новой и засовывал каждую кнопку в ифы, мне помогало.Ожидал, что условие будет не работать. Но проблема все равно не в нём. Кстати, как сделать работающее условие для кнопки?
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован KaneThaumaturge