Работа с диалогами.

Barrington

Участник
Автор темы
55
34
Нашёл один скрипт, с помощью которого можно взаимодействовать с диалогами. Попытался его подкорректировать под себя, но без минимальных знаний Lua это сделать оказалось немного проблематично. Может кто, пожалуйста, объяснить немного как и чего в коде работает?

В моём понимании, при выполнении кода должно открываться диалоговое окно по команде /mm 20, потом выбирается второй пункт ( list = 1 ) в диалоговом окне и через button = 1 по нему производится клик. После этого, диалоговое окно закрывается.

Но на деле - окно открывается и закрывается, но то, что должно изменяться при клике по пункту диалога - не изменяется.

Сам диалог :
PbsEhjE.jpg

Или же, если не париться с этим скриптом, может есть какие-то иные заготовки для подобного рода действий с диалогами?
 

Вложения

  • test.lua
    1.2 KB · Просмотры: 110

James Hawk

Известный
919
218
Нашёл один скрипт, с помощью которого можно взаимодействовать с диалогами. Попытался его подкорректировать под себя, но без минимальных знаний Lua это сделать оказалось немного проблематично. Может кто, пожалуйста, объяснить немного как и чего в коде работает?

В моём понимании, при выполнении кода должно открываться диалоговое окно по команде /mm 20, потом выбирается второй пункт ( list = 1 ) в диалоговом окне и через button = 1 по нему производится клик. После этого, диалоговое окно закрывается.

Но на деле - окно открывается и закрывается, но то, что должно изменяться при клике по пункту диалога - не изменяется.

Сам диалог :
PbsEhjE.jpg

Или же, если не париться с этим скриптом, может есть какие-то иные заготовки для подобного рода действий с диалогами?
Речь о сервером диалоге, верно?
 

Barrington

Участник
Автор темы
55
34
Смог сделать работающий вариант для диалога с типом "2", но по аналогичному варианту для диалога "4-го" типа уже не работает. Для них возможно какая-то отдельная функция?

Делаю по такому принципу.
Lua:
function handleCaseB()
    sampSendChat("/mm")
    sampSendDialogResponse(700, 1, 3)
end

// тип 2 - DIALOG_STYLE_LIST
тип 4 - DIALOG_STYLE_TABLIST
 
Последнее редактирование:

imring

Ride the Lightning
Всефорумный модератор
2,365
2,552
Смог сделать работающий вариант для диалога с типом "2", но по аналогичному варианту для диалога "4-го" типа уже не работает. Для них возможно какая-то отдельная функция?

Делаю по такому принципу.
Lua:
function handleCaseB()
    sampSendChat("/mm")
    sampSendDialogResponse(700, 1, 3)
end

// тип 2 - DIALOG_STYLE_LIST
тип 4 - DIALOG_STYLE_TABLIST
попробуй так
Lua:
function sampSetCurrentDialogListItem(number)
    number = tonumber(number)
    local list = getStructElement(sampGetDialogInfoPtr(), 0x20, 4)
    return setStructElement(list, 0x143 --[[m_nSelected]], 4, number or 0)
end

function handleCaseB()
    sampSendChat('/mm')
    lua_thread.create(function()
        while not sampIsDialogActive() do wait(0) end
        sampSetCurrentDialogListItem(3)
        sampCloseCurrentDialogWithButton(1)
    end)
end
 
  • Нравится
Реакции: Barrington

Barrington

Участник
Автор темы
55
34
попробуй так
Lua:
function sampSetCurrentDialogListItem(number)
    number = tonumber(number)
    local list = getStructElement(sampGetDialogInfoPtr(), 0x20, 4)
    return setStructElement(list, 0x143 --[[m_nSelected]], 4, number or 0)
end

function handleCaseB()
    sampSendChat('/mm')
    lua_thread.create(function()
        while not sampIsDialogActive() do wait(0) end
        sampSetCurrentDialogListItem(3)
        sampCloseCurrentDialogWithButton(1)
    end)
end
Спасибо. Всё работает.

попробуй так
Lua:
function sampSetCurrentDialogListItem(number)
    number = tonumber(number)
    local list = getStructElement(sampGetDialogInfoPtr(), 0x20, 4)
    return setStructElement(list, 0x143 --[[m_nSelected]], 4, number or 0)
end

function handleCaseB()
    sampSendChat('/mm')
    lua_thread.create(function()
        while not sampIsDialogActive() do wait(0) end
        sampSetCurrentDialogListItem(3)
        sampCloseCurrentDialogWithButton(1)
    end)
end
И ещё последний моментик, каким образом можно это :
Lua:
sampRegisterChatCommand("work", handleCaseB)
заменить на вызов по клавише / сочетанию клавиш?
Просто попробовал подобный вариант
Lua:
if isKeyJustPressed(VK_7) then handleCaseB
и работоспособность кода примерно на уровне отсутствия этой работоспособности)
 

imring

Ride the Lightning
Всефорумный модератор
2,365
2,552
заменить на вызов по клавише / сочетанию клавиш?
Lua:
local vkeys = require 'vkeys'

-- isKeyDown - если зажата клавиша
-- wasKeyPressed - если нажата клавиша

if isKeyDown(vkeys.VK_MENU) --[[alt]] and wasKeyPressed(vkeys.VK_1) --[[1]] then
    -- code
end

if isKeyJustPressed(VK_7) then handleCaseB
Lua:
if isKeyJustPressed(VK_7) then handleCaseB() end
и ты засунул это в беск. цикл? (while true do wait(0) --[[code]] end)
 

Barrington

Участник
Автор темы
55
34
Lua:
local vkeys = require 'vkeys'

-- isKeyDown - если зажата клавиша
-- wasKeyPressed - если нажата клавиша

if isKeyDown(vkeys.VK_MENU) --[[alt]] and wasKeyPressed(vkeys.VK_1) --[[1]] then
    -- code
end


Lua:
if isKeyJustPressed(VK_7) then handleCaseB() end
и ты засунул это в беск. цикл? (while true do wait(0) --[[code]] end)
Сейчас сунется)
Всё, теперь окончательное и огромное спасибо, заработало)