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

Pashyka

Участник
220
17
Учти, что код будет срабатывать при каждом спавне перса
Lua:
function sampev.onSendSpawn()
    sampSendChat("/stats")
end

-- либо так
function onReceiveRpc(id, bs)
    if id == 52 then -- RPC SPAWN
        sampSendChat("/stats")
    end
end


актуально...

С Rpc пакетами вообще почему-то не робит, скрипт запускается, но функция не выполняется никак
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,746
Почему крашит
Когда я пишу +
Lua:
function se.onServerMessage(color, text)
    if checkbox1.v then
        if text:find('+')  then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
            sampAddChatMessage(tag .. "Клиент купил лицензию, деньги начислены.", 0xFFFF00)
        end
    end
end
Lua:
imgui.Checkbox(u8'Писать при успешной покупки в чат пожелание', checkbox1)
Lua:
local checkbox1 = imgui.ImBool(false)
Нужно экранировать +
Lua:
if text:find('%+') then
 

Pashyka

Участник
220
17
Библиотеку подключить не забыл? Меня почему-то не крашит.
Lua:
local se = require 'samp.events'
function se.onServerMessage(color, text)
    if text:find('%+') then
        print('+')
    end
end
Помоги пожалуйста, вообще не получается кое-что, выше сообщение мое, переслать могу
Доброго времени суток, уже полтора часа мучаюсь с этим, в общем, хочу, чтобы sampSendChat("/stats") вводился после того, как персонаж появился и смог открыться этот диалог, так как скрипт в этом диалоге чекает должность в фракции...

Использовал все, что мог:

Ждать спавна персонажа, потом загружать скрипт, ничего не помогает, если это убрать, то скрипт загрузится до успешной авторизации на сервер и введет эту команду(/stats) во время входа на сервер
Lua:
repeat
    wait(0)
until sampIsLocalPlayerSpawned()



Вводил команду после отправки сообщения о загрузке скрипта, все равно не открывает /stats и не чекает должность(Если перезагрузить скрипт, то все нормально), но если просто зайти в игру, он вообще не чекает это.
Lua:
sampAddChatMessage(tag, -1) -- отправляем в чат запрузку скрипта
sampSendChat("/stats")

Пробовал даже делать так, но, после входа на сервер сразу кикает за флуд функциями

Lua:
while true do
    wait(0)
    if doljnost == "Нет" then -- Хук с диалога название должности, переменная изменится
        sampSendChat("/stats")
    end
end

Нужно сделать так, чтобы скрипт автоматом вводил эту команду после входа в игру, но никак не получается этого сделать. Помогите пожалуйста
Воть
 

Nazar1ky

Участник
205
6
Библиотеку подключить не забыл? Меня почему-то не крашит.
Lua:
local se = require 'samp.events'
function se.onServerMessage(color, text)
    if text:find('%+') then
        print('+')
    end
end
Lua:
require "lib.moonloader"
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local se = require'lib.samp.events'
local config = require "config"
local imgui = require 'imgui'
local key = require 'vkeys'
local tag = "{62E200}[ASHelper]: {FFFFFF}"
local chat = false
local idgive = false
local main_window_state = imgui.ImBool(false)
local playerID = imgui.ImBuffer(256)
local playerExpel = imgui.ImBuffer(256)
local licID = imgui.ImBuffer(256)
local checkbox1 = imgui.ImBool(false)
local checkbox2 = imgui.ImBool(false)
local isp_menu = imgui.ImBool(false)
local lic_menu = imgui.ImBool(false)
local other_menu = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then
    
    imgui.SetNextWindowSize(imgui.ImVec2(540, 170), imgui.Cond.FirstUseEver)
    imgui.Begin('AutoSchool helper', main_window_state)
    imgui.InputText(u8'ID Игрока для манипуляций', playerID)
  
    imgui.Checkbox(u8'При нацеливание playerID заполняеться айди в того кого целитесь', checkbox2) -- для получения значения переменной hop использовать ключ .v, то бишь hop.v
    imgui.Checkbox(u8'PRICE LIST', isp_menu) 
    imgui.Checkbox(u8'Продажа Лицензий', lic_menu) 
    imgui.Checkbox(u8'Прочее', other_menu) 
    imgui.Text(u8(string.format('Текущая дата: %s', os.date()))) -- u8 - это функция, её можно использовать и с неконстантными строками
    imgui.End()
  end
    if isp_menu.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(300, 170), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || PRICE LIST', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'PRICE LIST:\nНа авто: 10.000\nНа мото: 12.000\nНа рыбалку: 21.000\nВодный транспорт: 20.000\nОружие: 50.000(Требуеться Мед. карта\nОхота: 100.000\nНа распопки: 200.000\nНа полеты 20.000 (Сдавать в авиашколе)')
    imgui.End() -- конец окна
    end
    if lic_menu.v then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(400, 200), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Продажа лицензий', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'При продаже лицензии на оружие нужно проверить мед. карту!')
        if imgui.Button(u8'Приставиться') then
            privet()
        end
        if imgui.Button(u8'Проверить мед. карту') then 
            med(myid)
        end
        if imgui.Button(u8'Выдать лицензию') then 
            licgive(playerID.v)
        end
        if imgui.Button(u8'Выдать лицензию (nonRP)') then 
            sampSendChat('/givelicense '.. playerID.v)
        end
        if imgui.Button(u8'Пожелать хорошего дня') then 
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        end
        imgui.Checkbox(u8'Писать при успешной покупки в чат пожелание', checkbox1)
    imgui.End() -- конец окна
    end
    if other_menu.v then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(200, 320), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Прочее', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'По работе:')
        imgui.InputText(u8'Причина', playerExpel) 
        if imgui.Button(u8'Выгнать из автошколы') then 
            sampSendChat('/expel '.. playerID.v .. ' ' .. u8:decode(playerExpel.v))
        end
        if imgui.Button(u8'Рабочее портфолио') then 
            sampSendChat('/jobprogress')
        end
        if imgui.Button(u8'Список во фракции(online)') then 
            sampSendChat('/members')
        end
        if imgui.Button(u8'Посмотреть время') then 
            sampSendChat('/time')
        end
        imgui.Text(u8'Другое:')
        if imgui.Button(u8'Меню') then 
            sampSendChat('/mm')
        end
        if imgui.Button(u8'Настройки') then 
            sampSendChat('/settings')
        end
        if imgui.Button(u8'Помощь') then 
            sampSendChat('/help')
        end
        if imgui.Button(u8'Навигатор') then 
            sampSendChat('/gps')
        end
        if imgui.Button(u8'Инвентарь') then 
            sampSendChat('/invent')
        end
    imgui.End() -- конец окна
    end
end
function main()
  while true do
    wait(0)
    if wasKeyPressed(key.VK_X) then 
        main_window_state.v = not main_window_state.v 
    end
    imgui.Process = main_window_state.v
    local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
    if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
        local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
    if result then -- проверить, прошло ли получение ида успешно
        if checkbox2.v  then
            playerID.v = tostring(id)
        end
  end
end
  end
end
function privet()
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Приветствую, я "' .. config.settings.rank .. '" данного лицензированного центра, чем могу вам помочь?')
        wait(1500)
        sampSendChat('/do На груди весит бейджик с надписью "' .. config.settings.rank .. ' - '.. config.settings.name .. '.')
        wait(500)
        sampAddChatMessage(tag .. "Выполнено!", 0xFFFF00)
    end)
end
function med(myid)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Для получения лицензии на оружие покажите вашу мед.карту')
        wait(1000)
        sampSendChat('/b /showmc ' .. myid)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Убедитесь что в Мед. карте написано 'Полностью здоровый(ая)'", 0xFFFF00)
    end)
end
function licgive(id)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Секунду...')
        wait(1500)
        sampSendChat('/do На столе лежит печать и лицензия с бланком.')
        wait(1500)
        sampSendChat('/me берет со стола бланк и достает из кармана рубашки ручку')
        wait(1500)
        sampSendChat('/me заполняет бланк на получение лицензии')
        wait(1500)
        sampSendChat('/me начинает заполнять лицензию')
        wait(1500)
        sampSendChat('/do Лицензия заполнена.')
        wait(1500)
        sampSendChat('/me взял печать в руки и поставил оттеск с названием "ГЦЛ"')
        wait(1500)
        sampSendChat('/givelicense '.. id)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Выберите нужную лицензию:", 0xFFFF00)
    end)
end


function se.onServerMessage(color, text)
    if checkbox1.v then
        if text:find('%+') then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
            sampAddChatMessage(tag .. "Клиент купил лицензию, деньги начислены.", 0xFFFF00)
        end
    end
end
 

Pashyka

Участник
220
17
Можно так
Lua:
function main()
    repeat
        wait(0)
    until sampIsLocalPlayerSpawned()
    sampSendChat('/stats')
    wait(-1) -- либо while true do
end

Не получается, скрипт загружается первее входа на сервер, странно даже
 

Вложения

  • Загрузка.png
    Загрузка.png
    175.3 KB · Просмотры: 19

Gorskin

{Reverse Developer} ✓
Проверенный
1,251
1,054
Кто нибудь подскажите как работать с битстрим, нужны гайды. И как работать с входящей синхрой через битстрим, хочу сделать скрипт один, и ещё вопрос, как мне сделать так чтобы оружие персонажей в зоне стрима менялось например на фист? Т.е если у игрока в руках дигл и он стреляет то у меня бьет воздух. Делал такое через onPlayerSync(id, data) в итоге оружие менялось но когда игрок стрелял оружие появлялось снова и не пропадало.
 

Pashyka

Участник
220
17
Можно так
Lua:
function main()
    repeat
        wait(0)
    until sampIsLocalPlayerSpawned()
    sampSendChat('/stats')
    wait(-1) -- либо while true do
end

Немного поменял, теперь после спавна появляется то, что скрипт загружен, но само сообщение с должностью не появляется и переменная не меняется
 

Shelok_Kholmes

Известный
362
41
А что ты обижаешься? Вот я это все переписывал несколько минут, вместо того чтоб скопировать и помочь за несколько секунд.

Посмотреть вложение 104822
Lua:
script_name('LC')
script_authors('TheSameSK')

require 'lib.moonloader'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'

local wrender = imgui.ImBool(false)

function main()
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage(string.format('[%s] {FFFFFF}Loaded.', thisScript().name), 0xFFCD5C5C)
    sampRegisterChatCommand('lc', function() wrender.v = not wrender.v end)
    while true do
        wait(0)
        imgui.Process = wrender.v
    end
end

function imgui.OnDrawFrame()
    imgui.Begin('Text')
    imgui.Text('Da')
    imgui.End()
end

UPD:

А зачем тогда сюда писать сразу? Будто у всех все сразу получается. Нужно сначала самому пытаться сделать, а когда уже все перепробовал - просить помощи
Я же написал, что сидел час над этим, подумал, что всё, габелла, написал сюда и нашёл решение через пару минут. В чём проблема?
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,746
Lua:
require "lib.moonloader"
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local se = require'lib.samp.events'
local config = require "config"
local imgui = require 'imgui'
local key = require 'vkeys'
local tag = "{62E200}[ASHelper]: {FFFFFF}"
local chat = false
local idgive = false
local main_window_state = imgui.ImBool(false)
local playerID = imgui.ImBuffer(256)
local playerExpel = imgui.ImBuffer(256)
local licID = imgui.ImBuffer(256)
local checkbox1 = imgui.ImBool(false)
local checkbox2 = imgui.ImBool(false)
local isp_menu = imgui.ImBool(false)
local lic_menu = imgui.ImBool(false)
local other_menu = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then
   
    imgui.SetNextWindowSize(imgui.ImVec2(540, 170), imgui.Cond.FirstUseEver)
    imgui.Begin('AutoSchool helper', main_window_state)
    imgui.InputText(u8'ID Игрока для манипуляций', playerID)
 
    imgui.Checkbox(u8'При нацеливание playerID заполняеться айди в того кого целитесь', checkbox2) -- для получения значения переменной hop использовать ключ .v, то бишь hop.v
    imgui.Checkbox(u8'PRICE LIST', isp_menu)
    imgui.Checkbox(u8'Продажа Лицензий', lic_menu)
    imgui.Checkbox(u8'Прочее', other_menu)
    imgui.Text(u8(string.format('Текущая дата: %s', os.date()))) -- u8 - это функция, её можно использовать и с неконстантными строками
    imgui.End()
  end
    if isp_menu.v then
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(300, 170), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || PRICE LIST', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'PRICE LIST:\nНа авто: 10.000\nНа мото: 12.000\nНа рыбалку: 21.000\nВодный транспорт: 20.000\nОружие: 50.000(Требуеться Мед. карта\nОхота: 100.000\nНа распопки: 200.000\nНа полеты 20.000 (Сдавать в авиашколе)')
    imgui.End() -- конец окна
    end
    if lic_menu.v then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(400, 200), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Продажа лицензий', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'При продаже лицензии на оружие нужно проверить мед. карту!')
        if imgui.Button(u8'Приставиться') then
            privet()
        end
        if imgui.Button(u8'Проверить мед. карту') then
            med(myid)
        end
        if imgui.Button(u8'Выдать лицензию') then
            licgive(playerID.v)
        end
        if imgui.Button(u8'Выдать лицензию (nonRP)') then
            sampSendChat('/givelicense '.. playerID.v)
        end
        if imgui.Button(u8'Пожелать хорошего дня') then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        end
        imgui.Checkbox(u8'Писать при успешной покупки в чат пожелание', checkbox1)
    imgui.End() -- конец окна
    end
    if other_menu.v then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
        local ex, ey = getScreenResolution()
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(200, 320), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Прочее', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'По работе:')
        imgui.InputText(u8'Причина', playerExpel)
        if imgui.Button(u8'Выгнать из автошколы') then
            sampSendChat('/expel '.. playerID.v .. ' ' .. u8:decode(playerExpel.v))
        end
        if imgui.Button(u8'Рабочее портфолио') then
            sampSendChat('/jobprogress')
        end
        if imgui.Button(u8'Список во фракции(online)') then
            sampSendChat('/members')
        end
        if imgui.Button(u8'Посмотреть время') then
            sampSendChat('/time')
        end
        imgui.Text(u8'Другое:')
        if imgui.Button(u8'Меню') then
            sampSendChat('/mm')
        end
        if imgui.Button(u8'Настройки') then
            sampSendChat('/settings')
        end
        if imgui.Button(u8'Помощь') then
            sampSendChat('/help')
        end
        if imgui.Button(u8'Навигатор') then
            sampSendChat('/gps')
        end
        if imgui.Button(u8'Инвентарь') then
            sampSendChat('/invent')
        end
    imgui.End() -- конец окна
    end
end
function main()
  while true do
    wait(0)
    if wasKeyPressed(key.VK_X) then
        main_window_state.v = not main_window_state.v
    end
    imgui.Process = main_window_state.v
    local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
    if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
        local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
    if result then -- проверить, прошло ли получение ида успешно
        if checkbox2.v  then
            playerID.v = tostring(id)
        end
  end
end
  end
end
function privet()
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Приветствую, я "' .. config.settings.rank .. '" данного лицензированного центра, чем могу вам помочь?')
        wait(1500)
        sampSendChat('/do На груди весит бейджик с надписью "' .. config.settings.rank .. ' - '.. config.settings.name .. '.')
        wait(500)
        sampAddChatMessage(tag .. "Выполнено!", 0xFFFF00)
    end)
end
function med(myid)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Для получения лицензии на оружие покажите вашу мед.карту')
        wait(1000)
        sampSendChat('/b /showmc ' .. myid)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Убедитесь что в Мед. карте написано 'Полностью здоровый(ая)'", 0xFFFF00)
    end)
end
function licgive(id)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Секунду...')
        wait(1500)
        sampSendChat('/do На столе лежит печать и лицензия с бланком.')
        wait(1500)
        sampSendChat('/me берет со стола бланк и достает из кармана рубашки ручку')
        wait(1500)
        sampSendChat('/me заполняет бланк на получение лицензии')
        wait(1500)
        sampSendChat('/me начинает заполнять лицензию')
        wait(1500)
        sampSendChat('/do Лицензия заполнена.')
        wait(1500)
        sampSendChat('/me взял печать в руки и поставил оттеск с названием "ГЦЛ"')
        wait(1500)
        sampSendChat('/givelicense '.. id)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Выберите нужную лицензию:", 0xFFFF00)
    end)
end


function se.onServerMessage(color, text)
    if checkbox1.v then
        if text:find('%+') then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
            sampAddChatMessage(tag .. "Клиент купил лицензию, деньги начислены.", 0xFFFF00)
        end
    end
end
Lua:
require "lib.moonloader"
local se = require 'samp.events'
local config = require "inicfg"
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local tag = "{62E200}[ASHelper]: {FFFFFF}"
local chat = false
local idgive = false

local main_window_state = imgui.ImBool(false)
local playerID = imgui.ImBuffer(256)
local playerExpel = imgui.ImBuffer(256)
local licID = imgui.ImBuffer(256)
local checkbox1 = imgui.ImBool(false)
local checkbox2 = imgui.ImBool(false)
local isp_menu = imgui.ImBool(false)
local lic_menu = imgui.ImBool(false)
local other_menu = imgui.ImBool(false)

local ex, ey = getScreenResolution()

function imgui.OnDrawFrame()
    local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(540, 170), imgui.Cond.FirstUseEver)
        imgui.Begin('AutoSchool helper', main_window_state)
        imgui.InputText(u8'ID Игрока для манипуляций', playerID)
    
        imgui.Checkbox(u8'При нацеливание playerID заполняеться айди в того кого целитесь', checkbox2)
        imgui.Checkbox(u8'PRICE LIST', isp_menu)
        imgui.Checkbox(u8'Продажа Лицензий', lic_menu)
        imgui.Checkbox(u8'Прочее', other_menu)
        imgui.Text(u8(string.format('Текущая дата: %s', os.date())))
        imgui.End()
    end
    if isp_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(300, 170), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || PRICE LIST', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'PRICE LIST:\nНа авто: 10.000\nНа мото: 12.000\nНа рыбалку: 21.000\nВодный транспорт: 20.000\nОружие: 50.000(Требуеться Мед. карта\nОхота: 100.000\nНа распопки: 200.000\nНа полеты 20.000 (Сдавать в авиашколе)')
        imgui.End()
    end
    if lic_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(400, 200), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Продажа лицензий', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'При продаже лицензии на оружие нужно проверить мед. карту!')
        if imgui.Button(u8'Приставиться') then
            privet()
        end
        if imgui.Button(u8'Проверить мед. карту') then
            med(myid)
        end
        if imgui.Button(u8'Выдать лицензию') then
            licgive(playerID.v)
        end
        if imgui.Button(u8'Выдать лицензию (nonRP)') then
            sampSendChat('/givelicense '.. playerID.v)
        end
        if imgui.Button(u8'Пожелать хорошего дня') then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        end
        imgui.Checkbox(u8'Писать при успешной покупки в чат пожелание', checkbox1)
        imgui.End()
    end
    if other_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(200, 320), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Прочее', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'По работе:')
        imgui.InputText(u8'Причина', playerExpel)
        if imgui.Button(u8'Выгнать из автошколы') then
            sampSendChat('/expel '.. playerID.v .. ' ' .. u8:decode(playerExpel.v))
        end
        if imgui.Button(u8'Рабочее портфолио') then
            sampSendChat('/jobprogress')
        end
        if imgui.Button(u8'Список во фракции(online)') then
            sampSendChat('/members')
        end
        if imgui.Button(u8'Посмотреть время') then
            sampSendChat('/time')
        end
        imgui.Text(u8'Другое:')
        if imgui.Button(u8'Меню') then
            sampSendChat('/mm')
        end
        if imgui.Button(u8'Настройки') then
            sampSendChat('/settings')
        end
        if imgui.Button(u8'Помощь') then
            sampSendChat('/help')
        end
        if imgui.Button(u8'Навигатор') then
            sampSendChat('/gps')
        end
        if imgui.Button(u8'Инвентарь') then
            sampSendChat('/invent')
        end
        imgui.End()
    end
end

function main()
    while true do
        wait(0)
        if wasKeyPressed(key.VK_X) then
            main_window_state.v = not main_window_state.v
        end
        imgui.Process = main_window_state.v
        local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
        if valid and doesCharExist(ped) then
            local result, id = sampGetPlayerIdByCharHandle(ped)
            if result then
                if checkbox2.v then
                    playerID.v = tostring(id)
                end
            end
        end
    end
end

function privet()
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Приветствую, я "' .. config.settings.rank .. '" данного лицензированного центра, чем могу вам помочь?')
        wait(1500)
        sampSendChat('/do На груди весит бейджик с надписью "' .. config.settings.rank .. ' - '.. config.settings.name .. '.')
        wait(500)
        sampAddChatMessage(tag .. "Выполнено!", 0xFFFF00)
    end)
end

function med(myid)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Для получения лицензии на оружие покажите вашу мед.карту')
        wait(1000)
        sampSendChat('/b /showmc ' .. myid)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Убедитесь что в Мед. карте написано 'Полностью здоровый(ая)'", 0xFFFF00)
    end)
end

function licgive(id)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Секунду...')
        wait(1500)
        sampSendChat('/do На столе лежит печать и лицензия с бланком.')
        wait(1500)
        sampSendChat('/me берет со стола бланк и достает из кармана рубашки ручку')
        wait(1500)
        sampSendChat('/me заполняет бланк на получение лицензии')
        wait(1500)
        sampSendChat('/me начинает заполнять лицензию')
        wait(1500)
        sampSendChat('/do Лицензия заполнена.')
        wait(1500)
        sampSendChat('/me взял печать в руки и поставил оттеск с названием "ГЦЛ"')
        wait(1500)
        sampSendChat('/givelicense '.. id)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Выберите нужную лицензию:", 0xFFFF00)
    end)
end

function se.onServerMessage(color, text)
    if checkbox1.v and text:find('%+') then
        sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        sampAddChatMessage(tag .. "Клиент купил лицензию, деньги начислены.", 0xFFFF00)
    end
end
Ничего не менял практически. Все работает. Плюсик не видно потому что ты не возвращаешь его, так и должно быть.
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,746
В чём проблема?
Проблема в том что вы почему-то обижаетесь, что вам не помогли. Или мне показалось может что обиделись?
Сидел час думал, написал сюда, мне ничего толкового не сказали, решил за 5 минут сам.
Я и написал, что используйте "Код", а не скриншот который придется переписывать вручную.
 
  • Нравится
Реакции: Nazar1ky

Nazar1ky

Участник
205
6
Lua:
require "lib.moonloader"
local se = require 'samp.events'
local config = require "inicfg"
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local tag = "{62E200}[ASHelper]: {FFFFFF}"
local chat = false
local idgive = false

local main_window_state = imgui.ImBool(false)
local playerID = imgui.ImBuffer(256)
local playerExpel = imgui.ImBuffer(256)
local licID = imgui.ImBuffer(256)
local checkbox1 = imgui.ImBool(false)
local checkbox2 = imgui.ImBool(false)
local isp_menu = imgui.ImBool(false)
local lic_menu = imgui.ImBool(false)
local other_menu = imgui.ImBool(false)

local ex, ey = getScreenResolution()

function imgui.OnDrawFrame()
    local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(540, 170), imgui.Cond.FirstUseEver)
        imgui.Begin('AutoSchool helper', main_window_state)
        imgui.InputText(u8'ID Игрока для манипуляций', playerID)
   
        imgui.Checkbox(u8'При нацеливание playerID заполняеться айди в того кого целитесь', checkbox2)
        imgui.Checkbox(u8'PRICE LIST', isp_menu)
        imgui.Checkbox(u8'Продажа Лицензий', lic_menu)
        imgui.Checkbox(u8'Прочее', other_menu)
        imgui.Text(u8(string.format('Текущая дата: %s', os.date())))
        imgui.End()
    end
    if isp_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(300, 170), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || PRICE LIST', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'PRICE LIST:\nНа авто: 10.000\nНа мото: 12.000\nНа рыбалку: 21.000\nВодный транспорт: 20.000\nОружие: 50.000(Требуеться Мед. карта\nОхота: 100.000\nНа распопки: 200.000\nНа полеты 20.000 (Сдавать в авиашколе)')
        imgui.End()
    end
    if lic_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(400, 200), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Продажа лицензий', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'При продаже лицензии на оружие нужно проверить мед. карту!')
        if imgui.Button(u8'Приставиться') then
            privet()
        end
        if imgui.Button(u8'Проверить мед. карту') then
            med(myid)
        end
        if imgui.Button(u8'Выдать лицензию') then
            licgive(playerID.v)
        end
        if imgui.Button(u8'Выдать лицензию (nonRP)') then
            sampSendChat('/givelicense '.. playerID.v)
        end
        if imgui.Button(u8'Пожелать хорошего дня') then
            sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        end
        imgui.Checkbox(u8'Писать при успешной покупки в чат пожелание', checkbox1)
        imgui.End()
    end
    if other_menu.v then
        imgui.ShowCursor = true
        imgui.SetNextWindowSize(imgui.ImVec2(200, 320), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 515, ey / 2 - 220), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'AutoSchool Helper || Прочее', nil, imgui.WindowFlags.NoCollapse)
        imgui.Text(u8'По работе:')
        imgui.InputText(u8'Причина', playerExpel)
        if imgui.Button(u8'Выгнать из автошколы') then
            sampSendChat('/expel '.. playerID.v .. ' ' .. u8:decode(playerExpel.v))
        end
        if imgui.Button(u8'Рабочее портфолио') then
            sampSendChat('/jobprogress')
        end
        if imgui.Button(u8'Список во фракции(online)') then
            sampSendChat('/members')
        end
        if imgui.Button(u8'Посмотреть время') then
            sampSendChat('/time')
        end
        imgui.Text(u8'Другое:')
        if imgui.Button(u8'Меню') then
            sampSendChat('/mm')
        end
        if imgui.Button(u8'Настройки') then
            sampSendChat('/settings')
        end
        if imgui.Button(u8'Помощь') then
            sampSendChat('/help')
        end
        if imgui.Button(u8'Навигатор') then
            sampSendChat('/gps')
        end
        if imgui.Button(u8'Инвентарь') then
            sampSendChat('/invent')
        end
        imgui.End()
    end
end

function main()
    while true do
        wait(0)
        if wasKeyPressed(key.VK_X) then
            main_window_state.v = not main_window_state.v
        end
        imgui.Process = main_window_state.v
        local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
        if valid and doesCharExist(ped) then
            local result, id = sampGetPlayerIdByCharHandle(ped)
            if result then
                if checkbox2.v then
                    playerID.v = tostring(id)
                end
            end
        end
    end
end

function privet()
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Приветствую, я "' .. config.settings.rank .. '" данного лицензированного центра, чем могу вам помочь?')
        wait(1500)
        sampSendChat('/do На груди весит бейджик с надписью "' .. config.settings.rank .. ' - '.. config.settings.name .. '.')
        wait(500)
        sampAddChatMessage(tag .. "Выполнено!", 0xFFFF00)
    end)
end

function med(myid)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Для получения лицензии на оружие покажите вашу мед.карту')
        wait(1000)
        sampSendChat('/b /showmc ' .. myid)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Убедитесь что в Мед. карте написано 'Полностью здоровый(ая)'", 0xFFFF00)
    end)
end

function licgive(id)
    lua_thread.create(function()
        sampAddChatMessage(tag .. "Выполняю...", 0xFFFF00)
        sampSendChat('Секунду...')
        wait(1500)
        sampSendChat('/do На столе лежит печать и лицензия с бланком.')
        wait(1500)
        sampSendChat('/me берет со стола бланк и достает из кармана рубашки ручку')
        wait(1500)
        sampSendChat('/me заполняет бланк на получение лицензии')
        wait(1500)
        sampSendChat('/me начинает заполнять лицензию')
        wait(1500)
        sampSendChat('/do Лицензия заполнена.')
        wait(1500)
        sampSendChat('/me взял печать в руки и поставил оттеск с названием "ГЦЛ"')
        wait(1500)
        sampSendChat('/givelicense '.. id)
        wait(500)
        sampAddChatMessage(tag .. "Выполнено! Выберите нужную лицензию:", 0xFFFF00)
    end)
end

function se.onServerMessage(color, text)
    if checkbox1.v and text:find('%+') then
        sampSendChat('/todo Удачного вам дня*улыбнувшись посетителю')
        sampAddChatMessage(tag .. "Клиент купил лицензию, деньги начислены.", 0xFFFF00)
    end
end
Ничего не менял практически. Все работает. Плюсик не видно потому что ты не возвращаешь его, так и должно быть.
1626001217409.png


Я протестировал и с етой строчкой оно не работает если без то работает как решить?