Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

Fott

Простреленный
3,431
2,267
Как из данного меню статистики получить такую информацию как Ранг,Организация,Пол
 

tsunamiqq

Участник
428
16
а полный код скинешь?
Lua:
if interaction_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(900, 350), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Âçàèìîäåéñòâèå', interaction_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        imgui.BeginChild('##121', imgui.ImVec2(270, 300), true)
        imgui.Text(u8(sampGetPlayerNickname(actionId)))
        imgui.Separator()
        imgui.Columns(2, "columns", true)
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerScore(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8((actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerOrganisation(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerHealth(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerArmor(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8((actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'O?aeoey:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerPing(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'Ñêèí')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerSkin(actionId)))
        imgui.Separator()
        imgui.NextColumn()
        imgui.CenterColumnText(u8'AFK:')
        imgui.NextColumn()
        imgui.CenterColumnText(u8(sampGetPlayerPause(actionId)))
        imgui.Columns(1)
        imgui.Separator()
        imgui.NextColumn()
        imgui.Text(u8'Èíòåðôåéñ è èäåÿ âçÿòà ñ Interaction Menu')
        imgui.Text(u8'Êîä ñäåëàí ñ íóëÿ. Íå âçÿò ñ ñêðèïòà âûøå.')
        imgui.Text(u8'Ìåíþ ïîääåëàíî ê ñêðèïòó Family Helper')
        imgui.EndChild()
        imgui.SameLine()
        if act == 0 then
            imgui.BeginChild('##once', imgui.ImVec2(320, 300), true)
            imgui.Button('Ïàñïîðò', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Ìåä.êàðòà', imgui.ImVec2(150,25.7))
            imgui.Button('Ëèöåíçèè', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Ñêèëëû', imgui.ImVec2(150,25.7))
            imgui.Button('Ïåðåäàòü ãàíû', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Äàòü äåíåã$', imgui.ImVec2(150,25.7))
            if imgui.Button('T        R        A        D        E', imgui.ImVec2(308, 50)) then act = 28 end
            imgui.Button('Ïðèíÿòü â ÎÐÃ.', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Óâîëèòü ñ ÎÐÃ.', imgui.ImVec2(150,25.7))
            imgui.Button('Âûäàòü ðàíã â ÎÐÃ.', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Ìóò â ÎÐÃ.', imgui.ImVec2(150,25.7))
            imgui.Button('Ðîçìóò â ÎÐÃ.', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Ïðèíÿòü â ñåìüþ', imgui.ImVec2(150,25.7))
            imgui.Button('Óâîëèòü èç ñåìüè', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Âûäàòü ðàíã â ñåìüè', imgui.ImVec2(150,25.7))
            imgui.Button('Ìóò â ñåìüå', imgui.ImVec2(150,25.7))
            imgui.SameLine()
            imgui.Button('Ðîçìóò â ñåìüå', imgui.ImVec2(150,25.7))
            imgui.EndChild()
        elseif act == 28 then
            imgui.BeginChild('##twice', imgui.ImVec2(320, 300), true)
            sampSendChat('/trade '..actionId)
            imgui.EndChild()
        endô
        imgui.SameLine()
        imgui.BeginChild('##tabs2', imgui.ImVec2(270, 300), true)
        imgui.EndChild()
        imgui.End()
    end
    end
    local id = 0

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage('[FamHelper] Aaoi? ne?eioa: Tsunami_Nakamura. Iiiiuiee: Adam_Karleone [ARIZONA 10]', 0x00BFFF)
    sampAddChatMessage('[FamHelper] Anou aii?inu? AE - lcn.maks', 0x00BFFF)
    sampAddChatMessage('[FamHelper] Aeoeaaoey ne?eioa: /famh', 0x00BFFF)
    sampAddChatMessage('[FamHelper] Iaoee aaa, eee ia ai?aaioeo? Iaieoeoa a AE', 0x00BFFF)
    sampRegisterChatCommand('famh', function() main_window_state.v = not main_window_state.v end)

    while true do wait(0)
        local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
        if valid and doesCharExist(ped) then
            local result, id = sampGetPlayerIdByCharHandle(ped)
            if result and isKeyJustPressed(VK_E) then
                interaction_window_state.v = true
                actionId = id
            end
        end
        if checkbox.v then
            printStringNow('test', 1000)
        end
        imgui.Process = main_window_state.v or interaction_window_state.v
    end
end

function imgui.CenterTextColoredRGB(text)
    local width = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4
    end    

function yellowbtn()
        imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(0, 0, 0, 0.8))
        imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(1, 0.6, 0, 1))
        imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(1, 0.5, 0, 1))
        imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(1, 0.4, 0, 1))
    end
function endbtn()
        imgui.PopStyleColor(4)
        style()
    end
    
function greybtn()
        imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.4, 0.4, 0.4, 1))
        imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(0.3, 0.3, 0.3, 1))
        imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(0.2, 0.2, 0.2, 1))
    end

    
function sampGetPlayerSkin(id)
    result, pedHandle = sampGetCharHandleBySampPlayerId(id)
    if result then
        skinId = getCharModel(pedHandle)
        return skinId
    end
end

function sampGetPlayerPause(playerId)
    if sampIsPlayerPaused(playerId) then 
        return tostring('??')
    else 
        return tostring('???')
    end
end

function sampGetPlayerOrganisation(playerId)
    if sampGetPlayerColor(actionId) == 2147502591 then 
        return tostring('Ïîëèöèÿ')
    end
    if sampGetPlayerColor(actionId) == 2164227710 then 
        return tostring('Áîëüíèöà')
    end
    if sampGetPlayerColor(actionId) == 2160918272 then 
        return tostring('Ìýðèÿ')
    end
    if sampGetPlayerColor(actionId) == 2157536819 then 
        return tostring('Àðìèÿ/ÒÑÐ')
    end
    if sampGetPlayerColor(actionId) == 2164221491 then 
        return tostring('Àâòîøêîëà')
    end
    if sampGetPlayerColor(actionId) == 2164228096 then 
        return tostring('ÑÌÈ')
    end
    if sampGetPlayerColor(actionId) == 2150206647 then 
        return tostring('Áàíê ËÑ')
    end
    if sampGetPlayerColor(actionId) == 2566951719 then 
        return tostring('Groove')
    end
    if sampGetPlayerColor(actionId) == 2580667164 then 
        return tostring('Vagos')
    end
    if sampGetPlayerColor(actionId) == 2580283596 then 
        return tostring('Ballas')
    end
    if sampGetPlayerColor(actionId) == 2566979554 then 
        return tostring('Aztec')
    end
    if sampGetPlayerColor(actionId) == 2573625087 then 
        return tostring('Rifa')
    end
    if sampGetPlayerColor(actionId) == 2155832420 then 
        return tostring('N.Wolves')
    end
    if sampGetPlayerColor(actionId) == 2573625087 then 
        return tostring('Yakuza')
    end
    if sampGetPlayerColor(actionId) == 2150852249 then 
        return tostring('Ðóñ. Ìàôèÿ')
    end
    if sampGetPlayerColor(actionId) == 2157523814 then 
        return tostring('LCN')
    end
    if sampGetPlayerColor(actionId) == 23486046 then 
        return tostring('*Â ìàñêå*')
    end
    if sampGetPlayerColor(actionId) == 2149720609 then 
        return tostring('Õèòìàíû')
    end
    return tostring('????')
end
 

HarlyCloud

Потрачен
238
66
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как закруглить с одной стороны?
Lua:
imgui.GetWindowDrawList():AddRectFilled
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,745
как сделать так, что-бы скрипт не выключался после того как не найдёт самп.луа а написал в чат об этом и затем закончил работу? Написал вот так. Не робит



Lua:
function check_libs()



    if not doesFileExist('moonloader/lib/samp/events.lua') then



        sampAddChatMessage(tag .. 'У Вас не установлена бибилотека SAMP.lua', main_color)



        thisScript():unload()



    else



        local sampev = require 'lib.samp.events'



     



        sampAddChatMessage(tag .. 'Скрипт {32CD32}успешно {FFFFFF}запущен. Автор: '..unpack(thisScript().authors), main_color)



        sampAddChatMessage(tag .. 'Активация скрипта {5B605F}- {FF0000}F2 {FFFFFF}или {FF0000}/dt', main_color)



    end



end







function main()



    if not isSampfuncsLoaded() or not isSampLoaded() then return end



    while not isSampAvailable() do wait(100) end







    check_libs()



end
Lua:
local result, sampev = pcall(require, 'lib.samp.events')

--main
if not result then
    sampAddChatMessage('Lib "SAMP Events" not found', -1)
    error('Lib "SAMP Events" not found') -- вообще лучше только эту оставить (и где идет сама библиотека), имхо
end
 

Rice.

https://t.me/riceoff
Модератор
1,680
1,389
Всем привет! Начал занимать скриптингом. Сейчас изучаю Имгуи и IniCfg.
Нужна помощь, вопросительные знаки в Имуги.
Код:
function imgui.OnDrawFrame()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(300, 500), imgui.Cond.FirstUseEver)
    imgui.Begin("Government Helper", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.SetCursorPos(imgui.ImVec2(20, 30))
    imgui.Text(fa.ICON_INFO_CIRCLE.. u8" Активация скрипта - /gh или /GovHelper " ..fa.ICON_INFO_CIRCLE)
    imgui.Separator()
    imgui.Text(u8"Ваш ник: "..mainIni.config.name) -- Тут нужна помощь
    imgui.Text(u8"Ваша должность: " ..mainIni.config.rank) -- Тут нужна помощь
    imgui.Separator()
    imgui.SetCursorPos(imgui.ImVec2(85, 100))
    if imgui.Button(open_buttons and fa.ICON_SEARCH .. u8' Команды скрипта' or fa.ICON_SEARCH .. u8' Команды скрипта') then
      open_buttons = not open_buttons
    end
    if open_buttons then
      imgui.Text(u8"/givepass - Выдать паспорт человеку")
        imgui.Text(u8"/invite - Принять человека во фракцию")
        imgui.Text(u8"/uninvite - Уволить человека")
        imgui.Text(u8"/fwarn - Выдать выговор")
        imgui.Text(u8"/unfwarn - Снять выговор")
        imgui.Text(u8"/blacklist - Занести человека в чёрный список")
        imgui.Text(u8"/unblacklist - Вынести человека из чёрного списка")
        imgui.Text(u8"/unblacklistoff - Вынести человека из чёрного списка в оффлайне")
        imgui.Text(u8"/fmute - Заглушить человеку рацию (временно)")
        imgui.Text(u8"/funmute - Разглушить человеку рацию")
        imgui.Text(u8"/fmutes - Заглушить человеку рацию на 10 минут")
        imgui.Text(u8"/giverank - Изменить ранг сотрудника")
        imgui.Text(u8"/r - Сказать что-то в РП рацию")
        imgui.Text(u8"/setnick - Изменить ник в скрипте")
        imgui.Text(u8"/setrank - Изменить должность в скрипте")
    end
    imgui.End()
end

Код:
[config]
name=Y.Rice
rank=Вице-губернатора
-- Мой cfg

Мне нужно, чтобы "..mainIni.config.rank" писался по русски. Может сделать так?
Код:
 imgui.Text(u8"Ваша должность: " u8:decode(..mainIni.config.rank))
 

Nelit

Потрачен
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Лог:
[23:10:54.290441] (system)    Session started.
[23:10:54.290441] (debug)    Module handle: 505A0000

MoonLoader v.025-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team
https://www.blast.hk/moonloader/

[23:10:54.290441] (info)    Working directory: D:\ARIZONA GAMES\bin\Arizona\moonloader
[23:10:54.290441] (debug)    FP Control: 0009001F
[23:10:54.290441] (debug)    Game: GTA SA 1.0.0.0 US
[23:10:54.290441] (system)    Installing pre-game hooks...
[23:10:54.290441] (system)    Hooks installed.
[23:10:55.440129] (debug)    Initializing opcode handler table
[23:10:55.440129] (debug)    package.path = D:\ARIZONA GAMES\bin\Arizona\moonloader\lib\?.lua;D:\ARIZONA GAMES\bin\Arizona\moonloader\lib\?\init.lua;D:\ARIZONA GAMES\bin\Arizona\moonloader\?.lua;D:\ARIZONA GAMES\bin\Arizona\moonloader\?\init.lua;.\?.lua;D:\ARIZONA GAMES\bin\Arizona\moonloader\lib\?.luac;D:\ARIZONA GAMES\bin\Arizona\moonloader\lib\?\init.luac;D:\ARIZONA GAMES\bin\Arizona\moonloader\?.luac;D:\ARIZONA GAMES\bin\Arizona\moonloader\?\init.luac;.\?.luac
[23:10:55.440129] (debug)    package.cpath = D:\ARIZONA GAMES\bin\Arizona\moonloader\lib\?.dll;
[23:10:55.440129] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\AutoReboot.lua'...
[23:10:55.440129] (debug)    New script: 0918E4BC
[23:10:55.441129] (system)    ML-AutoReboot: Loaded successfully.
[23:10:55.441129] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\Government Helper.lua'...
[23:10:55.441129] (debug)    New script: 0918E664
[23:10:55.445130] (debug)    Add thread 0918CBB5 to SCM-thread queue
[23:10:55.451132] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\resource\imgui_themes.lua'...
[23:10:55.451132] (debug)    New script: 0918EA04
[23:10:55.455133] (system)    imgui_themes.lua: Loaded successfully.
[23:10:55.455133] (system)    Government Helper: Loaded successfully.
[23:10:55.455133] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\gun.lua'...
[23:10:55.455133] (debug)    New script: 1E49C1AC
[23:10:55.456132] (system)    gun.lua: Loaded successfully.
[23:10:55.456132] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\MHManager.luac'...
[23:10:55.456132] (debug)    New script: 1E49E35C
[23:10:55.459134] (system)    MVDHelper Manager: Loaded successfully.
[23:10:55.459134] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\money_separator.lua'...
[23:10:55.459134] (debug)    New script: 1E4A5ACC
[23:10:55.463134] (system)    money_separator.lua: Loaded successfully.
[23:10:55.463134] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\reload_all.lua'...
[23:10:55.463134] (debug)    New script: 1E4A7C7C
[23:10:55.464135] (system)    ML-ReloadAll: Loaded successfully.
[23:10:55.464135] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\scriptManager.luac'...
[23:10:55.464135] (debug)    New script: 1E4A9E2C
[23:10:55.466135] (system)    ScriptManager: Loaded successfully.
[23:10:55.466135] (system)    Loading script 'D:\ARIZONA GAMES\bin\Arizona\moonloader\SF Integration.lua'...
[23:10:55.466135] (debug)    New script: 1E4ABFDC
[23:10:55.468136] (system)    SF Integration: Loaded successfully.
[23:10:56.413356] (system)    Installing post-load hooks...
[23:10:56.413356] (system)    Hooks installed.
[23:10:56.414356] (debug)    Add thread 1EC8C875 to SCM-thread queue
[23:10:56.916409] (warn)    Memory test at address 75BE5F00 has failed. Value is 'E9 9B 13 19 04', expected 'E9 BB 2A 9D DA'.
[23:10:58.636798] (debug)    Add thread 36E9CECD to SCM-thread queue
[23:10:58.636798] (debug)    Add thread 36E9C58D to SCM-thread queue

Код:
script_name('Government Helper')
script_author('VK - @xkelling')

require "lib.moonloader"
local keys = require "vkeys"
local sampev = require 'lib.samp.events'
local imgui = require 'imgui'
local encoding = require'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
local inicfg = require 'inicfg'
local directIni = "moonloader\\config\\settings.ini"
local mainIni = inicfg.load(nil, directIni)
local stateIni = inicfg.save(mainIni, directIni)
local themes = import "resource/imgui_themes.lua"
local combo_select = imgui.ImInt(0)

local tag = "{ADFF2F}[GH]{FFFFFF} "
local main_color = 0xFFFFFF
local main_color_text = "{ADFF2F}"
local white_color = "{FFFFFF}"

local sw, sh = getScreenResolution()

function main()
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while not isSampAvailable() do wait(100) end
        sampAddChatMessage(tag .. "Успешно запущен!" , main_color)
        sampAddChatMessage(tag .. "Активация скрипта: /gh | /GovHelper" , main_color)
        sampfuncsLog(tag .. "Loaded!")
        sampRegisterChatCommand("gh", cmd_gh)
        sampRegisterChatCommand("GovHelper", cmd_gh)
        sampRegisterChatCommand("givepass", cmd_givepass)
        sampRegisterChatCommand("invite", cmd_invite)
        sampRegisterChatCommand("uninvite", cmd_uninvite)
        sampRegisterChatCommand("fwarn", cmd_fwarn)
        sampRegisterChatCommand("unfwarn", cmd_unfwarn)
        sampRegisterChatCommand("blacklist", cmd_blacklist)
        sampRegisterChatCommand("unblacklist", cmd_unblacklist)
        sampRegisterChatCommand("unblacklistoff", cmd_unblacklistoff)
        sampRegisterChatCommand("fmute", cmd_fmute)
        sampRegisterChatCommand("funmute", cmd_funmute)
        sampRegisterChatCommand("fmutes", cmd_fmutes)
        sampRegisterChatCommand("giverank", cmd_giverank)
        sampRegisterChatCommand("r", cmd_r)
    imgui.Process = false

    imgui.SwitchContext()
    themes.SwitchColorTheme(8)

    thread = lua_thread.create_suspended(thread_function)



while true do
wait(0)
if main_window_state.v == false then
    imgui.Process = false
--    require('samp.events').onServerMessage = function(color, text)
--    if text:match('Объявление') then sampAddChatMessage("Хуй", -1)
end
end
end
--end
--end



function cmd_gh(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end


function imgui.OnDrawFrame()

    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(600, 300), imgui.Cond.FirstUseEver)

    imgui.Begin("Government Helper", main_window_state)
    imgui.Text(u8"Активация скрипта - /gh или /GovHelper")
  imgui.Text(u8"Команды скрипта:")
  imgui.Text(u8"/givepass - Выдать паспорт человеку")
    imgui.Text(u8"/invite - Принять человека во фракцию")
    imgui.Text(u8"/uninvite - Уволить человека")
    imgui.Text(u8"/fwarn - Выдать выговор")
    imgui.Text(u8"/unfwarn - Снять выговор")
    imgui.Text(u8"/blacklist - Занести человека в чёрный список")
    imgui.Text(u8"/unblacklist - Вынести человека из чёрного списка")
    imgui.Text(u8"/unblacklistoff - Вынести человека из чёрного списка в оффлайне")
    imgui.Text(u8"/fmute - Заглушить человеку рацию (временно)")
    imgui.Text(u8"/funmute - Разглушить человеку рацию")
    imgui.Text(u8"/fmutes - Заглушить человеку рацию на 10 минут")
    imgui.Text(u8"/giverank - Изменить ранг сотрудника")
    imgui.Text(u8"/r - Сказать что-то в РП рацию")
    imgui.Combo(u8"Выбор ранга", combo_select, u8" \0Персонал\0Представитель безопасности\0Телохранитель\0Начальник отдела безопасности\0Юрист\0Пресс-секретарь\0Министр\0Государственный секретарь\0Вице-губернатора\0Губернатор\0\0")
    imgui.Button(u8"Сохранить изменение рангов")
    if imgui.Button(u8'Проверить обновление скрипта') then
        sampAddChatMessage("{ADFF2F}[GH]{FFFFFF} Обновление скрипта не найдено.", -1)

    imgui.End()
end
end

function cmd_givepass(arg)
    var1 = string.match(arg, "(%d+)")
    if var1 == nill or var1 == ""
    then
        sampAddChatMessage(tag .. "Введите /givepass [id]", -1)
    else
        lua_thread.create(function()
        sampSendChat("/me достал чистый бланк из под стола")
        wait(1400)
        sampSendChat("/me достал ручку и начал заполнять документы")
        wait(1400)
        sampSendChat("/do Бланк документов заполнен.")
        wait(1400)
        sampSendChat("/me положил бланки в папку и передал человеку паспорт")
        wait(1)
        sampSendChat('/givepass ' ..var1) end)
    end
    end


    function cmd_invite(arg)
        var1 = string.match(arg, "(%d+)")
        if var1 == nill or var1 == ""
        then
            sampAddChatMessage(tag .. "Введите /invite [id]", -1)
        else
            lua_thread.create(function()
            sampSendChat("/me достал планшет из сумки")
            wait(1400)
            sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
            wait(1400)
            sampSendChat("/me зашел в раздел 'Сотрудники' и нажал на кнопку 'Добавить сотрудника' ")
            wait(1400)
            sampSendChat("/do Данные о сотруднике занесены.")
                    wait(1400)
              sampSendChat("/me выключил планшет и убрал его в карман")
                    wait(1400)
              sampSendChat("Поздравляю Вас! Переодеться Вы можете на втором этаже.")
            wait(1400)
            sampSendChat('/invite ' ..var1) end)
        end
        end


        function cmd_uninvite(arg)
                var1, var2 = string.match(arg, "(%d+) (.+)")
                if var1 == nill or var1 == ""
                then
                        sampAddChatMessage(tag .. "Введите /uninvite [id] [Причина]", -1)
                else
                        lua_thread.create(function()
                        sampSendChat("/me достал планшет из сумки")
                        wait(1400)
                        sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                        wait(1400)
                        sampSendChat("/me зашел в раздел 'Сотрудники' и нажал на кнопку 'Удалить сотрудника' ")
                        wait(1400)
                        sampSendChat("/do Данные о сотруднике удалены.")
                        wait(1400)
                        sampSendChat("/me выключил планшет и убрал его в карман")
                        wait(1400)
                        sampSendChat("Извините, но мы не нуждаемся в ваших услугах.")
                        wait(1400)
                        sampSendChat('/uninvite ' ..var1  ..var2) end)
                end
            end

            function cmd_fwarn(arg)
                    var1, var2 = string.match(arg, "(%d+) (.+)")
                    if var1 == nill or var1 == ""
                    then
                            sampAddChatMessage(tag .. "Введите /fwarn [id] [Причина]", -1)
                    else
                            lua_thread.create(function()
                            sampSendChat("/me достал планшет из сумки")
                            wait(1400)
                            sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                            wait(1400)
                            sampSendChat("/me зашел в раздел 'Сотрудники' и нажал на кнопку 'Выдать выговор' ")
                            wait(1400)
                            sampSendChat("/do Данные о сотруднике изменены.")
                            wait(1400)
                            sampSendChat("/me выключил планшет и убрал его в карман")
                            wait(1400)
                            sampSendChat('/fwarn ' ..var1  ..var2) end)
                    end
                end

                function cmd_unfwarn(arg)
                        var1 = string.match(arg, "(%d+)")
                        if var1 == nill or var1 == ""
                        then
                                sampAddChatMessage(tag .. "Введите /unfwarn [id]", -1)
                        else
                                lua_thread.create(function()
                                sampSendChat("/me достал планшет из сумки")
                                wait(1400)
                                sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                wait(1400)
                                sampSendChat("/me зашел в раздел 'Сотрудники' и нажал на кнопку 'Снять выговор' ")
                                wait(1400)
                                sampSendChat("/do Данные о сотруднике изменены.")
                                wait(1400)
                                sampSendChat("/me выключил планшет и убрал его в карман")
                                wait(1400)
                                sampSendChat('/unfwarn ' ..var1) end)
                        end
                    end

                    function cmd_blacklist(arg)
                            var1, var2 = string.match(arg, "(%d+) (.+)")
                            if var1 == nill or var1 == ""
                            then
                                    sampAddChatMessage(tag .. "Введите /blacklist [id] [Причина]", -1)
                            else
                                    lua_thread.create(function()
                                    sampSendChat("/me достал планшет из сумки")
                                    wait(1400)
                                    sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                    wait(1400)
                                    sampSendChat("/me зашел в раздел 'Чёрный список' и нажал на кнопку 'Добавить человека в список' ")
                                    wait(1400)
                                    sampSendChat("/do Данные о человеке добавлены.")
                                    wait(1400)
                                    sampSendChat("/me выключил планшет и убрал его в карман")
                                    wait(1400)
                                    sampSendChat('/blacklist ' ..var1  ..var2) end)
                            end
                        end

                        function cmd_unblacklist(arg)
                                var1 = string.match(arg, "(%d+)")
                                if var1 == nill or var1 == ""
                                then
                                        sampAddChatMessage(tag .. "Введите /unblacklist [id]", -1)
                                else
                                        lua_thread.create(function()
                                        sampSendChat("/me достал планшет из сумки")
                                        wait(1400)
                                        sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                        wait(1400)
                                        sampSendChat("/me зашел в раздел 'Чёрный список' и нажал на кнопку 'Удалить человека из списка' ")
                                        wait(1400)
                                        sampSendChat("/do Данные о человеке удалены.")
                                        wait(1400)
                                        sampSendChat("/me выключил планшет и убрал его в карман")
                                        wait(1400)
                                        sampSendChat('/unblacklist ' ..var1) end)
                                end
                            end

                            function cmd_unblacklistoff(arg)
                                    var1 = string.match(arg, "(.+)")
                                    if var1 == nill or var1 == ""
                                    then
                                            sampAddChatMessage(tag .. "Введите /unblacklistoff [name]", -1)
                                    else
                                            lua_thread.create(function()
                                            sampSendChat("/me достал планшет из сумки")
                                            wait(1400)
                                            sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                            wait(1400)
                                            sampSendChat("/me зашел в раздел 'Чёрный список' и нажал на кнопку 'Удалить человека из списка' ")
                                            wait(1400)
                                            sampSendChat("/do Данные о человеке удалены.")
                                            wait(1400)
                                            sampSendChat("/me выключил планшет и убрал его в карман")
                                            wait(1400)
                                            sampSendChat('/unblacklistoff ' ..var1) end)
                                    end
                                end

                                function cmd_fmute(arg)
                                        var1, var2 = string.match(arg, "(%d+) (.+)")
                                        if var1 == nill or var1 == ""
                                        then
                                                sampAddChatMessage(tag .. "Введите /fmute [id] [Причина]", -1)
                                        else
                                                lua_thread.create(function()
                                                sampSendChat("/me достал планшет из сумки")
                                                wait(1400)
                                                sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                                wait(1400)
                                                sampSendChat("/me зашел в раздел 'Рации сотрудников' и нажал на кнопку 'Выключить рацию сотруднику' ")
                                                wait(1400)
                                                sampSendChat("/do Данные о рации сотрудника были изменены.")
                                                wait(1400)
                                                sampSendChat("/me выключил планшет и убрал его в карман")
                                                wait(1400)
                                                sampSendChat('/fmute ' ..var1  ..var2) end)
                                        end
                                    end

                                    function cmd_funmute(arg)
                                            var1 = string.match(arg, "(%d+)")
                                            if var1 == nill or var1 == ""
                                            then
                                                    sampAddChatMessage(tag .. "Введите /funmute [id]", -1)
                                            else
                                                    lua_thread.create(function()
                                                    sampSendChat("/me достал планшет из сумки")
                                                    wait(1400)
                                                    sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                                    wait(1400)
                                                    sampSendChat("/me зашел в раздел 'Рации сотрудников' и нажал на кнопку 'Включить рацию сотруднику' ")
                                                    wait(1400)
                                                    sampSendChat("/do Данные о рации сотрудника были изменены.")
                                                    wait(1400)
                                                    sampSendChat("/me выключил планшет и убрал его в карман")
                                                    wait(1400)
                                                    sampSendChat('/funmute ' ..var1) end)
                                            end
                                        end

                                        function cmd_fmutes(arg)
                                                var1 = string.match(arg, "(%d+)")
                                                if var1 == nill or var1 == ""
                                                then
                                                        sampAddChatMessage(tag .. "Введите /fmutes [id]", -1)
                                                else
                                                        lua_thread.create(function()
                                                        sampSendChat("/me достал планшет из сумки")
                                                        wait(1400)
                                                        sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                                        wait(1400)
                                                        sampSendChat("/me зашел в раздел 'Рации сотрудников' и нажал на кнопку 'Выключить рацию сотруднику' ")
                                                        wait(1400)
                                                        sampSendChat("/do Данные о рации сотрудника были изменены.")
                                                        wait(1400)
                                                        sampSendChat("/me выключил планшет и убрал его в карман")
                                                        wait(1400)
                                                        sampSendChat('/fmutes ' ..var1) end)
                                                end
                                            end

                                            function cmd_giverank(arg)
                                                    var1, var2 = string.match(arg, "(%d+) (%d+)")
                                                    if var1 == nill or var1 == ""
                                                    then
                                                            sampAddChatMessage(tag .. "Введите /giverank [id] [Номер ранга]", -1)
                                                    else
                                                            lua_thread.create(function()
                                                            sampSendChat("/me достал планшет из сумки")
                                                            wait(1400)
                                                            sampSendChat("/me включил планшет и зашел в приложение 'Правительство' ")
                                                            wait(1400)
                                                            sampSendChat("/me зашел в раздел 'Сотрудники' и нажал на кнопку 'Должности' ")
                                                            wait(1400)
                                                            sampSendChat("/me изменил данные о сотруднике")
                                                            wait(1400)
                                                            sampSendChat("/do Данные о должности сотрудника были изменены.")
                                                            wait(1400)
                                                            sampSendChat("/me выключил планшет и убрал его в карман")
                                                            wait(1400)
                                                            sampSendChat('/giverank ' ..var1  ..var2) end)
                                                    end
                                                end

                                                function cmd_r(arg)
                                                        var1 = string.match(arg, "(.+)")
                                                        if var1 == nill or var1 == ""
                                                        then
                                                                sampAddChatMessage(tag .. "Введите /r [Текст]", -1)
                                                        else
                                                                lua_thread.create(function()
                                                                sampSendChat("/me достал рацию из кармана")
                                                                wait(1400)
                                                                sampSendChat("/me поднёс рацию ко рту и что-то сказал ")
                                                                sampSendChat('/r ' ..var1) end)
                                                        end
                                                    end
Ты же шаришь что твой скрипт мега зависимый
 

Nelit

Потрачен
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
local result, sampev = pcall(require, 'lib.samp.events')

--main
if not result then
    sampAddChatMessage('Lib "SAMP Events" not found', -1)
    error('Lib "SAMP Events" not found') -- вообще лучше только эту оставить (и где идет сама библиотека), имхо
end
attempt to index local 'sampev' (a string value) ошибка
 

histor

Известный
175
113
Подскажите пожалуйста как постоянно делать проверку (if) пока работает скрипт, но выполнять действие 1 раз (например если if в бесконечном цикле )
 

Vintik

Мечтатель
Проверенный
1,466
915
Подскажите пожалуйста как постоянно делать проверку (if) пока работает скрипт, но выполнять действие 1 раз (например если if в бесконечном цикле )
Через переменную. Пример:
Lua:
require 'lib.moonloader'

function main()
  local work = false -- сработал ли иф уже 1 раз?
  while true do
    if isKeyJustPressed(VK_V) and not work then -- проверяем, что скрипт еще не работал
      work = true
      sampAddChatMessage('You pressed key V', -1)
    end
    wait(0)
  end
end
 

Nelit

Потрачен
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Подскажите пожалуйста как постоянно делать проверку (if) пока работает скрипт, но выполнять действие 1 раз (например если if в бесконечном цикле )
Lua:
local test = true

function main()
    -- main code

    while true do
        wait(0)

        if test then
            -- действие если условие выполнено
            test = false
        end

    end
end
 
  • Нравится
Реакции: Vintik

Nelit

Потрачен
252
38
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.