формы на паузе

Lance_Sterling

Известный
Автор темы
801
281
Версия MoonLoader
.026-beta
формы выдаются даже если скрипт игра на паузе(паузовое меню игры активное)
в начале скрипта
script_properties("work-in-pause")

надо для других функций скрипта

вот код самых форм:
Lua:
local aName, aSurName, aID, form = text:match('^%[A%] %(.+%) (%w+)_?(%w+)%[(%d+)%]: /(.+)')
    if aName and aSurName and aID and form and color == 1724645546 and not isPauseMenuActive() and not isGamePaused() then--Выдача форм
        if tonumber(aID) ~= myId() then
            local cmd = form..' '
            for k, _ in ipairs(autopunish or {}) do--Перебираем список команд которые указаны пользователем
                if cmd:find('^'..u8:decode(autopunish[k].COMMAND)) and render_forms('/'..string.rlower(form), aName:match('%a')..'.'..aSurName, aName) then--Если команда найдена
                    if mainIni.settings.auto_punish then--Если автовыдача включена то сразу её отправлять
                        lua_thread.create(function()
                            wait(0)
                            sampSendChat(render_forms('/'..form, aName:match('%a')..'.'..aSurName, aName))
                        end)
                    else--Если автоавыдача выключена то запускать рендер форм
                        if not active_forma then
                            active_forma = true
                            AddChatMessage('Поступила форма от администратора '..aName..' '..aSurName..': /'..form, 3)
                            AddChatMessage('Чтобы принять нажмите >>'..table.concat(rkeys.getKeysName(BINDS.ACCEPT_FORM.v), ' + ')..'<<, чтобы отклонить >>'..table.concat(rkeys.getKeysName(BINDS.REJECT_FORM.v), ' + ')..'<<', 3)
                            forma(aName..' '..aSurName, render_forms('/'..form, aName:match('%a')..'.'..aSurName, aName))
                        end
                    end
                    break
                end
            end
        end
        if mainIni.settings.change_admin_chat then
            local lvl, nick, id, info = text:match('^%[A%] %((.+)%) (%w+_?%w+)%[(%d+)%]: (.+)')
            sampAddChatMessage(string.format('[A] {87CEFA}%s {f24246}%s[%d]{f0f1f0}: %s', lvl, nick, id, info), 0xf24246)
            return false
        end
    end

рендер форм:
Lua:
function render_forms(form, prefix, name)
    for _, v in ipairs(MAIN_TABLE.CORRECT_CMDS) do-- \\ Таблица с правильными аргументами команд
        if form:match(v) then
            return form..' // '..prefix
        end
    end
    for _, v in ipairs(MAIN_TABLE.CMDS) do--таблица с всеми командами
        if form:match(v:gsub(' .+', '')) then
            return '/a '..name..', вводи '..v:match('(/.+) %-')
        end
    end
    AddChatMessage('Произошла ошибка при обработке формы', 2)
    return false
end

и так же сама форма без автовыдачи(хотя она тут нахуй не сдалась, ведь ошибка только с автовыдачей):
Lua:
function forma(nick, cmd)
    if active_forma and not isPauseMenuActive() and not isGamePaused() then
        local time = os.time() + 5
        local accept = vkeys.name_to_id(table.concat(rkeys.getKeysName(BINDS.ACCEPT_FORM.v)))
        local reject = vkeys.name_to_id(table.concat(rkeys.getKeysName(BINDS.REJECT_FORM.v)))
        lua_thread.create(function()
            while time > os.time() do
                wait(0)
                printStyledString("ADMIN FORM " .. time - os.time() .. " WAIT ~n~AUTHOR: ~r~"..nick, 1000, 5)
                if time == os.time() then
                    active_forma = false
                    printStyledString("Forma skipped", 1000, 5)
                    break
                end
                if isKeyJustPressed(accept) and not sampIsChatInputActive() and not sampIsDialogActive() then
                    aform_accept = true
                    printStyledString("Admin form accepted", 1000, 5)
                    sampSendChat(cmd)
                    active_forma = false
                    break
                elseif isKeyJustPressed(reject) and not sampIsChatInputActive() and not sampIsDialogActive() then
                    printStyledString('You missed the form', 2000, 5)
                    aform_accept = false
                    active_forma = false
                    break
                end
            end
        end)
    end
end
 
  • Эм
Реакции: de_clain

de_clain

Активный
208
47
неа, возможно, это потому что сообщения в чате прогружаются после того как я вышел с афк, это можно увидеть по timestamp, чо мне делать блэ
Оконный режим или как его, в лаунчере аризоны норм
 
  • Bug
Реакции: Lance_Sterling

waparabka

Активный
74
125
неа, возможно, это потому что сообщения в чате прогружаются после того как я вышел с афк, это можно увидеть по timestamp, чо мне делать блэ
в событии onServerMessage если игра на паузе return false
хукаешь AddEntry и добавляешь в чат эти сообщения через неё
 

Lance_Sterling

Известный
Автор темы
801
281
C++:
DWORD GetAddress(signed long offset) {

    return GetModuleHandleA("samp.dll") + offset;
}

void AddEntry(void* _this, int type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor) {

    ((void(__thiscall*)(void*, int, const char*, const char*, uint32_t, uint32_t))GetAddress(0x64010))(_this, type, text, prefix, color, pcolor); //0x67460 samp v037r3
}
не шарю в с++ :(