Сохранение процесса samp диалога

sVor

Активный
Автор темы
156
90
Версия MoonLoader
.027.0-preview
Доброе утро. Есть ли способ сохранить открытый недавно samp диалог (серверный), чтобы его потом вызывать?
 
  • Грустно
Реакции: qdIbp
Решение
Доброе утро. Есть ли способ сохранить открытый недавно samp диалог (серверный), чтобы его потом вызывать?
Ты можешь только сохранить все его данные с помощью onShowDialog, а потом создавать с этими данными локальный диалог с помощью sampShowDialog. Вызывать серверный диалог скриптом - никак не получится.
Пример:https://wiki.blast.hk/ru/moonloader/lua/sampHasDialogRespond

YarikVL

Известный
Проверенный
4,751
1,814
Доброе утро. Есть ли способ сохранить открытый недавно samp диалог (серверный), чтобы его потом вызывать?
Ты можешь только сохранить все его данные с помощью onShowDialog, а потом создавать с этими данными локальный диалог с помощью sampShowDialog. Вызывать серверный диалог скриптом - никак не получится.
Пример:https://wiki.blast.hk/ru/moonloader/lua/sampHasDialogRespond
 
  • Нравится
Реакции: sVor

wojciech?

Известный
Проверенный
349
230
можно так сделать, но только один раз (если диалог не переоткрывается сервером):
  1. ловишь диалог в onShowDialog, сохраняешь его данные и возвращаешь return false;
  2. спустя время вызываешь диалог через sampShowDialog и указываешь sampSetDialogClientside(false) (чтобы синхронизация отправилась на сервер)
при этом нельзя открывать другие серверные диалоги. то есть если ты открыл другой диалог или отправил dialogresponse – оно не подействует.

вот пример:
Lua:
local sampev = require("samp.events")

local isDialogSave = false
local dialogData = {}

function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  repeat wait(0) until isSampAvailable()

  sampRegisterChatCommand("savenextdialog", function()
    isDialogSave = not isDialogSave
    printStringNow(isDialogSave and "~g~following dialog will be saved" or "~r~dialogs will not be saved", 2000)
  end)

  sampRegisterChatCommand("showsavedialog", function()
    if table.getn(dialogData) > 0 then
      sampShowDialog(table.unpack(dialogData))
      sampSetDialogClientside(false)
      dialogData = {}
    end
  end)
end

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
  if isDialogSave then
    printStringNow("~y~dialog is saved", 2000)
    dialogData = { dialogId, title, text, button1, button2, style }
    isDialogSave = false
    return false
  end
end

и если сервер проверяет какие-то условия при использовании диалога тоже могут быть проблемы
984207db-86b0-436e-a75a-a0ce23f0254e.png
 
Последнее редактирование:
  • Нравится
Реакции: sVor и YarikVL

sVor

Активный
Автор темы
156
90
Да, спасибо.
У меня серверный диалог открывается при подборе пикапа, и я решил просто отправлять RPC sampSendPickedUpPickup()
Как оказалось, на это действие уходит неплохо так времи, поэтому открывать диалог для взаимодействия приходится с задержкой в пол секунды, а хотелось бы как минимум 100 мс. На сколько я понял, бесполезно что-то думать