Вопросы по 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
 
Последнее редактирование:

Макс | Lycorn

Участник
166
13
При прописании кмд /sobe, крашит игру
Lua:
script_name('SMI HELPER')
script_author('tsunamiqq')
script_description('SMI HELPER')
script_version('1.0')
require "lib.moonloader"
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'
local encoding = require "encoding"
encoding.default = "CP1251"
u8 = encoding.UTF8
local inicfg = require 'inicfg'
local directIni = "moonloader\\config\\smihelper.ini"
local mainIni = inicfg.load(nil, directIni)
local stateIni = inicfg.save(mainIni, directIni)
local status = inicfg.load(mainIni, directIni)
local mainIni = inicfg.load({
    config = {
        nickname = false,
        rang = false,
        org = false,
        sex = false,
        town = false
    }
}, 'smihelper')
inicfg.save(mainIni, 'smihelper.ini')
local fa = require 'faIcons'
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
local checkbox1 = imgui.ImBool(false)
local combo_rang = imgui.ImInt(0)
local combo_org = imgui.ImInt(0)
local combo_sex = imgui.ImInt(0)
local combo_town = imgui.ImInt(0)
local combo_thems = imgui.ImInt(0)
local rang_list = {"Директор", "Зам.Директора", "Главный редактор", "Редактор", "Ведущий", "Репортёр", "Журналист", "Колумнист", "Стажер", "Ассистент Редакции"}
local org_list = {"СМИ г. Лос-Сантос", "СМИ г. Сан-Фиерро", "СМИ г. Лас-Вентурас"}
local sex_list = {"Мужской", "Женский"}
local town_list = {"Лос-Сантос", "Сан-Фиерро", "Лас-Вентурас"}
local nickname = imgui.ImBuffer(u8(mainIni.config.nickname), 256)
local org = imgui.ImBuffer(u8(mainIni.config.org), 256)
local sex = imgui.ImBuffer(u8(mainIni.config.sex), 256)
local town = imgui.ImBuffer(u8(mainIni.config.town), 256)
function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fontawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end
local main_window_state = imgui.ImBool(false)
local sobes = imgui.ImBool(false)
function imgui.OnDrawFrame()
    local iScreenWidth, iScreenHeight = getScreenResolution()
    local btn_size = imgui.ImVec2(-1, 0)
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin('SMI HELPER', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        imgui.BeginChild('##tabs', imgui.ImVec2(200, 460), true)
        if imgui.Button(fa.ICON_ADDRESS_BOOK .. ' Профиль', imgui.ImVec2(185,50), main_window_state) then act = 0 end
        if imgui.Button(fa.ICON_COG .. ' Настройки', imgui.ImVec2(185,50), main_window_state) then act = 1 end
        if imgui.Button(fa.ICON_BELL_O .. ' Собеседование', imgui.ImVec2(185,50), main_window_state) then act = 2 end
        if imgui.Button(fa.ICON_BULLHORN .. ' Эфиры', imgui.ImVec2(185,50), main_window_state) then act = 3 end
        if imgui.Button('Биндер', imgui.ImVec2(185,50), main_window_state) then act = 4 end
        if imgui.Button(fa.ICON_COMMENTING_O .. ' Проверка на знания', imgui.ImVec2(185,50), main_window_state) then act = 5 end
        if imgui.Button(fa.ICON_INFO .. ' О скрипте', imgui.ImVec2(185,50), main_window_state) then act = 6 end
        if imgui.Button(' Закрыть', imgui.ImVec2(185,50), main_window_state) then act = 7 end
        imgui.EndChild()
        imgui.SameLine()
        if act == 0 then
            imgui.BeginChild('##once121221', imgui.ImVec2(775,460), true)
            imgui.BeginChild('##2323223', imgui.ImVec2(760,200), true)
            imgui.CenterText('Информация о вас')
            imgui.Separator()
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. ' Имя и Фамилия: '..u8(mainIni.config.nickname))
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_USER_O .. ' Должность: '..mainIni.config.rang)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_BOOK .. ' Организация: '..mainIni.config.org)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_TRANSGENDER .. ' Пол: '..mainIni.config.sex)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_FIGHTER_JET .. ' Город: '..mainIni.config.town)
            imgui.EndChild()
            imgui.EndChild()
        elseif act == 1 then
            imgui.BeginChild('##3223', imgui.ImVec2(385,460), true)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.InputText('##0', nickname) then
                mainIni.config.nickname = (nickname.v)
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Имя и Фамилия:')
            imgui.Text(fa.ICON_USER_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##1', combo_rang, rang_list) then
                mainIni.config.rang = rang_list[(combo_rang.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Должность:')
            imgui.Text(fa.ICON_BOOK .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##2', combo_org, org_list) then
                mainIni.config.org = org_list[(combo_org.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Организация:')
            imgui.Text(fa.ICON_TRANSGENDER .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##3', combo_sex, sex_list) then
                mainIni.config.sex = sex_list[(combo_sex.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Пол:')
            imgui.Text(fa.ICON_FIGHTER_JET .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##4', combo_town, town_list) then
                mainIni.config.town = town_list[(combo_town.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Город:')
            imgui.PushItemWidth(150)
            imgui.PopItemWidth()
            imgui.Separator()
            imgui.Checkbox('', checkbox1)
            imgui.SameLine()
            imgui.Text('Авто-Редактирования Объявлений')
            imgui.Button('Готовые объявления', imgui.ImVec2(150,25))
            imgui.SameLine()
            imgui.Text('Найдено: 123')
            imgui.Separator()
            imgui.Combo('##thems', combo_thems, "123")
            imgui.SameLine()
            imgui.Text('Смена темы:')
            imgui.EndChild()
            imgui.SameLine()
            imgui.BeginChild('##once', imgui.ImVec2(385,460), true)
            imgui.CenterText('Статистика персонажа')
            imgui.Text('Дата и Время')
            imgui.Text('Онлайн за день')
            imgui.Text('Онлайн за неделю')
            imgui.Text('FPS')
            imgui.Text('Ping')
            imgui.Separator()
            imgui.CenterText('Команды')
            imgui.Text('/smi - Открыть меню скрипта')
            imgui.Text('/mb - Сокращает команду /members')
            imgui.Text('/showp (id) - Передать паспорт игроку с РП отыгровкой')
            imgui.Text('/showmed (id) - Передать мед.карту игроку с РП отыгровкой')
            imgui.Text('/showl (id) - Передать лицензии игроку с РП отыгровкой')
            imgui.Text('/wb (id) - Передать трудовую книжку игроку с РП отыгровкой')
            imgui.Text('/inv (id) - Принять игрока в организацию с РП отыгровкой')
            imgui.Text('/uninv (id) - Уволить игрока с организации с РП отыгровкой')
            imgui.Text('/gv (id) - Повысить сотрудника с РП отыгровкой')
            imgui.Text('/exp (id) - Выгнать игрока с здания с РП отыгровкой')
            imgui.EndChild()
        elseif act == 2 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.CenterText('Напишите команду /sob [id]')
            imgui.EndChild()
        elseif act == 3 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 4 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 5 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 6 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.Text(fa.ICON_USER_O .. ' Автор скрипта: tsunamiqq')
            imgui.Text(fa.ICON_ASTERISK .. ' Предложения: Margo_Lamour')
            imgui.Text(fa.ICON_USER_CIRCLE .. ' Discord: tsunamiqq#8608')
            imgui.Text(fa.ICON_COMMENT_O .. ' VK: https://vk.com/maks.tsunami')
            imgui.Text(fa.ICON_SUPERPOWERS .. ' Версия скрипта: 1.0')
            imgui.EndChild()
        elseif act == 7 then
            main_window_state.v = false
        end
    end
    imgui.End()
end
if sobes.v then
    imgui.SetNextWindowSize(imgui.ImVec2(880, 380), imgui.Cond.FirstUseEver)
    imgui.Begin('123', imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.End()
end
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(2000) end
    sampAddChatMessage(u8:decode'[SMI] Скрипт успешно запущен!', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Активация: /smi', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Автор: tsunamiqq', 0x00BFFF)
    sampRegisterChatCommand('famh', function() main_window_state.v = not main_window_state.v end)
    sampRegisterChatCommand('sobe', function() sobes.v = not sobes.v end)
    sampRegisterChatCommand('mb',cmd_mb)
    sampRegisterChatCommand('showp',cmd_showp)
    sampRegisterChatCommand('showmed',cmd_showmed)
    sampRegisterChatCommand('showl',cmd_showl)
    sampRegisterChatCommand('wb',cmd_wb)
    sampRegisterChatCommand('inv',cmd_inv)
    sampRegisterChatCommand('uninv',cmd_uninv)
    sampRegisterChatCommand('gv',cmd_gv)
    sampRegisterChatCommand('exp',cmd_exp)
    while true do
        wait(0)
        imgui.Process = main_window_state.v or sobes.v
    end
end
function cmd_mb()
    lua_thread.create(function()
        sampSendChat('/members')
    end)
end
function cmd_showp(id)
    lua_thread.create(function()
        sampSendChat('/do Паспорт находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) документ из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив ')
            wait(1000)
        sampSendChat('/showpass '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать паспорт к себе'.
    end)
end
function cmd_showmed(id)
    lua_thread.create(function()
        sampSendChat('/do Медицинская карта находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) мед.карту из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать медкарту к себе'.
    end)
end
function cmd_showl(id)
    lua_thread.create(function()
        sampSendChat('/do Папка с лицензиями находится в руках')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать лицензии к себе'.
    end)
end
function cmd_wb(id)
    lua_thread.create(function()
        sampSendChat('/do Трудовая книга находится в кармане ')
            wait(1500)
        sampSendChat('/me достал(а) трудовую книгу из кармана ')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/wbook '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать труд.книжку к себе'.
    end)
end
function cmd_inv(id)
    lua_thread.create(function()
        sampSendChat('/do Ключ от раздевалки в кармане ')
            wait(1500)
        sampSendChat('/me передал ключ человеку напротив')
            wait(1500)
        sampSendChat('Ключи от вашего шкафчика. Раздевалка на втором этаже')
            wait(1000)
        sampSendChat('/invite '..id..' ')
    end)
end
function imgui.CenterText(text, color)
    color = color or imgui.GetStyle().Colors[imgui.Col.Text]
    local width = imgui.GetWindowWidth()
    for line in text:gmatch('[^\n]+') do
        local lenght = imgui.CalcTextSize(line).x
        imgui.SetCursorPosX((width - lenght) / 2)
        imgui.TextColored(color, line)
    end
end
function apply_custom_style()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    
    colors[clr.Text]                 = ImVec4(1.00, 1.00, 1.00, 0.78)
    colors[clr.TextDisabled]         = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.WindowBg]             = ImVec4(0.11, 0.15, 0.17, 1.00)
    colors[clr.ChildWindowBg]        = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.PopupBg]              = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.Border]               = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]         = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.FrameBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.FrameBgHovered]       = ImVec4(0.12, 0.20, 0.28, 1.00)
    colors[clr.FrameBgActive]        = ImVec4(0.09, 0.12, 0.14, 1.00)
    colors[clr.TitleBg]              = ImVec4(0.53, 0.20, 0.16, 0.65)
    colors[clr.TitleBgActive]        = ImVec4(0.56, 0.14, 0.14, 1.00)
    colors[clr.TitleBgCollapsed]     = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.MenuBarBg]            = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.ScrollbarBg]          = ImVec4(0.02, 0.02, 0.02, 0.39)
    colors[clr.ScrollbarGrab]        = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.18, 0.22, 0.25, 1.00)
    colors[clr.ScrollbarGrabActive]  = ImVec4(0.09, 0.21, 0.31, 1.00)
    colors[clr.ComboBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.CheckMark]            = ImVec4(1.00, 0.28, 0.28, 1.00)
    colors[clr.SliderGrab]           = ImVec4(0.64, 0.14, 0.14, 1.00)
    colors[clr.SliderGrabActive]     = ImVec4(1.00, 0.37, 0.37, 1.00)
    colors[clr.Button]               = ImVec4(0.59, 0.13, 0.13, 1.00)
    colors[clr.ButtonHovered]        = ImVec4(0.69, 0.15, 0.15, 1.00)
    colors[clr.ButtonActive]         = ImVec4(0.67, 0.13, 0.07, 1.00)
    colors[clr.Header]               = ImVec4(0.20, 0.25, 0.29, 0.55)
    colors[clr.HeaderHovered]        = ImVec4(0.98, 0.38, 0.26, 0.80)
    colors[clr.HeaderActive]         = ImVec4(0.98, 0.26, 0.26, 1.00)
    colors[clr.Separator]            = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.SeparatorHovered]     = ImVec4(0.60, 0.60, 0.70, 1.00)
    colors[clr.SeparatorActive]      = ImVec4(0.70, 0.70, 0.90, 1.00)
    colors[clr.ResizeGrip]           = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]    = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]     = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton]          = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered]   = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive]    = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines]            = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]     = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]        = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]       = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
end
apply_custom_style()
 

Leon_Trotsky

Участник
39
2
Как получить 3 разных аргумента на команду?

Пример реализации:
Юзер вводит /ban и дальше 3 агрумента:
  • ID
  • Время
  • Причина
В пункте "причина" может быть введены от 1 до 5 слов
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,798
2,659
Как получить 3 разных аргумента на команду?

Пример реализации:
Юзер вводит /ban и дальше 3 агрумента:
  • ID
  • Время
  • Причина
В пункте "причина" может быть введены от 1 до 5 слов
если тебе надо перехватить отправляему команду, то вот:
Lua:
local sampev = require("samp.events")


local PATTERN = "/ban (%d+) (%d+) (.+)"


function sampev.onSendCommand(command)
    if command:find(PATTERN) then
        local id, time, reason = text:match(PATTERN)
        print(id, time, reason)
    end
end
 
  • Вау
Реакции: MLycoris

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,992
2,187
Я хочу рассчитать свой уровень. Каждый уровень требует +4 очка уважения. Как мне сделать команду, которая с ее помощью показывает требуемые очки уважения для этого уровня?
Скажем, для уровня 2 вам нужно 2RP.
Для уровня 3 вам нужно 6RP.
Так что для каждого уровня вам нужно +4RP.
Когда я наберу /reqlev 29, скрипт отобразит строку чата с необходимым RP для повышения уровня.
Lua:
function main()
    sampRegisterChatCommand('reqlev', function(arg)
        if tonumber(arg) > 1 then
            sampAddChatMessage(arg*4-2,-1)
        end
    end)
    wait(-1)
end
 

accord-

Потрачен
437
79
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
есть скрипт у кого, который показывает клавиши игрока в реконе?
 

777qwerty777

Известный
62
18
как отправить нажатие H и esc (с ног)?
как понял, отправка в PlayerSync, но где - хз
 

xForward

Участник
13
1
Что юзать вместо этого, если это устарело?
IMG_9842.png
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,992
2,187
Что юзать вместо этого, если это устарело?
ты можешь просто 1, вместо плеер педа вьебать, тк он хранит единицу, оба варианта ниже правильны
Lua:
-- пример
isCharInAnyCar(PLAYER_PED)
isCharInAnyCar(1)

При прописании кмд /sobe, крашит игру
Lua:
script_name('SMI HELPER')
script_author('tsunamiqq')
script_description('SMI HELPER')
script_version('1.0')
require "lib.moonloader"
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'
local encoding = require "encoding"
encoding.default = "CP1251"
u8 = encoding.UTF8
local inicfg = require 'inicfg'
local directIni = "moonloader\\config\\smihelper.ini"
local mainIni = inicfg.load(nil, directIni)
local stateIni = inicfg.save(mainIni, directIni)
local status = inicfg.load(mainIni, directIni)
local mainIni = inicfg.load({
    config = {
        nickname = false,
        rang = false,
        org = false,
        sex = false,
        town = false
    }
}, 'smihelper')
inicfg.save(mainIni, 'smihelper.ini')
local fa = require 'faIcons'
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
local checkbox1 = imgui.ImBool(false)
local combo_rang = imgui.ImInt(0)
local combo_org = imgui.ImInt(0)
local combo_sex = imgui.ImInt(0)
local combo_town = imgui.ImInt(0)
local combo_thems = imgui.ImInt(0)
local rang_list = {"Директор", "Зам.Директора", "Главный редактор", "Редактор", "Ведущий", "Репортёр", "Журналист", "Колумнист", "Стажер", "Ассистент Редакции"}
local org_list = {"СМИ г. Лос-Сантос", "СМИ г. Сан-Фиерро", "СМИ г. Лас-Вентурас"}
local sex_list = {"Мужской", "Женский"}
local town_list = {"Лос-Сантос", "Сан-Фиерро", "Лас-Вентурас"}
local nickname = imgui.ImBuffer(u8(mainIni.config.nickname), 256)
local org = imgui.ImBuffer(u8(mainIni.config.org), 256)
local sex = imgui.ImBuffer(u8(mainIni.config.sex), 256)
local town = imgui.ImBuffer(u8(mainIni.config.town), 256)
function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fontawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end
local main_window_state = imgui.ImBool(false)
local sobes = imgui.ImBool(false)
function imgui.OnDrawFrame()
    local iScreenWidth, iScreenHeight = getScreenResolution()
    local btn_size = imgui.ImVec2(-1, 0)
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin('SMI HELPER', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        imgui.BeginChild('##tabs', imgui.ImVec2(200, 460), true)
        if imgui.Button(fa.ICON_ADDRESS_BOOK .. ' Профиль', imgui.ImVec2(185,50), main_window_state) then act = 0 end
        if imgui.Button(fa.ICON_COG .. ' Настройки', imgui.ImVec2(185,50), main_window_state) then act = 1 end
        if imgui.Button(fa.ICON_BELL_O .. ' Собеседование', imgui.ImVec2(185,50), main_window_state) then act = 2 end
        if imgui.Button(fa.ICON_BULLHORN .. ' Эфиры', imgui.ImVec2(185,50), main_window_state) then act = 3 end
        if imgui.Button('Биндер', imgui.ImVec2(185,50), main_window_state) then act = 4 end
        if imgui.Button(fa.ICON_COMMENTING_O .. ' Проверка на знания', imgui.ImVec2(185,50), main_window_state) then act = 5 end
        if imgui.Button(fa.ICON_INFO .. ' О скрипте', imgui.ImVec2(185,50), main_window_state) then act = 6 end
        if imgui.Button(' Закрыть', imgui.ImVec2(185,50), main_window_state) then act = 7 end
        imgui.EndChild()
        imgui.SameLine()
        if act == 0 then
            imgui.BeginChild('##once121221', imgui.ImVec2(775,460), true)
            imgui.BeginChild('##2323223', imgui.ImVec2(760,200), true)
            imgui.CenterText('Информация о вас')
            imgui.Separator()
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. ' Имя и Фамилия: '..u8(mainIni.config.nickname))
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_USER_O .. ' Должность: '..mainIni.config.rang)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_BOOK .. ' Организация: '..mainIni.config.org)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_TRANSGENDER .. ' Пол: '..mainIni.config.sex)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_FIGHTER_JET .. ' Город: '..mainIni.config.town)
            imgui.EndChild()
            imgui.EndChild()
        elseif act == 1 then
            imgui.BeginChild('##3223', imgui.ImVec2(385,460), true)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.InputText('##0', nickname) then
                mainIni.config.nickname = (nickname.v)
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Имя и Фамилия:')
            imgui.Text(fa.ICON_USER_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##1', combo_rang, rang_list) then
                mainIni.config.rang = rang_list[(combo_rang.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Должность:')
            imgui.Text(fa.ICON_BOOK .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##2', combo_org, org_list) then
                mainIni.config.org = org_list[(combo_org.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Организация:')
            imgui.Text(fa.ICON_TRANSGENDER .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##3', combo_sex, sex_list) then
                mainIni.config.sex = sex_list[(combo_sex.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Пол:')
            imgui.Text(fa.ICON_FIGHTER_JET .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##4', combo_town, town_list) then
                mainIni.config.town = town_list[(combo_town.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Город:')
            imgui.PushItemWidth(150)
            imgui.PopItemWidth()
            imgui.Separator()
            imgui.Checkbox('', checkbox1)
            imgui.SameLine()
            imgui.Text('Авто-Редактирования Объявлений')
            imgui.Button('Готовые объявления', imgui.ImVec2(150,25))
            imgui.SameLine()
            imgui.Text('Найдено: 123')
            imgui.Separator()
            imgui.Combo('##thems', combo_thems, "123")
            imgui.SameLine()
            imgui.Text('Смена темы:')
            imgui.EndChild()
            imgui.SameLine()
            imgui.BeginChild('##once', imgui.ImVec2(385,460), true)
            imgui.CenterText('Статистика персонажа')
            imgui.Text('Дата и Время')
            imgui.Text('Онлайн за день')
            imgui.Text('Онлайн за неделю')
            imgui.Text('FPS')
            imgui.Text('Ping')
            imgui.Separator()
            imgui.CenterText('Команды')
            imgui.Text('/smi - Открыть меню скрипта')
            imgui.Text('/mb - Сокращает команду /members')
            imgui.Text('/showp (id) - Передать паспорт игроку с РП отыгровкой')
            imgui.Text('/showmed (id) - Передать мед.карту игроку с РП отыгровкой')
            imgui.Text('/showl (id) - Передать лицензии игроку с РП отыгровкой')
            imgui.Text('/wb (id) - Передать трудовую книжку игроку с РП отыгровкой')
            imgui.Text('/inv (id) - Принять игрока в организацию с РП отыгровкой')
            imgui.Text('/uninv (id) - Уволить игрока с организации с РП отыгровкой')
            imgui.Text('/gv (id) - Повысить сотрудника с РП отыгровкой')
            imgui.Text('/exp (id) - Выгнать игрока с здания с РП отыгровкой')
            imgui.EndChild()
        elseif act == 2 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.CenterText('Напишите команду /sob [id]')
            imgui.EndChild()
        elseif act == 3 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 4 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 5 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 6 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.Text(fa.ICON_USER_O .. ' Автор скрипта: tsunamiqq')
            imgui.Text(fa.ICON_ASTERISK .. ' Предложения: Margo_Lamour')
            imgui.Text(fa.ICON_USER_CIRCLE .. ' Discord: tsunamiqq#8608')
            imgui.Text(fa.ICON_COMMENT_O .. ' VK: https://vk.com/maks.tsunami')
            imgui.Text(fa.ICON_SUPERPOWERS .. ' Версия скрипта: 1.0')
            imgui.EndChild()
        elseif act == 7 then
            main_window_state.v = false
        end
    end
    imgui.End()
end
if sobes.v then
    imgui.SetNextWindowSize(imgui.ImVec2(880, 380), imgui.Cond.FirstUseEver)
    imgui.Begin('123', imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.End()
end
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(2000) end
    sampAddChatMessage(u8:decode'[SMI] Скрипт успешно запущен!', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Активация: /smi', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Автор: tsunamiqq', 0x00BFFF)
    sampRegisterChatCommand('famh', function() main_window_state.v = not main_window_state.v end)
    sampRegisterChatCommand('sobe', function() sobes.v = not sobes.v end)
    sampRegisterChatCommand('mb',cmd_mb)
    sampRegisterChatCommand('showp',cmd_showp)
    sampRegisterChatCommand('showmed',cmd_showmed)
    sampRegisterChatCommand('showl',cmd_showl)
    sampRegisterChatCommand('wb',cmd_wb)
    sampRegisterChatCommand('inv',cmd_inv)
    sampRegisterChatCommand('uninv',cmd_uninv)
    sampRegisterChatCommand('gv',cmd_gv)
    sampRegisterChatCommand('exp',cmd_exp)
    while true do
        wait(0)
        imgui.Process = main_window_state.v or sobes.v
    end
end
function cmd_mb()
    lua_thread.create(function()
        sampSendChat('/members')
    end)
end
function cmd_showp(id)
    lua_thread.create(function()
        sampSendChat('/do Паспорт находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) документ из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив ')
            wait(1000)
        sampSendChat('/showpass '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать паспорт к себе'.
    end)
end
function cmd_showmed(id)
    lua_thread.create(function()
        sampSendChat('/do Медицинская карта находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) мед.карту из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать медкарту к себе'.
    end)
end
function cmd_showl(id)
    lua_thread.create(function()
        sampSendChat('/do Папка с лицензиями находится в руках')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать лицензии к себе'.
    end)
end
function cmd_wb(id)
    lua_thread.create(function()
        sampSendChat('/do Трудовая книга находится в кармане ')
            wait(1500)
        sampSendChat('/me достал(а) трудовую книгу из кармана ')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/wbook '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать труд.книжку к себе'.
    end)
end
function cmd_inv(id)
    lua_thread.create(function()
        sampSendChat('/do Ключ от раздевалки в кармане ')
            wait(1500)
        sampSendChat('/me передал ключ человеку напротив')
            wait(1500)
        sampSendChat('Ключи от вашего шкафчика. Раздевалка на втором этаже')
            wait(1000)
        sampSendChat('/invite '..id..' ')
    end)
end
function imgui.CenterText(text, color)
    color = color or imgui.GetStyle().Colors[imgui.Col.Text]
    local width = imgui.GetWindowWidth()
    for line in text:gmatch('[^\n]+') do
        local lenght = imgui.CalcTextSize(line).x
        imgui.SetCursorPosX((width - lenght) / 2)
        imgui.TextColored(color, line)
    end
end
function apply_custom_style()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    
    colors[clr.Text]                 = ImVec4(1.00, 1.00, 1.00, 0.78)
    colors[clr.TextDisabled]         = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.WindowBg]             = ImVec4(0.11, 0.15, 0.17, 1.00)
    colors[clr.ChildWindowBg]        = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.PopupBg]              = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.Border]               = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]         = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.FrameBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.FrameBgHovered]       = ImVec4(0.12, 0.20, 0.28, 1.00)
    colors[clr.FrameBgActive]        = ImVec4(0.09, 0.12, 0.14, 1.00)
    colors[clr.TitleBg]              = ImVec4(0.53, 0.20, 0.16, 0.65)
    colors[clr.TitleBgActive]        = ImVec4(0.56, 0.14, 0.14, 1.00)
    colors[clr.TitleBgCollapsed]     = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.MenuBarBg]            = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.ScrollbarBg]          = ImVec4(0.02, 0.02, 0.02, 0.39)
    colors[clr.ScrollbarGrab]        = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.18, 0.22, 0.25, 1.00)
    colors[clr.ScrollbarGrabActive]  = ImVec4(0.09, 0.21, 0.31, 1.00)
    colors[clr.ComboBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.CheckMark]            = ImVec4(1.00, 0.28, 0.28, 1.00)
    colors[clr.SliderGrab]           = ImVec4(0.64, 0.14, 0.14, 1.00)
    colors[clr.SliderGrabActive]     = ImVec4(1.00, 0.37, 0.37, 1.00)
    colors[clr.Button]               = ImVec4(0.59, 0.13, 0.13, 1.00)
    colors[clr.ButtonHovered]        = ImVec4(0.69, 0.15, 0.15, 1.00)
    colors[clr.ButtonActive]         = ImVec4(0.67, 0.13, 0.07, 1.00)
    colors[clr.Header]               = ImVec4(0.20, 0.25, 0.29, 0.55)
    colors[clr.HeaderHovered]        = ImVec4(0.98, 0.38, 0.26, 0.80)
    colors[clr.HeaderActive]         = ImVec4(0.98, 0.26, 0.26, 1.00)
    colors[clr.Separator]            = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.SeparatorHovered]     = ImVec4(0.60, 0.60, 0.70, 1.00)
    colors[clr.SeparatorActive]      = ImVec4(0.70, 0.70, 0.90, 1.00)
    colors[clr.ResizeGrip]           = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]    = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]     = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton]          = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered]   = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive]    = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines]            = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]     = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]        = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]       = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
end
apply_custom_style()
Перечитай гайд на имгуи
 
Последнее редактирование:
  • Нравится
Реакции: riverya4life

XRLM

Против ветра рождённый
Проверенный
1,515
1,104
Как отправить серверу синхру что машина едет прямо?
посмотри в сурсах рванок как там отправляется синхра

как отправить нажатие H и esc (с ног)?
как понял, отправка в PlayerSync, но где - хз
data.keys вроде, посмотри структуру онфут синхры в samp/synchonization.lua
При прописании кмд /sobe, крашит игру
Lua:
script_name('SMI HELPER')
script_author('tsunamiqq')
script_description('SMI HELPER')
script_version('1.0')
require "lib.moonloader"
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'
local encoding = require "encoding"
encoding.default = "CP1251"
u8 = encoding.UTF8
local inicfg = require 'inicfg'
local directIni = "moonloader\\config\\smihelper.ini"
local mainIni = inicfg.load(nil, directIni)
local stateIni = inicfg.save(mainIni, directIni)
local status = inicfg.load(mainIni, directIni)
local mainIni = inicfg.load({
    config = {
        nickname = false,
        rang = false,
        org = false,
        sex = false,
        town = false
    }
}, 'smihelper')
inicfg.save(mainIni, 'smihelper.ini')
local fa = require 'faIcons'
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
local checkbox1 = imgui.ImBool(false)
local combo_rang = imgui.ImInt(0)
local combo_org = imgui.ImInt(0)
local combo_sex = imgui.ImInt(0)
local combo_town = imgui.ImInt(0)
local combo_thems = imgui.ImInt(0)
local rang_list = {"Директор", "Зам.Директора", "Главный редактор", "Редактор", "Ведущий", "Репортёр", "Журналист", "Колумнист", "Стажер", "Ассистент Редакции"}
local org_list = {"СМИ г. Лос-Сантос", "СМИ г. Сан-Фиерро", "СМИ г. Лас-Вентурас"}
local sex_list = {"Мужской", "Женский"}
local town_list = {"Лос-Сантос", "Сан-Фиерро", "Лас-Вентурас"}
local nickname = imgui.ImBuffer(u8(mainIni.config.nickname), 256)
local org = imgui.ImBuffer(u8(mainIni.config.org), 256)
local sex = imgui.ImBuffer(u8(mainIni.config.sex), 256)
local town = imgui.ImBuffer(u8(mainIni.config.town), 256)
function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fontawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end
local main_window_state = imgui.ImBool(false)
local sobes = imgui.ImBool(false)
function imgui.OnDrawFrame()
    local iScreenWidth, iScreenHeight = getScreenResolution()
    local btn_size = imgui.ImVec2(-1, 0)
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(1000, 500), imgui.Cond.FirstUseEver)
        imgui.Begin('SMI HELPER', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        imgui.BeginChild('##tabs', imgui.ImVec2(200, 460), true)
        if imgui.Button(fa.ICON_ADDRESS_BOOK .. ' Профиль', imgui.ImVec2(185,50), main_window_state) then act = 0 end
        if imgui.Button(fa.ICON_COG .. ' Настройки', imgui.ImVec2(185,50), main_window_state) then act = 1 end
        if imgui.Button(fa.ICON_BELL_O .. ' Собеседование', imgui.ImVec2(185,50), main_window_state) then act = 2 end
        if imgui.Button(fa.ICON_BULLHORN .. ' Эфиры', imgui.ImVec2(185,50), main_window_state) then act = 3 end
        if imgui.Button('Биндер', imgui.ImVec2(185,50), main_window_state) then act = 4 end
        if imgui.Button(fa.ICON_COMMENTING_O .. ' Проверка на знания', imgui.ImVec2(185,50), main_window_state) then act = 5 end
        if imgui.Button(fa.ICON_INFO .. ' О скрипте', imgui.ImVec2(185,50), main_window_state) then act = 6 end
        if imgui.Button(' Закрыть', imgui.ImVec2(185,50), main_window_state) then act = 7 end
        imgui.EndChild()
        imgui.SameLine()
        if act == 0 then
            imgui.BeginChild('##once121221', imgui.ImVec2(775,460), true)
            imgui.BeginChild('##2323223', imgui.ImVec2(760,200), true)
            imgui.CenterText('Информация о вас')
            imgui.Separator()
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. ' Имя и Фамилия: '..u8(mainIni.config.nickname))
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_USER_O .. ' Должность: '..mainIni.config.rang)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_BOOK .. ' Организация: '..mainIni.config.org)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_TRANSGENDER .. ' Пол: '..mainIni.config.sex)
            imgui.SetCursorPosX(50)
            imgui.Text(fa.ICON_FIGHTER_JET .. ' Город: '..mainIni.config.town)
            imgui.EndChild()
            imgui.EndChild()
        elseif act == 1 then
            imgui.BeginChild('##3223', imgui.ImVec2(385,460), true)
            imgui.Text(fa.ICON_ADDRESS_CARD_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.InputText('##0', nickname) then
                mainIni.config.nickname = (nickname.v)
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Имя и Фамилия:')
            imgui.Text(fa.ICON_USER_O .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##1', combo_rang, rang_list) then
                mainIni.config.rang = rang_list[(combo_rang.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Должность:')
            imgui.Text(fa.ICON_BOOK .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##2', combo_org, org_list) then
                mainIni.config.org = org_list[(combo_org.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Организация:')
            imgui.Text(fa.ICON_TRANSGENDER .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##3', combo_sex, sex_list) then
                mainIni.config.sex = sex_list[(combo_sex.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Пол:')
            imgui.Text(fa.ICON_FIGHTER_JET .. '')
            imgui.SameLine()
            imgui.SetCursorPosX(30)
            imgui.PushItemWidth(150)
            if imgui.Combo('##4', combo_town, town_list) then
                mainIni.config.town = town_list[(combo_town.v + 1)]
                inicfg.save(mainIni, 'smihelper.ini')
            end
            imgui.PopItemWidth()
            imgui.SameLine()
            imgui.Text('Город:')
            imgui.PushItemWidth(150)
            imgui.PopItemWidth()
            imgui.Separator()
            imgui.Checkbox('', checkbox1)
            imgui.SameLine()
            imgui.Text('Авто-Редактирования Объявлений')
            imgui.Button('Готовые объявления', imgui.ImVec2(150,25))
            imgui.SameLine()
            imgui.Text('Найдено: 123')
            imgui.Separator()
            imgui.Combo('##thems', combo_thems, "123")
            imgui.SameLine()
            imgui.Text('Смена темы:')
            imgui.EndChild()
            imgui.SameLine()
            imgui.BeginChild('##once', imgui.ImVec2(385,460), true)
            imgui.CenterText('Статистика персонажа')
            imgui.Text('Дата и Время')
            imgui.Text('Онлайн за день')
            imgui.Text('Онлайн за неделю')
            imgui.Text('FPS')
            imgui.Text('Ping')
            imgui.Separator()
            imgui.CenterText('Команды')
            imgui.Text('/smi - Открыть меню скрипта')
            imgui.Text('/mb - Сокращает команду /members')
            imgui.Text('/showp (id) - Передать паспорт игроку с РП отыгровкой')
            imgui.Text('/showmed (id) - Передать мед.карту игроку с РП отыгровкой')
            imgui.Text('/showl (id) - Передать лицензии игроку с РП отыгровкой')
            imgui.Text('/wb (id) - Передать трудовую книжку игроку с РП отыгровкой')
            imgui.Text('/inv (id) - Принять игрока в организацию с РП отыгровкой')
            imgui.Text('/uninv (id) - Уволить игрока с организации с РП отыгровкой')
            imgui.Text('/gv (id) - Повысить сотрудника с РП отыгровкой')
            imgui.Text('/exp (id) - Выгнать игрока с здания с РП отыгровкой')
            imgui.EndChild()
        elseif act == 2 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.CenterText('Напишите команду /sob [id]')
            imgui.EndChild()
        elseif act == 3 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 4 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 5 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.EndChild()
        elseif act == 6 then
            imgui.BeginChild('##once', imgui.ImVec2(775, 460), true)
            imgui.Text(fa.ICON_USER_O .. ' Автор скрипта: tsunamiqq')
            imgui.Text(fa.ICON_ASTERISK .. ' Предложения: Margo_Lamour')
            imgui.Text(fa.ICON_USER_CIRCLE .. ' Discord: tsunamiqq#8608')
            imgui.Text(fa.ICON_COMMENT_O .. ' VK: https://vk.com/maks.tsunami')
            imgui.Text(fa.ICON_SUPERPOWERS .. ' Версия скрипта: 1.0')
            imgui.EndChild()
        elseif act == 7 then
            main_window_state.v = false
        end
    end
    imgui.End()
end
if sobes.v then
    imgui.SetNextWindowSize(imgui.ImVec2(880, 380), imgui.Cond.FirstUseEver)
    imgui.Begin('123', imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.End()
end
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(2000) end
    sampAddChatMessage(u8:decode'[SMI] Скрипт успешно запущен!', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Активация: /smi', 0x00BFFF)
    sampAddChatMessage(u8:decode'[SMI] Автор: tsunamiqq', 0x00BFFF)
    sampRegisterChatCommand('famh', function() main_window_state.v = not main_window_state.v end)
    sampRegisterChatCommand('sobe', function() sobes.v = not sobes.v end)
    sampRegisterChatCommand('mb',cmd_mb)
    sampRegisterChatCommand('showp',cmd_showp)
    sampRegisterChatCommand('showmed',cmd_showmed)
    sampRegisterChatCommand('showl',cmd_showl)
    sampRegisterChatCommand('wb',cmd_wb)
    sampRegisterChatCommand('inv',cmd_inv)
    sampRegisterChatCommand('uninv',cmd_uninv)
    sampRegisterChatCommand('gv',cmd_gv)
    sampRegisterChatCommand('exp',cmd_exp)
    while true do
        wait(0)
        imgui.Process = main_window_state.v or sobes.v
    end
end
function cmd_mb()
    lua_thread.create(function()
        sampSendChat('/members')
    end)
end
function cmd_showp(id)
    lua_thread.create(function()
        sampSendChat('/do Паспорт находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) документ из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив ')
            wait(1000)
        sampSendChat('/showpass '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать паспорт к себе'.
    end)
end
function cmd_showmed(id)
    lua_thread.create(function()
        sampSendChat('/do Медицинская карта находится в кармане')
            wait(1500)
        sampSendChat('/me достал(а) мед.карту из кармана')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать медкарту к себе'.
    end)
end
function cmd_showl(id)
    lua_thread.create(function()
        sampSendChat('/do Папка с лицензиями находится в руках')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/showmc '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать лицензии к себе'.
    end)
end
function cmd_wb(id)
    lua_thread.create(function()
        sampSendChat('/do Трудовая книга находится в кармане ')
            wait(1500)
        sampSendChat('/me достал(а) трудовую книгу из кармана ')
            wait(1500)
        sampSendChat('/me передал(а) человеку напротив')
            wait(1000)
        sampSendChat('/wbook '..id..' ')
        --Сделать всплывающее окно с кнопкой, для действия 'забрать труд.книжку к себе'.
    end)
end
function cmd_inv(id)
    lua_thread.create(function()
        sampSendChat('/do Ключ от раздевалки в кармане ')
            wait(1500)
        sampSendChat('/me передал ключ человеку напротив')
            wait(1500)
        sampSendChat('Ключи от вашего шкафчика. Раздевалка на втором этаже')
            wait(1000)
        sampSendChat('/invite '..id..' ')
    end)
end
function imgui.CenterText(text, color)
    color = color or imgui.GetStyle().Colors[imgui.Col.Text]
    local width = imgui.GetWindowWidth()
    for line in text:gmatch('[^\n]+') do
        local lenght = imgui.CalcTextSize(line).x
        imgui.SetCursorPosX((width - lenght) / 2)
        imgui.TextColored(color, line)
    end
end
function apply_custom_style()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
   
    colors[clr.Text]                 = ImVec4(1.00, 1.00, 1.00, 0.78)
    colors[clr.TextDisabled]         = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.WindowBg]             = ImVec4(0.11, 0.15, 0.17, 1.00)
    colors[clr.ChildWindowBg]        = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.PopupBg]              = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.Border]               = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]         = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.FrameBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.FrameBgHovered]       = ImVec4(0.12, 0.20, 0.28, 1.00)
    colors[clr.FrameBgActive]        = ImVec4(0.09, 0.12, 0.14, 1.00)
    colors[clr.TitleBg]              = ImVec4(0.53, 0.20, 0.16, 0.65)
    colors[clr.TitleBgActive]        = ImVec4(0.56, 0.14, 0.14, 1.00)
    colors[clr.TitleBgCollapsed]     = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.MenuBarBg]            = ImVec4(0.15, 0.18, 0.22, 1.00)
    colors[clr.ScrollbarBg]          = ImVec4(0.02, 0.02, 0.02, 0.39)
    colors[clr.ScrollbarGrab]        = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.ScrollbarGrabHovered] = ImVec4(0.18, 0.22, 0.25, 1.00)
    colors[clr.ScrollbarGrabActive]  = ImVec4(0.09, 0.21, 0.31, 1.00)
    colors[clr.ComboBg]              = ImVec4(0.20, 0.25, 0.29, 1.00)
    colors[clr.CheckMark]            = ImVec4(1.00, 0.28, 0.28, 1.00)
    colors[clr.SliderGrab]           = ImVec4(0.64, 0.14, 0.14, 1.00)
    colors[clr.SliderGrabActive]     = ImVec4(1.00, 0.37, 0.37, 1.00)
    colors[clr.Button]               = ImVec4(0.59, 0.13, 0.13, 1.00)
    colors[clr.ButtonHovered]        = ImVec4(0.69, 0.15, 0.15, 1.00)
    colors[clr.ButtonActive]         = ImVec4(0.67, 0.13, 0.07, 1.00)
    colors[clr.Header]               = ImVec4(0.20, 0.25, 0.29, 0.55)
    colors[clr.HeaderHovered]        = ImVec4(0.98, 0.38, 0.26, 0.80)
    colors[clr.HeaderActive]         = ImVec4(0.98, 0.26, 0.26, 1.00)
    colors[clr.Separator]            = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.SeparatorHovered]     = ImVec4(0.60, 0.60, 0.70, 1.00)
    colors[clr.SeparatorActive]      = ImVec4(0.70, 0.70, 0.90, 1.00)
    colors[clr.ResizeGrip]           = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]    = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]     = ImVec4(0.06, 0.05, 0.07, 1.00)
    colors[clr.CloseButton]          = ImVec4(0.40, 0.39, 0.38, 0.16)
    colors[clr.CloseButtonHovered]   = ImVec4(0.40, 0.39, 0.38, 0.39)
    colors[clr.CloseButtonActive]    = ImVec4(0.40, 0.39, 0.38, 1.00)
    colors[clr.PlotLines]            = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]     = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]        = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered] = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]       = ImVec4(0.25, 1.00, 0.00, 0.43)
    colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
end
apply_custom_style()
смотри как правильно объявлять переменные для буффера
 
Последнее редактирование:
  • Нравится
Реакции: goodflex

Макс | Lycorn

Участник
166
13
посмотри в сурсах рванок как там отправляется синхра


data.keys вроде, посмотри структуру онфут синхры в samp/synchonization.lua

смотри как правильно объявлять переменные для буффера
Посмотрел, ошибок не увидел :) Можешь помочь пожалуйста
 

777qwerty777

Известный
62
18
посмотри в сурсах рванок как там отправляется синхра


data.keys вроде, посмотри структуру онфут синхры в samp/synchonization.lua

смотри как правильно объявлять переменные для буффера
В первую очередь проверял, на обе клавиши keysData не меняется, по этой причине и задал вопрос.
Но если отслеживать отправку пакетов - отправляется во время нажатия именно PlayerSync.
Так-же пробовал эмуляцию через setGameKeyState, не срабатывает
 

accord-

Потрачен
437
79
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как можно перебрать иды в файле и сверять, если уже есть в списке тогда пишет "нет", если нету тогда "успешно"
Локальная res передает иды которые надо сверять
Lua:
local file = ('config/asd.ini')
for line in io.lines(file) do
    if username == line then
        local f = io.open('config/asd.ini', 'a')
        f:write(res..'\n')
        f:close()
        return print('нет')
    else
        return print('успешно')
    end
end
ап, я и так не могу сделать
(Крч, команда передает ид и записывает его в файлик, а мне надо перебрать этот файлик и сверить есть ли этот ид уже в файле, если есть тогда добавить в чат "нет")
 
Последнее редактирование: