Исправить код (или сделать как лучше)

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,478
1,113
Версия MoonLoader
.026-beta
Казалось бы, обычный фаст репорт, но приходится потеть...
Вот фулл код:
Lua:
require "lib.moonloader"
local sampev = require 'lib.samp.events'
local report = false
function main ()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("rep", function(arg)
        local text = string.match(arg, "(.+)")
        if text == nil then
            sampAddChatMessage("{BDBDBD}Используйте: /rep [текст]", 0xBDBDBD)
        else
            lua_thread.create(function()
                report = true
                sampSendChat("/mn")
                wait(10)
                sampSendDialogResponse(27, 1, 5, nil)
                wait(10)
                sampSendDialogResponse(80, 1, nil, text)
            end)
        end
    end)
    wait(-1)
end

function sampev.onShowDialog(id, style, title, b1, b2, text)
    if report and id == 80 then
        report = false
        sampCloseCurrentDialogWithButton(0)
    end
end
Изначально, проблема была в том, что после отправки сообщения в репорт, то ВИЗУАЛЬНО оставалось окно "Связь с администрацией" и нужно было самому его закрывать.
Сначала я делал так:
Lua:
sampSendChat("/mn")
wait(10)
sampSendDialogResponse(27, 1, 5, nil)
wait(10)
sampSendDialogResponse(80, 1, nil, text)
wait(10)
sampCloseCurrentDialogWithButton(0) -- Пробовал и 1
Не помогало.
Потом вместо sampCloseCurrentDialogWithButton я пробовал return false, но скрипт пытался писать введенный текст в репорт по кд (за раз) и из-за этого кикало
Тот код, который я кинул в самом выше - работает на ура, но мне что-то кажется, что можно сделать короче и без зависимости самп.луа.
Есть ли способ сократить этот код и без самп.луа?
И да, это делается под АРП
 
Решение
Lua:
require "lib.moonloader"
local sampev = require 'lib.samp.events'
local report = false
function main ()
 while not isSampAvailable() do wait(100) end
 sampRegisterChatCommand("rep", function(arg)
  local text = string.match(arg, "(.+)")
  if text == nil then
   sampAddChatMessage("{BDBDBD}Используйте: /rep [текст]", 0xBDBDBD)
  else
   lua_thread.create(function()
    report = true
    sampSendChat("/mn")
    wait(10)
    sampSendDialogResponse(27, 1, 5, nil)
    wait(10)
    sampSendDialogResponse(80, 1, nil, text)
   end)
  end
 end)
 while true do
  wait(0)
  if report and sampGetCurrentDialogId() == 80 then
   report = false
   sampCloseCurrentDialogWithButton(0)
  end
 end
end
попробуй так

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,891
1,254
Есть ли способ сократить этот код и без самп.луа?
так не получится, выбирай что-то одно
зачем нужен string.match(arg)? if arg == nil or arg == "" then
замена onShowDialog
Lua:
while true do -- в мейне
wait(0)
  if report and sampGetCurrentDialogId() == 80 then
   report = false
   sampSendDialogResponse(80, 1, nil, text)
   sampCloseCurrentDialogWithButton(0)
  end
end
 
  • Нравится
Реакции: Dmitriy Makarov

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,478
1,113
зачем нужен string.match(arg)? if arg == nil or arg == "" then
у меня прост if arg == nil then не работал
/mn открывается, дальше не идет. Без твоего кода открывается "Связь с администрацией", ну, окно с 80 ид.
Задержу ставил на всякий перед отправкой sampSendDialogResponse - все равно не пашит
Screenshot_2.png
 

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,891
1,254
Lua:
require "lib.moonloader"
local sampev = require 'lib.samp.events'
local report = false
function main ()
 while not isSampAvailable() do wait(100) end
 sampRegisterChatCommand("rep", function(arg)
  local text = string.match(arg, "(.+)")
  if text == nil then
   sampAddChatMessage("{BDBDBD}Используйте: /rep [текст]", 0xBDBDBD)
  else
   lua_thread.create(function()
    report = true
    sampSendChat("/mn")
    wait(10)
    sampSendDialogResponse(27, 1, 5, nil)
    wait(10)
    sampSendDialogResponse(80, 1, nil, text)
   end)
  end
 end)
 while true do
  wait(0)
  if report and sampGetCurrentDialogId() == 80 then
   report = false
   sampCloseCurrentDialogWithButton(0)
  end
 end
end
попробуй так
 

sᴀxᴏɴ

#Mary
Всефорумный модератор
791
846
пожалуйста, не еби себе мозги. что тебе не нравится в samp.lua? что какой-то вася пупочкин, который скачает твой скрипт не сможет из архива перекинуть два файла чтобы его установить и поэтому не поставит лайк?
Lua:
local repText, n = nil, false
function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('rep', function(msg)
        if not msg or #msg == 0 then return sampAddChatMessage("{BDBDBD}Используйте: /rep [текст]", 0xBDBDBD) end
        repText = msg
        n = true
        sampSendChat('/mn')
    end)
    wait(-1)
end

require('samp.events').onShowDialog = function(id, style, title, b1, b2, text)
    if id == 27 and n then
        sampSendDialogResponse(id, -1, 5, -1)
        return false
    end
    if id == 80 and n then
        sampSendDialogResponse(id, -1, -1, repText)
        n = false
        return false
    end
end
 
  • Нравится
Реакции: Dmitriy Makarov