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

MrBidloKoder

Известный
425
248
я понял крч в чём прикол. sampGetObjectSampIdByHandle работает только на серверные объекты. Я типо ввёл хендл серверного объекта и мне показалось id, но когда ввёл хендл виртуального объекта то вывелось -1.
sampGetObjectSampIdByHandle(Object object) попробуй через эту функцию получить id объекта по хэндлу
А человек выше меня не так понял просто)
 

nimblay

Участник
34
0
Почему если попытаться отправить команду через sampSendChat в бесконечном цикле main, напишет что это неизвестная команда , в то время как с обычным текстом все хорошо?
 

Dmitriy Makarov

25.05.2021
Проверенный
2,481
1,113
Почему если попытаться отправить команду через sampSendChat в бесконечном цикле main, напишет что это неизвестная команда , в то время как с обычным текстом все хорошо?
Может это не серверная команда. Попробуй через эту функцию отправить:
sampProcessChatInput("/command")
 

enyag

Известный
345
12
скрипт должен добавть CollapsingHeader с название в инпуте, но появляется лишь на секунду, как исправить?
Код:
        if fight_window_state.v then
            imgui.InputText(u8'Введите название первой таблицы.', nametabl)
            add1 = nametabl.v
            if imgui.Button(u8'Добавить', imgui.ImVec2(195, 30)) then
            if imgui.CollapsingHeader(add1) then
                imgui.InputText(u8'Введите никнейм игрока.', name1)
                addname1 = name1.v
            end
            end
        end
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,733
4,728
скрипт должен добавть CollapsingHeader с название в инпуте, но появляется лишь на секунду, как исправить?
Код:
        if fight_window_state.v then
            imgui.InputText(u8'Введите название первой таблицы.', nametabl)
            add1 = nametabl.v
            if imgui.Button(u8'Добавить', imgui.ImVec2(195, 30)) then
            if imgui.CollapsingHeader(add1) then
                imgui.InputText(u8'Введите никнейм игрока.', name1)
                addname1 = name1.v
            end
            end
        end
Тебе нужно при нажатии на кнопку добавлять к массиву 1 элемент. И прибавлять к переменной с количеством элементов 1. И потом циклом for пробегаться по массиву и рисовать collapsing header
 

shizzard

Участник
150
7
[ML] (error) px_1_1_alpha.lua: attempt to call a nil value
stack traceback:
[ML] (error) px_1_1_alpha.lua: Script died due to an error. (2BEEFD2C)
 

shizzard

Участник
150
7
Lua:
local themes = import 'lib/imgui_themes.lua'
local tag = '{3498DB}[Хелпер Похиток]: '
local color =  0x3498DB--0xFF69B4
local red_color = 0xff0040
local berserk = 1
local imgui = require 'imgui'
local cbuffer = imgui.ImInt(0)
local buffer1 = imgui.ImBuffer(256)
local buffer2 = imgui.ImBuffer(256)
local buffer3 = imgui.ImBuffer(256)
local buffer4 = imgui.ImBuffer(256)
local buffer5 = imgui.ImBuffer(256)
local combobombo1 = imgui.ImInt(0)
local combobombo = imgui.ImInt(0)
font2 = renderCreateFont('Arial', 8, 5)
ftext = function(text)
    sampAddChatMessage('[Хелпер Похиток]: {ffffff}'..text,0x3498DB)
end
local inicfg = require 'inicfg'
local directIni = "moonloader\\config\\px.ini"
    local mainIni = inicfg.load({
    hotkey = {
    bindr = encodeJson({ VK_R, VK_ALT }),
    bindrb = encodeJson({ VK_Q, VK_ALT }),
    bindst = encodeJson({VK_O,VK_ALT}),
    bindt = encodeJson({VK_A,VK_ALT})
},
    itheme = {
        theme = encodeJson({themes.SwitchColorTheme(0)}),
    },
    trebovania = {
         treb1 = encodeJson({buffer1.v}),
         treb2 = encodeJson({buffer2.v}),
         treb3 = encodeJson({buffer3.v}),
         treb4 = encodeJson({buffer4.v}),
         treb5 = encodeJson({buffer5.v}),
         tclist = encodeJson(cbuffer.v)
    }
    },directIni)
require 'lib.moonloader'

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local rkeys = require 'rkeys'
imgui.HotKey =  require('imgui_addons').HotKey
imgui.ToggleButton = require('imgui_addons').ToggleButton
local sampev = require 'lib.samp.events'
local tLastKeys = {}
local imBool = imgui.ImBool(false)
local ThemeMenu = {
    v = decodeJson(mainIni.itheme.theme)
}
local TrebMenu1 = {
    v = decodeJson(mainIni.trebovania.treb1)
}
local TrebMenu2 = {
    v = decodeJson(mainIni.trebovania.treb2)
}
local TrebMenu3 = {
    v = decodeJson(mainIni.trebovania.treb3)
}
local TrebMenu4 = {
    v = decodeJson(mainIni.trebovania.treb4)
}
local TrebMenu5 = {
    v = decodeJson(mainIni.trebovania.treb5)
}
local ActiveClockMenu = {
    v = decodeJson(mainIni.hotkey.bindr)
}
local ActiveClockMenu1 = {
    v = decodeJson(mainIni.hotkey.bindrb)
}
local ActiveClockMenu2 = {
    v = decodeJson(mainIni.hotkey.bindst)
}
local ActiveClockMenu3 = {
    v = decodeJson(mainIni.hotkey.bindt)
}
if not doesFileExist('moonloader\\px.ini') then inicfg.save(mainIni,'px.ini') end
local bt = 0
local rt =2
local pt = 6
local bt = 5
local key = 20000
local agent_window_state = imgui.ImBool(false)
local rasc_window_state = imgui.ImBool(false)
local poxititel_window_state = imgui.ImBool(false)
local extra_window_state = imgui.ImBool(false)
local extra_extra_window_state = imgui.ImBool(false)
local text_buffer_name = imgui.ImBuffer(256)
local min = imgui.ImInt(10)
local timer = 0
local priezd = imgui.ImBuffer(64)
local priezds = imgui.ImBuffer(64)
local combo = imgui.ImInt(0)
local combo1 = imgui.ImInt(0)
local combo2 = imgui.ImInt(0)
local combo3 = imgui.ImInt(0)
local combo4 = imgui.ImInt(0)
local pcombo = imgui.ImInt(0)
local pcombo1 = imgui.ImInt(0)
local pcombo2 = imgui.ImInt(0)
local pcombo3 = imgui.ImInt(0)
local pcombo4 = imgui.ImInt(0)
local sw, sh = getScreenResolution()
local combobombo = imgui.ImInt(0)
local combobombo1 = imgui.ImInt(0)
local pfbi =
                {
' ' ,u8'Стажёр', u8'Дежурный', u8'Мл.Агент',u8'Агент DEA',u8'Агент CID',u8'Глава DEA',u8'Глава CID',u8'Инспектор FBI',u8'Зам.Директора FBI',u8'Директор FBI'
            }
local checkfrac ={
    ' ',u8'Мэрия',u8'SAPD',u8'Медики',u8'Армия',u8'ФБР',u8'Автошколаы'
}
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
        local nick = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(1))):gsub('_', ' ')
        sampAddChatMessage(tag .. '{FFFFFF}Добро пожаловать, '.. nick ..'.',color)
        sampAddChatMessage(tag .. '{FFFFFF}Автор : Steven Eaton. Приятной игры', color)
        sampAddChatMessage(tag .. '{FFFFFF}Активация : /px', color)
        sampAddChatMessage(tag .. '{FFFFFF}Отдельное спасибо {ff0040}ronnyevans', color)
    sampRegisterChatCommand("px3249234", poxitka)
        sampRegisterChatCommand(px230423402, poxitka2)
        sampRegisterChatCommand("px", poxitka1)
        sampRegisterChatCommand(aksodasidjasd, funcfunc)
        sampRegisterChatCommand(zhaohpgasdogijasdf, gerald)
        imgui.Process = False
        imgui.SwitchContext()
        themes.SwitchColorTheme()
        bindr = rkeys.registerHotKey(ActiveClockMenu.v, true, rhot)
        bindrb = rkeys.registerHotKey(ActiveClockMenu1.v, true, rbhot)
        bindst = rkeys.registerHotKey(ActiveClockMenu2.v, true, bindst)
                bindt = rkeys.registerHotKey(ActiveClockMenu3.v, true, bindt)
        themes.SwitchColorTheme(mainIni.itheme.theme)
      while true do
imgui.Process = extra_window_state.v -- window поменяй на свою переменную
                wait(0)
            end
        end
        function rhot(args)
            if buffer1.v == '' and buffer2.v == '' and buffer3.v == '' and buffer4.v == ''and  buffer5.v == '' then
                    sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
            else
                    sampAddChatMessage(tag..(u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)), red_color)
            end
    end
        function rbhot(args)
            if mainIni.trebovania.treb1 == ' ' and mainIni.trebovania.treb2 == ' ' and mainIni.trebovania.treb3 == ' ' and mainIni.trebovania.treb4 == ' ' and  mainIni.trebovania.treb5 == ' '  or  mainIni.trebovania.treb1 == '' and mainIni.trebovania.treb2 == '' and mainIni.trebovania.treb3 == '' and mainIni.trebovania.treb4 == '' and  mainIni.trebovania.treb5 == ' ' then
                sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
        else
                sampAddChatMessage(tag..(u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)), red_color)
        end

        function bindst(args)
           if  mainIni.trebovania.treb1 == ' ' and mainIni.trebovania.treb2 == ' ' and mainIni.trebovania.treb3 == ' ' and mainIni.trebovania.treb4 == ' ' and  mainIni.trebovania.treb5 == ' ' then
                sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
            else
                sampAddChatMessage(tag..(u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)), red_color)
            end
        end
    end



        function sampev.onServerMessage(color,text)
            if text:find('hrt code 3 (%d+)') then
                code = text:match('hrt code 3 (%d+)')
                sampAddChatMessage('code == '.. code, color)
            end
        end
        function sampev.onServerMessage(color, text)
    if text:find('The') then
            sampAddChatMessage('poprobui etot code', color)
        end

        function imgui.TextQuestion(text)
            imgui.TextDisabled('(?)')
            if imgui.IsItemHovered() then
              imgui.BeginTooltip()
              imgui.PushTextWrapPos(450)
              imgui.TextUnformatted(text)
              imgui.PopTextWrapPos()
              imgui.EndTooltip()
            end
        end
function poxitka(args)
agent_window_state.v = not agent_window_state.v
imgui.Process = agent_window_state.v
end
function poxitka1(args)
extra_window_state.v = not extra_window_state.v
imgui.Process = extra_window_state.v
end
function poxitka(args)
poxititel_window_state.v = not poxititel_window_state.v
imgui.Process = poxititel_window_state.v
end
function imgui.OnDrawFrame()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) imgui.SetNextWindowSize(imgui.ImVec2(725, 340), imgui.Cond.FirstUseEver) -- размер
--    imgui.Begin(u8'Хелпер для похиток', show_main_window, imgui.WindowFlags.NoResize + imgui.WindowFlags.ShowBorders)
    --imgui.SetNextWindowSize(imgui.ImVec2(500,300),imgui.Cond.FirstUseEver)
    --imgui.SetNextWindowPos(imgui.ImVec2((sw/2),sh/2),imgui.Cond.FirstUseEver, imgui.ImVec2(0.5,0.5))
    if agent_window_state.v then
            imgui.Begin(u8"Хелпер для похиток v24".. ' ' ..os.date("%d.%m.%Y"), agent_window_state, imgui.WindowFlags.NoResize)
        --[[ = {u8'Цветы ',u8'Трость ',u8 "Бургер ",u8 "Пицца ", u8"Рем.комплект " , u8"2 рем.комплекта " , u8"3 рем.комплекта ", u8"Фотоаппарат ", u8"Пиво "}
        --povyazka = {u8'Красная повязка',u8"Синяя повязка", u8'Зеленая повязка', u8"Черная повязка",u8"Фиолетовая повязка"}
        --chislo = {'1 ', '2 ', '3 '}
    --    colors = {[1] = u8"Синяя", [2] =  "Красная", [3] =  "Коричневая", [4] = "Аква",[5] = "Чёрная", [6] = "Фиолетовая",[7] = "Черно-оранжевая"}
        --imgui.Begin(u8'Хелпер для похиток', agent_window_state)
        --imgui.Combo(u8'Количество',combo_select , chislo )
        -- imgui.Combo(u8'Выберите тему',combo_select, colors )
    --[[    imgui.PushItemWidth(150)
      imgui.Combo(u8'1 требование',combo , )
        imgui.SameLine()
        imgui.Combo(u8'Повязка', cpovyazka, povyazka)
        imgui.PushItemWidth(150)
        imgui.Combo(u8'2 требование',combo1 , )
        imgui.PushItemWidth(150)
        imgui.Combo(u8'3 требование',combo2 , )
        imgui.PushItemWidth(150)
        imgui.Combo(u8'4 требование',combo3 , )
        imgui.PushItemWidth(150)
        imgui.Combo(u8'5 требование',combo4 , )
        imgui.PushItemWidth(250)]]
        imgui.BeginChild("##firstchild", imgui.ImVec2(715, 180), true)
        local checkfrac ={u8' ', u8'Мэрия',u8'SAPD',u8'Медики',u8'Армия',u8'ФБР',u8'Автошкола',u8'Новости'}
        local pfbi ={u8' ', u8'Стажёр', u8'Дежурный', u8'Мл.Агент',u8'Агент DEA',u8'Агент CID',u8'Глава DEA',u8'Глава CID',u8'Инспектор FBI',u8'Зам.Директора FBI',u8'Директор FBI'}
        local pmed = {u8' ',u8'Интерн',u8'Санитар',u8'Мед.Брат',u8'Спасатель',u8'Нарколог',u8'Доктор',u8'Психолог',u8'Хирург',u8'Зам.Глав.Врача',u8'Глав.Врач'}
        local parmy = {u8" " , u8"Рядовой", u8"Ефрейтор",u8"Мл.Сержант",u8"Сержант",u8"Ст.Сержант",u8"Старшина",u8"Прапорщик",u8"Мл.Лейтенант",u8"Лейтенант",u8"Ст.Лейтенант",u8"Капитан",u8"Майор",u8"Подполковник",u8"Полковник",u8"Генерал"}
        local ppd = {u8' ',u8"Кадет", u8"Офицер",u8"Мл.Сержант",u8"Сержант",u8"Прапорщик",u8"Ст.Прапорщик",u8"Мл.Лейтенант",u8"Лейтенант",u8"Ст.Лейтенант",u8"Капитан",u8"Майор",u8"Подполковник",u8"Полковник",u8"Шериф"}
        local pmayor = {u8" ",u8"Секретарь",u8"Адвокат",u8"Охранник",u8"Нач.Охраны",u8"Зам.Мэра",u8"Мэр"}
        local pds = {u8" ",u8"Стажер",u8"Консультант",u8"Экзаменатор",u8"Мл.Инструктор",u8"Инструктор",u8"Координатор",u8"Мл.Менеджер",u8"Ст.Менеджер",u8"Директор",u8"Управляющий",}
        local pnews = {u8'',u8'Стажер',u8'Звукооператор',u8'Звукорежиссер',u8'Репортер',u8'Ведущий',u8'Редактор',u8'Гл.Редактор',u8'Тех.Директор',u8'Програмный Директор',u8'Ген.Директор', }

--[[
pfbi[1] = 70000,
pfbi[2] = 70000,
pfbi[3] = 70000,
pfbi[4] = 80000,
pfbi[5] = 80000,
pfbi[6] = 90000,
pfbi[7] = 90000,
pfbi[8] = 100000,
pfbi[9] = 100000,
pfbi[10] = 150000,

pds[1] = 20000,
pds[2] = 30000,
pds[3] = 40000,
pds[4] = 50000,
pds[5] = 60000,
pds[6] = 70000,
pds[7] = 80000,
pds[8] = 90000,
pds[9] = 100000,
pds[10] = 150000,

pnews[1] = 10000,
pnews[2] = 20000,
pnews[3] = 30000,
pnews[4] = 40000,
pnews[5] = 50000,
pnews[6] = 60000,
pnews[7] = 70000,
pnews[8] = 80000,
pnews[9] = 90000,
pnews[10] = 100000,

pmed[1] = 20000,
pmed[2] = 30000,
pmed[3] = 40000,
pmed[4] = 50000,
pmed[5] = 60000,
pmed[6] = 70000,
pmed[7] = 80000,
pmed[8] = 90000,
pmed[9] = 100000,
pmed[10] = 150000,

parmy[1] = 30000,
parmy[2] = 40000,
parmy[3] = 50000,
parmy[4] = 60000,
parmy[5] = 60000,
parmy[6] = 70000,
parmy[7] = 70000,
parmy[8] = 80000,
parmy[9] = 80000,
parmy[10] = 90000,
parmy[11] = 90000,
parmy[12] = 100000,
parmy[13] = 100000,
parmy[14] = 100000,
parmy[15] = 150000,

pmayor[1] = 20000,
pmayor[2] = 40000,
pmayor[3] = 60000,
pmayor[4] = 80000,
pmayor[5] = 100000,
pmayor[6] = 150000,

ppd[1] = 50000,
ppd[2] = 50000,
ppd[3] = 60000,
ppd[4] = 60000,
ppd[5] = 70000,
ppd[6] = 70000,
ppd[7] = 80000,
ppd[8] = 80000,
ppd[9] = 80000,
ppd[10] = 90000,
ppd[11] = 100000,
ppd[12] = 100000,
ppd[13] = 100000,
ppd[14] = 150000
]]
function bindt()
    sampAddChatMessage('hiiiiii', color)
end
        imgui.PushItemWidth(150)
    imgui.Combo(u8'Фракция',combobombo1,checkfrac,#checkfrac)
if combobombo1.v == 5 then
imgui.SameLine()
    imgui.SetCursorPosX(242)
imgui.Combo(u8'Ранг',combobombo,pfbi,#pfbi)
elseif combobombo1.v == 3 then
    imgui.SameLine()
        imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,pmed,#pmed)
elseif combobombo1.v == 4 then
    imgui.SameLine()
        imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,parmy,#parmy)
elseif combobombo1.v == 2 then
    imgui.SameLine()

        imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,ppd,#ppd)
elseif combobombo1.v == 1 then
    imgui.SameLine()
        imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,pmayor,#pmayor)

elseif combobombo1.v == 6 then
    imgui.SameLine()
    imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,pds,#pds)
elseif combobombo1.v == 7 then
    imgui.SameLine()
    imgui.SetCursorPosX(242)
    imgui.Combo(u8'Ранг',combobombo,pnews,#pnews)

end


        imgui.PushItemWidth(150)
if     imgui.InputText(u8'1 требование', buffer1) then
        mainIni.trebovania.treb1 = buffer1.v
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine()
    if imgui.Button(u8'Очистить 1 требование') then
        mainIni.trebovania.treb1 = ' '
        buffer1.v = ' '
        inicfg.save(mainIni,directIni)
    end

        imgui.SameLine()
        imgui.SetCursorPosX(387)
    if    imgui.SliderInt(u8'Повязка (Клист)',cbuffer,1,33) then
        mainIni.trebovania.tclist = cbuffer.v
        inicfg.save(mainIni,directIni)
    end
if        imgui.InputText(u8'2 требование', buffer2) then
         mainIni.trebovania.treb2 = buffer2.v
        inicfg.save(mainIni, directIni)
    end
        imgui.SameLine()
        if imgui.Button(u8'Очистить 2 требование') then
            mainIni.trebovania.treb2 = ' '
                    buffer2.v = ''
            inicfg.save(mainIni,directIni)
        end
        imgui.SameLine()
        imgui.InputText(u8'РП отыгровки по приезду',priezd)
        if priezd.v:find('/me (.+)') then
    local text = priezd.v:match('/me (.+)')
    priezd.v = text
        end
        imgui.SameLine()
        imgui.TextQuestion(u8('Вводите без /me'))
        if imgui.InputText(u8'3 требование', buffer3) then
        mainIni.trebovania.treb3 = buffer3.v
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine()
    if imgui.Button(u8'Очистить 3 требование') then
        mainIni.trebovania.treb3 = ' '
                buffer3.v = ' '
        inicfg.save(mainIni,directIni)
    end
        imgui.SameLine()
        imgui.InputText(u8'Слова по приезду',priezds)
        if priezds.v:find('/s (.+)') then
    local text = priezds.v:match('/s (.+)')
    priezds.v = text
        end
        imgui.SameLine()
        imgui.TextQuestion(u8('Текст будет прописан через /s'))
        if imgui.InputText(u8'4 требование', buffer4) then
        mainIni.trebovania.treb4 = buffer4.v
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine()
    if imgui.Button(u8'Очистить 4 требование') then
        mainIni.trebovania.treb4 = ' '
                buffer4.v = ' '
        inicfg.save(mainIni,directIni)
    end
        imgui.SameLine()
         imgui.ToggleButton("##1", imBool)

        imgui.SameLine()
        imgui.Text(u8'Включить таймер')


        if imgui.InputText(u8'5 требование', buffer5) then
        mainIni.trebovania.treb5 = buffer5.v
        inicfg.save(mainIni, directIni)
    end
        imgui.SameLine()
        if imgui.Button(u8'Очистить 5 требование') then
            mainIni.trebovania.treb5 = ' '
                    buffer5.v = ' '
            inicfg.save(mainIni,directIni)
        end
        imgui.SameLine()
        if imBool.v == true then
imgui.SliderInt(u8"Таймер (минуты : секунды)", min, 10--[[минимальное число]], 20--[[максимальное число]])
imgui.PopItemWidth()
imgui.SetCursorPosX(387)
if imgui.Button(u8'Начать отсчёт') then
        if timer < os.time() then -- если таймер не идёт (меньше, чем время на пк)
                timer = os.time() + (min.v * 60) -- время на пк(в секундах) + перевод значения слайдера в минуты
        else -- если таймер больше, чем время на пк (если идёт)
                sampAddChatMessage('Ошибка, отсчёт уже идёт!', -1)
        end
end
if timer >= os.time() then -- пока таймер больше времени на пк (пока он идёт)
        imgui.SameLine()
    --    timeost = math.floor((timer - os.time())/60)..':'..math.floor((timer - os.time())%60)
        imgui.Text(math.floor((timer - os.time())/60)..':'..math.floor((timer - os.time())%60))

        --math.floor для того, чтобы после деления выводило целое число
        --(timer - os.time())/60) -- ((таймер-время на пк/)1 минуту) для определения минут
        --(timer - os.time())%60) -- остаток деления на 60 (секунды)
    end
end
imgui.SetCursorPosX(5)
imgui.SetCursorPosY(155)
        if imgui.Button(u8'Очистить все требования ') then
            mainIni.trebovania.treb1 = ' '
                mainIni.trebovania.treb2 = ' '
                    mainIni.trebovania.treb3 = ' '
                        mainIni.trebovania.treb4 = ' '
                            mainIni.trebovania.treb5 = ' '
                            buffer1.v = ''
                            buffer2.v = ''
                            buffer3.v = ''
                            buffer4.v = ''
                            buffer5.v = ''
            inicfg.save(mainIni,directIni)
        end



imgui.EndChild()
-- ===================================================================================================================================================================================================================================================================
        imgui.BeginChild("##secondchild", imgui.ImVec2(715, 130), true)
        if imgui.Button(u8'Показать все требования') then
    if mainIni.trebovania.treb1 == '' and mainIni.trebovania.treb2 == '' and mainIni.trebovania.treb3 == '' and mainIni.trebovania.treb4 == '' and mainIni.trebovania.treb5 == '' or mainIni.trebovania.treb1 == ' ' and mainIni.trebovania.treb2 == ' ' and mainIni.trebovania.treb3 == ' ' and mainIni.trebovania.treb4 == ' ' and mainIni.trebovania.treb5 == ' ' then
                sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
        else
                --    sampAddChatMessage(tag..(u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)), red_color)
                ftext(mainIni.trebovania.treb1 .. ' ' .. mainIni.trebovania.treb2 .. ' ' .. mainIni.trebovania.treb3 .. ' ' .. mainIni.trebovania.treb4 .. ' ' .. mainIni.trebovania.treb5)
            end
end
        imgui.SameLine()
        if imgui.HotKey('##3', ActiveClockMenu2, tLastKeys, 100) then
            rkeys.changeHotKey(bindst, ActiveClockMenu2.v)
            sampAddChatMessage(tag..'{F4A460}Старая горячая клавиша: {FFFFFF}'.. table.concat(rkeys.getKeysName(tLastKeys.v),'+').. '{F4A460} Новая горячая клавиша {FFFFFF}'.. table.concat(rkeys.getKeysName(ActiveClockMenu2.v), " + "), color)
            mainIni.hotkey.bindst = encodeJson(ActiveClockMenu2.v)
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        imgui.TextQuestion(u8('Чтобы показать все требования заполните все поля требовании'))
        imgui.SameLine()
        imgui.SetCursorPosX(355)
        if imgui.Button(u8('Отыграть в чат')) then
            if priezd.v == '' then
                sampAddChatMessage(tag.. '{ff0040}Ошибка! {FFFFFF}Вы не ввели отыгровку', color)
            else
            sampSendChat('/me ' .. (u8:decode(priezd.v)))
        end
    end
        if imgui.Button(u8'Сказать все требования в рацию') then
            if buffer1.v == '' and buffer2.v == '' and buffer3.v == '' and buffer4.v == '' and buffer5.v == '' then
                                    sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
                                else
        sampSendChat('/r ' .. (u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)))
        end
    end
        imgui.SameLine()
        function clockfunc()
                    sampSendChat('/r ' .. (u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)))
        end
        if imgui.HotKey('##1', ActiveClockMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindr, ActiveClockMenu.v)
            sampAddChatMessage(tag..'{F4A460}Старая горячая клавиша: {FFFFFF}'.. table.concat(rkeys.getKeysName(tLastKeys.v),'+').. '{F4A460} Новая горячая клавиша: {FFFFFF}'.. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "), color)
            mainIni.hotkey.bindr = encodeJson(ActiveClockMenu.v)
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        imgui.TextQuestion(u8('Чтобы сказать требования в рацию заполните все поля требовании'))
        imgui.SameLine()
        imgui.SetCursorPosX(355)
        if imgui.Button(u8('Крикнуть по приезду')) then
            if priezds.v == '' then
                sampAddChatMessage(tag .. '{FFFFFF}Нечего кричать,введите текст в поле.', color)
            else
            sampSendChat('/s ' .. priezds.v)
        end
    end

        if imgui.Button(u8'Сказать все требования в рацию /rb ') then
            if buffer1.v == '' and buffer2.v == '' and buffer3.v == '' and buffer4.v == '' and buffer5.v == '' then
                                    sampAddChatMessage(tag .. '{FFFFFF}Нет требовании, введите их в поля требовании.', color)
                                else
        sampSendChat('/rb ' .. (u8:decode(buffer1.v)).. ' ' .. (u8:decode(buffer2.v)) .. ' ' .. (u8:decode(buffer3.v)) ..' ' .. (u8:decode(buffer4.v)) .. ' ' .. (u8:decode(buffer5.v)))
        end
    end
        imgui.SameLine()
        if imgui.HotKey('##2', ActiveClockMenu1, tLastKeys, 100) then
            rkeys.changeHotKey(bindrb, ActiveClockMenu1.v)
            sampAddChatMessage(tag..'{F4A460}Старая горячая клавиша: {FFFFFF}'.. table.concat(rkeys.getKeysName(tLastKeys.v),'+').. '{F4A460} Новая горячая клавиша {FFFFFF}'.. table.concat(rkeys.getKeysName(ActiveClockMenu1.v), " + "), color)
            mainIni.hotkey.bindrb = encodeJson(ActiveClockMenu1.v)
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        imgui.TextQuestion(u8('Чтобы сказать требования в рацию заполните все поля требовании'))
        imgui.SameLine()
        imgui.Button(u8'Показать оставшееся время')
        imgui.SameLine()
        if imgui.HotKey('##4', ActiveClockMenu3, tLastKeys, 100) then
            rkeys.changeHotKey(bindt, ActiveClockMenu3.v)
            sampAddChatMessage(tag..'{F4A460}Старая горячая клавиша: {FFFFFF}'.. table.concat(rkeys.getKeysName(tLastKeys.v),'+').. '{F4A460} Новая горячая клавиша {FFFFFF}'.. table.concat(rkeys.getKeysName(ActiveClockMenu3.v), " + "), color)
            mainIni.hotkey.bindt = encodeJson(ActiveClockMenu3.v)
            inicfg.save(mainIni, directIni)
        end
        if imgui.Button(u8'Надеть повязку (Клист)') then
            if cbuffer.v == 0 then
                sampAddChatMessage(tag .. '{FFFFFF}Вы пытаетесь включить {FF0040}нулевой клист. {FFFFFF} Для начала оденьте маску или выберите другой клист', color)
            end
            sampSendChat('/clist ' .. cbuffer.v)
        end

        if imgui.Button(u8'Красная тема') then
            themes.SwitchColorTheme(2)
            mainIni.itheme.theme = 2
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        if imgui.Button(u8'Черная тема') then
            themes.SwitchColorTheme(5)
            mainIni.itheme.theme = 5
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        if imgui.Button(u8'Фиолетовая тема') then
            themes.SwitchColorTheme(6)
            mainIni.itheme.theme = 6
            inicfg.save(mainIni, directIni)
        end
        imgui.SameLine()
        if imgui.Button(u8'Синяя тема') then
            themes.SwitchColorTheme()
            mainIni.itheme.theme = 0
            inicfg.save(mainIni, directIni)
        end

imgui.EndChild()
        imgui.End()
    end
    if extra_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(200,180),imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2((sw/2),sh/2),imgui.Cond.FirstUseEver, imgui.ImVec2(0.5,0.5))
        imgui.Begin(u8"Хелпер Похиток", extra_window_state,imgui.WindowFlags.NoResize)
        imgui.SetCursorPosX(40)
        imgui.SetCursorPosY(30)
        if     imgui.Button(u8'Для агентов',  imgui.ImVec2(120, 20)) then
             agent_window_state.v = not agent_window_state.v
        end
        imgui.SetCursorPosX(40)
        imgui.SetCursorPosY(55)
        function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
end
apply_custom_style()
if     imgui.Button(u8'Для операторов HRT', (imgui.ImVec2(133,20))) then
     poxititel_window_state.v = not poxititel_window_state.v
end
apply_custom_style()
imgui.SetCursorPosX(30)
imgui.SetCursorPosY(80)
if imgui.CollapsingHeader(u8'Действия со скриптом') then
    imgui.SetCursorPosX(30)
    imgui.SetCursorPosY(130)
if imgui.Button(u8('Перезагрузить скрипт'),(imgui.ImVec2(133,20))) then
sampAddChatMessage(tag .. '{FFFFFF}Скрипт перезагружен.', color)
thisScript():reload()
end
imgui.SetCursorPosX(30)
imgui.SetCursorPosY(105)
if imgui.Button(u8('Выключить скрипт'),(imgui.ImVec2(133,20))) then
    sampAddChatMessage(tag .. '{FFFFFF}Выгружаю скрипт...', color)
    thisScript():unload()
end
end
            imgui.End()
            end
        end
end
 

ewin

Известный
675
369
Как вытащить input из диалога с флагом пароля (все знаки в виде звездочек)евента onSendDialogRepsonse
 

Demmy

Участник
121
22
Как дублировать элемент массива не в ручную?
Типо есть массив
Lua:
local binds = {
    [1] = { v = {} }
    [2] = { v = {} }
}
И мне надо как-то добавить туда значений таких же, как сделать это?
 

wuwkun_Jlec

Новичок
13
3
Не могу понять. Как сделать автоотправку сообщения человеку, которого я убил ?

Код:
-- СМСочка
if playerId ~= nil and active then
    if not isPlayerDead(PLAYER_HANDLE) and not damage ~= nil then
        hp = sampGetPlayerHealth(playerId)
        new_hp = hp - damage
         
        lua_thread.create(function()
            wait(0)
            if new_hp == 0 or new_hp < 0 then
                sampSendChat("/sms "..playerid.." qq!")
            elseif new_hp < load_settings.settings.cell_hp then
                sampSendChat("/sms "..playerid.." qq")
            end
        end)
    end
    playerId = nil
end

Код:
-- Автоотправка сообщений
if playerid ~= nil and playerid ~= 65535 then
    if not isPlayerDead(PLAYER_HANDLE) and not damage ~= nil then
        hp = sampGetPlayerHealth(playerid)
        newhp = hp - damage
        if newhp == 0 or newhp < 0 then
            sampSendChat("/sms "..playerid.." qq")
            wait(600)
        end
    end
end
эти коды мои наброски, которые не работают
 

tinkoir

Участник
97
33
Пытаюсь получить цвет ника по id:
Lua:
function cmd_getclr(id)
    local color sampGetPlayerColor(id)
    print(color)
    sampAddChatMessage(color, -1)
end
но, почему-то, все время возвращает: nil , то есть ничего не получает.
Как это решить и в чем проблема?
color = bit.tohex(sampGetPlayerColor(playerid), 6)
p.s return забыл
 

kizn

О КУ)))
Всефорумный модератор
2,405
2,060
Lua:
function sampev.onServerMessage(color, text)
        if text:find('2+2') then
        local answer = math(text)
        sampfuncsLog('будет '..answer..' двоешник учи уроки')
    end
end


function math(str)
    return assert(load("return " .. str))()
end

-1 выводит
------
и еще один вопрос
Lua:
local example =
{
'это пример',
'это тоже',
'и это',
}

если из этого поля найден любой текст выполнять действие, как это сделать?
 
Последнее редактирование:

Rei

Известный
Друг
1,592
1,625
Lua:
function sampev.onServerMessage(color, text)
        if text:find('2+2') then
        local answer = math(text)
        sampfuncsLog('будет '..answer..' двоешник учи уроки')
    end
end


function math(str)
    return assert(load("return " .. str))()
end

-1 выводит
------
и еще один вопрос
Lua:
local example =
{
'это пример',
'это тоже',
'и это',
}

если из этого поля найден любой текст выполнять действие, как это сделать?
Код:
for k, v in ipairs(example) do
if text:find(v) then
—
end
end
 
  • Влюблен
Реакции: kizn