Закрытие диалога

KenzieReeves

Участник
Автор темы
37
5
Нужна помощь.
На аризонке бывает багается диалог пилота (а именно взятие рейсов) и когда ты нажимаешь альт чтобы открыть диалог пишет что-то вроде "Вы уже открыли выбор самолётов", хотя окна нет, собственно нужно закрыть диалог с помощью скрипта, дабы каждый раз не проходить мед.обследование заново. Видел схожие скрипты на закрытие диалога, но сам не могу написать. Мог бы кто-то помочь?
 

KenzieReeves

Участник
Автор темы
37
5
Диалог не закрывается только для тебя, но для сервера закрывается. Если не фиксится - дело уже сервера. Пофиксить нельзя
Понял. Но за помощь всё равно огромное спасибо. Появилось желание разобраться в lua :)

Диалог не закрывается только для тебя, но для сервера закрывается. Если не фиксится - дело уже сервера. Пофиксить нельзя
Есть подозрение что когда окно багается, то за "вы уже открыли выбор самолётов" отвечает другой диалог.
А если я вместо id 1421 в качестве аргумента подставлю саму переменную id? Скрипт будет работать с любым текущим открытым диалогом?
 

YarikVL

Известный
Проверенный
4,766
1,820
Спасибо за помощь, мужики. К сожалению 0 эффекта :( Как и со всеми диалогхайдерами, аризоновские диалоги иммунку походу имеют.

Или я что-то не до конца сделал?
Удали содержимое и вставь вот это:
Lua:
require "lib.moonloader"

function main()
   while not isSampAvailable() do wait(0) end
   while true do wait(0)
      if wasKeyPressed(VK_4) then -- 4
         enableDialog(false)
      elseif wasKeyPressed(VK_5) -- 5
         enableDialog(true)
      end
   end
end
function enableDialog(bool)
    local memory = require 'memory'
    memory.setint32(sampGetDialogInfoPtr()+40, bool and 1 or 0, true)
    sampToggleCursor(bool)
end
Тогда должно работать всегда.
 
  • Нравится
Реакции: KenzieReeves

KenzieReeves

Участник
Автор темы
37
5
Удали содержимое и вставь вот это:
Lua:
require "lib.moonloader"

function main()
   while not isSampAvailable() do wait(0) end
   while true do wait(0)
      if wasKeyPressed(VK_4) then -- 4
         enableDialog(false)
      elseif wasKeyPressed(VK_5) -- 5
         enableDialog(true)
      end
   end
end
function enableDialog(bool)
    local memory = require 'memory'
    memory.setint32(sampGetDialogInfoPtr()+40, bool and 1 or 0, true)
    sampToggleCursor(bool)
end
Тогда должно работать всегда.

После elseif условия добавил then и да, всё работает чётко, скрывает/раскрывает любой диалог, спасибо!
Только проблема осталась, после того как окно багается, раскрываю его с помощью твоего скрипта, появляется следующее окно (прикрепил), т.к. кнопок нет, сначала закрываю его для сервера с помощью скрипта от @ARMOR после этого жму ESC чтобы закрыть его у себя, далее жму ALT и снова пишет "Вы уже открыли окно выбора самолетов".

Диалог не закрывается только для тебя, но для сервера закрывается. Если не фиксится - дело уже сервера. Пофиксить нельзя
Кажется дошло. В строке
Lua:
sampSendDialogResponse(1421, 0, nil, nil)
второй аргумент (0) отвечает за правую кнопку, т.е. "Закрыть" (поправь если я ошибаюсь). А так как в забаганном окне этих кнопок нет, соответственно скрипт бессилен. Собственно вопрос, есть ли ещё какой-то способ закрыть диалог для сервера без доступа к кнопкам в диалоге?
 

Вложения

  • 1.png
    1.png
    40.4 KB · Просмотры: 27
  • 1.png
    1.png
    40.4 KB · Просмотры: 25
Последнее редактирование:

ARMOR

Модератор по раксампу
Модератор
4,936
6,735
После elseif условия добавил then и да, всё работает чётко, скрывает/раскрывает любой диалог, спасибо!
Только проблема осталась, после того как окно багается, раскрываю его с помощью твоего скрипта, появляется следующее окно (прикрепил), т.к. кнопок нет, сначала закрываю его для сервера с помощью скрипта от @ARMOR после этого жму ESC чтобы закрыть его у себя, далее жму ALT и снова пишет "Вы уже открыли окно выбора самолетов".


Кажется дошло. В строке
Lua:
sampSendDialogResponse(1421, 0, nil, nil)
второй аргумент (0) отвечает за правую кнопку, т.е. "Закрыть" (поправь если я ошибаюсь). А так как в забаганном окне этих кнопок нет, соответственно скрипт бессилен. Собственно вопрос, есть ли ещё какой-то способ закрыть диалог для сервера без доступа к кнопкам в диалоге?
Замени 0 на 1, и всё
 
  • Нравится
Реакции: KenzieReeves

KenzieReeves

Участник
Автор темы
37
5
Замени 0 на 1, и всё
Заменил, то же самое. Кнопок в баганном диалоге никаких нет, id баганного диалога тот же (1421).
Это единственный вариант закрыть диалог для сервера, только через обращение к кнопкам диалога?
 

YarikVL

Известный
Проверенный
4,766
1,820
Заменил, то же самое. Кнопок в баганном диалоге никаких нет, id баганного диалога тот же (1421).
Это единственный вариант закрыть диалог для сервера, только через обращение к кнопкам диалога?
Тогда говнокодом:
setVirtualKeyDown(VK_RETURN, true)
wait(30)
setVirtualKeyDown(VK_RETURN, false)
Только надо добавлять поток если ты не в блоке while true do будешь делать. И подключать либу в начале скрипта: require "lib.moonloader"
Если это не получится и в мунлоге не будет ошибок этого скрипта то найди в виртуальных кодах клавишей кнопку ESC и замени VK_RETURN на VK_ESC ( ток там вроде не ESC а по своему эта кнопка будет называться )
 

KenzieReeves

Участник
Автор темы
37
5
Тогда говнокодом:
setVirtualKeyDown(VK_RETURN, true)
wait(30)
setVirtualKeyDown(VK_RETURN, false)
Только надо добавлять поток если ты не в блоке while true do будешь делать. И подключать либу в начале скрипта: require "lib.moonloader"
Если это не получится и в мунлоге не будет ошибок этого скрипта то найди в виртуальных кодах клавишей кнопку ESC и замени VK_RETURN на VK_ESC ( ток там вроде не ESC а по своему эта кнопка будет называться )
Слишком хардово пока для меня, не осилю, в плане, не понимаю с чем ещё должен быть этот кусок кода. Но спасибо что уделяешь время.
 

YarikVL

Известный
Проверенный
4,766
1,820
Lua:
require "lib.moonloader"

function main()
   while not isSampAvailable() do wait(0) end
   while true do wait(0)
      if wasKeyPressed(VK_3) then -- 3
         setVirtualKeyDown(VK_RETURN, true)
         wait(30)
         setVirtualKeyDown(VK_RETURN, false)
      elseif wasKeyPressed(VK_4) -- 4 then
         enableDialog(false)
      elseif wasKeyPressed(VK_5) then -- 5
         enableDialog(true)
      end
   end
end
function enableDialog(bool)
    local memory = require 'memory'
    memory.setint32(sampGetDialogInfoPtr()+40, bool and 1 or 0, true)
    sampToggleCursor(bool)
end
Если на 3 нажать то оно нажмет на ентер. Но я не совсем понял что тебе именно надо сделать
Слишком хардово пока для меня, не осилю, в плане, не понимаю с чем ещё должен быть этот кусок кода. Но спасибо что уделяешь время.
а вообще если интересно это всё и хочешь делать сам то посмотри The Champ Guess на ютуб, там будут уроки lua, если не будешь понимать то смотри по несколько раз
 
  • Нравится
Реакции: KenzieReeves