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

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
Lua:
local inicfg = require 'inicfg'
require 'lib.moonloader'
-- производить загрузку кофигов можно и вне 'main'
local mainIni = inicfg.load({
  settings =
  {
    tag = '[tag]: '
  }
}) -- загрузим основной конфиг. путь к файлу не указан, а значит будет загружен файл по пути ./moonloader/config/example.lua.ini
function main()
inicfg.save(mainIni)
  sampRegisterChatCommand("k", function(text)
  sampSendChat("/k "..mainIni.settings.tag..text)
end)
end
Почему это не работает?
wait(-1) забыл в конце функции main.
 

ZKelo

Известный
82
25
Можно ли при использовании функции DownloadUrlToFile отправлять в запросе дополнительные заголовки?
 

Rowland

Новичок
114
2
Хэлп, не могу решить проблему, txt отлавливает сообщение от сервера перед Здравствуйте, меня зовут..., а должно постоянно... пытался кидать в бесконечный цикл, не получается, мб что-то не так делаю

Lua:
script_name('Gov. helper')
script_author('Andrew Rowland')
script_description('Demonstrates Moon ImGui features')
hook = require "lib.samp.events"
sampev = require "lib.samp.events"
raknet = require 'lib.samp.raknet'
 key = require 'vkeys'
 imgui = require 'imgui'
 encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local DB = {
  test = {
    'ДБ',
    'ДМ',
    'ТК',
    'СК',
    'МГ'
  }
}

function sampev.onServerMessage(colo, texts)
txt = texts
end
function main()
while not isSampAvailable() do wait(100) end
if not isSampLoaded() then return end
sampAddChatMessage("{00CCFF}[Test] {FFFFFF}Cкрипт загружен. {FFFFFF}Разработчик скрипта:{FF0000} Andrew Rowland", 0xFFFFFF)
    while true do
        wait(0)
valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
  if valid and doesCharExist(ped) then
     result, id = sampGetPlayerIdByCharHandle(ped)
    if result and wasKeyPressed(key.VK_2) then
      name = sampGetPlayerNickname(id)
      print(name, id)
    name2, name3 = name:match("(%a+).(%a+)")
   end
    end
    _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    myname = sampGetPlayerNickname(myid)
    myname2, myname3 = myname:match("(%a+).(%a+)")
    score = sampGetPlayerScore(id)
    if id ~= nil and not sampIsChatInputActive() and wasKeyPressed(key.VK_2)then
            show_main_window.v = not show_main_window.v
            if not show_main_window.v then
            id = nil
            end
        end
      
imgui.Process = show_main_window.v
end
end

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4

    style.WindowRounding = 2.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 2.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    style.WindowPadding = imgui.ImVec2(5.0, 12.0)
    -- style.Alpha =
    -- style.FramePadding =
    -- style.ItemInnerSpacing =
    -- style.TouchExtraPadding =
    -- style.IndentSpacing =
    -- style.ColumnsMinSpacing = ?
    -- style.ButtonTextAlign =
    -- style.DisplayWindowPadding =
    -- style.DisplaySafeAreaPadding =
    -- style.AntiAliasedLines =
    -- style.AntiAliasedShapes =
    -- style.CurveTessellationTol =

    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]           = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.WindowBg]               = ImVec4(0.06, 0.06, 0.06, 0.94)
    colors[clr.ChildWindowBg]          = ImVec4(1.00, 1.00, 1.00, 0.00)
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    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.16, 0.29, 0.48, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(0.161, 0.447, 0.035, 0.910)
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CheckMark]              = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Button]                 = ImVec4(0.161, 0.447, 0.035, 0.910)
    colors[clr.ButtonHovered]          = ImVec4(0.250, 0.842, 0.120, 0.869)
    colors[clr.ButtonActive]           = ImVec4(0.439, 0.780, 0.035, 0.392)
    colors[clr.Header]                 = ImVec4(0.26, 0.59, 0.98, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(0.26, 0.59, 0.98, 0.80)
    colors[clr.HeaderActive]           = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.26, 0.59, 0.98, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.161, 0.447, 0.035, 0.910)
    colors[clr.ResizeGripHovered]      = ImVec4(0.250, 0.842, 0.120, 0.869)
    colors[clr.ResizeGripActive]       = ImVec4(0.439, 0.780, 0.035, 0.392)
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 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.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.80, 0.80, 0.80, 0.35)
end
apply_custom_style()
do

show_main_window = imgui.ImBool(false)
local show_imgui_example = imgui.ImBool(false)
local slider_float = imgui.ImFloat(0.0)
local clear_color = imgui.ImVec4(0.45, 0.55, 0.60, 1.00)
local show_test_window = imgui.ImBool(false)
local show_moon_imgui_tutorial = {imgui.ImBool(false), imgui.ImBool(false), imgui.ImBool(false), imgui.ImBool(false), imgui.ImBool(false)}
local moonimgui_text_buffer = imgui.ImBuffer('test', 256)
local sampgui_texture = nil
local cb_render_in_menu = imgui.ImBool(imgui.RenderInMenu)
local cb_lock_player = imgui.ImBool(imgui.LockPlayer)
local cb_show_cursor = imgui.ImBool(imgui.ShowCursor)
local font_changed = false
local glyph_ranges_cyrillic = nil
function imgui.OnDrawFrame()
    if show_main_window.v then 
        local sw, sh = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(300, 190), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Goverment Helper [Собеседование]', show_main_window, imgui.WindowFlags.NoResize)
        btn_size = imgui.ImVec2(-0.1, 0)
        if imgui.Button(u8'Представиться и попросить паспорт', btn_size) then
            sampSendChat("Здравствуйте, меня зовут "..myname2.." "..myname3)
            sampSendChat("Будте добры, Ваш паспорт...")
            if txt ~= nil then
         
            if txt:find(" показал свой паспорт") then
        lua_thread.create(function()
            sampSendChat('/me взял паспорт человека напротив')
            wait(700)
            sampSendChat('/me открыл паспорт на 25-й странице')
            wait(700)
            sampSendChat('/todo Рассмотрев информацию о прописке*Хо-ро-шо...')
            wait(700)
            sampSendChat('/me открыл последнюю страницу')
            wait(700)
            sampSendChat('/do Паспорт оформлен на имя: '..name2.." "..name3..'.')
            wait(700)
            sampSendChat('/do Провижвание в штате составляет: '..score.." лет.")
            wait(700)
            sampSendChat('/me сверяет фото в паспорте и лицо человека напротив')
            wait(700)
            sampSendChat('/todo Закрыв паспорт*Возьмите Ваш паспорт, '..name2)
            end)
            end
            end
        end
        if imgui.Button(u8'Попросить лицензии', btn_size) then
            sampSendChat(name2..', будте добры, ваши лицензии')
        end
        if imgui.Button(u8'Взять лицензии', btn_size) then
        lua_thread.create(function()
            sampSendChat('/me взял лицензии у человека напротив')
            wait(700)
            sampSendChat('/me развернув список лицензий, начал проверять место выдачи')
            wait(700)
            sampSendChat('/me проверят наличие необходимых лицензий и сверяет дату выдачи')
            wait(700)
            sampSendChat('/todo Протянув лицензии человеку напротив*Держите')
        end)
        end 
        if imgui.Button(u8'Психологический тест', btn_size) then
        lua_thread.create(function()
            sampSendChat('Давайте проведём небольшой тест...')
            wait(700)
            sampSendChat('Я говорю Вам какое-то слово, а Вы - ассоциацию, и так приступим')
            wait(700)
            if DB.test[math.random(1, #DB.test)] ~= DB.test[math.random(2, #DB.test)] then
            sampSendChat('Что вы понимаете под аббревиатурой '..DB.test[math.random(1, #DB.test)].." и "..DB.test[math.random(2, #DB.test)])
            else
            sampSendChat('Что вы понимаете под аббревиатурой '..DB.test[math.random(1, #DB.test)].." и "..DB.test[math.random(3, #DB.test)])
            end
            end)
        end
        imgui.End()
    end

 
 
 
end
end
 

штейн

Известный
Проверенный
1,001
687
Lua:
function idPlayer(text)
    local data = inicfg.load(nil, 'moonloader\\config\\hitman.ini')
    if data.options.sid == true then
        local stringtext = string.match(text, '%q*(.+)')
        if stringtext ~= nil then
            local idplayer = tonumber(stringtext)
            if idplayer == nil then
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if sampIsPlayerConnected(i) or i == myid then
                        local nick = sampGetPlayerNickname(i)
                        if string.find(string.lower(nick), string.lower(stringtext)) then
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(b)
                            color = sampGetPlayerColor(b)
                            color = string.format("%X", color)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "66%1") else color = string.gsub(color, "..(......)", "FF%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        end
                    end
                end
            else
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if idplayer == i then
                        if sampIsPlayerConnected(i) or i == myid then
                            local nick = sampGetPlayerNickname(i)
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(b)
                            color = sampGetPlayerColor(b)
                            color2 = string.format("%X", color)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "66%1") else color = string.gsub(color, "..(......)", "FF%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        else
                            if idplayer < 0 or idplayer > sampGetMaxPlayerId(false) then
                                sampAddChatMessage('[ {800000}HitMan {ffffff}]: Не меньше нуля и не больше {800000}'..sampGetMaxPlayerId(false)'.{ffffff}', -1)
                            end
                        end
                    end
                end
            end
        else
            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Информация об игроке - [ {800000}/id {ffffff}]', -1)
        end
    else
        sampSendChat("/id "..text)
    end
end

короче пытался сделать чтобы типа если человек в афк стоит то его ник был прозрачным но сохранял основной цвет, взял как пример FChecker от яблока но не оч разобрался

понимаю что там стоит немного другой формат цвета но не понимаю как он будет сохранять цвет

upd:
Lua:
function idPlayer(text)
    local data = inicfg.load(nil, 'moonloader\\config\\hitman.ini')
    if data.options.sid == true then
        local stringtext = string.match(text, '%q*(.+)')
        if stringtext ~= nil then
            local idplayer = tonumber(stringtext)
            if idplayer == nil then
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if sampIsPlayerConnected(i) or i == myid then
                        local nick = sampGetPlayerNickname(i)
                        if string.find(string.lower(nick), string.lower(stringtext)) then
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(i)
                            color2 = sampGetPlayerColor(i)
                            color2 = string.format("%X", color2)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "06%") else color = string.gsub(color, "..(......)", "ff%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        end
                    end
                end

чет набыдлил тут, теперь он хоть сам цвет показывает, но если человек уходит в афк то 0 реакции
 
Последнее редактирование:

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,484
Lua:
function idPlayer(text)
    local data = inicfg.load(nil, 'moonloader\\config\\hitman.ini')
    if data.options.sid == true then
        local stringtext = string.match(text, '%q*(.+)')
        if stringtext ~= nil then
            local idplayer = tonumber(stringtext)
            if idplayer == nil then
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if sampIsPlayerConnected(i) or i == myid then
                        local nick = sampGetPlayerNickname(i)
                        if string.find(string.lower(nick), string.lower(stringtext)) then
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(b)
                            color = sampGetPlayerColor(b)
                            color = string.format("%X", color)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "66%1") else color = string.gsub(color, "..(......)", "FF%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        end
                    end
                end
            else
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if idplayer == i then
                        if sampIsPlayerConnected(i) or i == myid then
                            local nick = sampGetPlayerNickname(i)
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(b)
                            color = sampGetPlayerColor(b)
                            color2 = string.format("%X", color)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "66%1") else color = string.gsub(color, "..(......)", "FF%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        else
                            if idplayer < 0 or idplayer > sampGetMaxPlayerId(false) then
                                sampAddChatMessage('[ {800000}HitMan {ffffff}]: Не меньше нуля и не больше {800000}'..sampGetMaxPlayerId(false)'.{ffffff}', -1)
                            end
                        end
                    end
                end
            end
        else
            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Информация об игроке - [ {800000}/id {ffffff}]', -1)
        end
    else
        sampSendChat("/id "..text)
    end
end

короче пытался сделать чтобы типа если человек в афк стоит то его ник был прозрачным но сохранял основной цвет, взял как пример FChecker от яблока но не оч разобрался

понимаю что там стоит немного другой формат цвета но не понимаю как он будет сохранять цвет

upd:
Lua:
function idPlayer(text)
    local data = inicfg.load(nil, 'moonloader\\config\\hitman.ini')
    if data.options.sid == true then
        local stringtext = string.match(text, '%q*(.+)')
        if stringtext ~= nil then
            local idplayer = tonumber(stringtext)
            if idplayer == nil then
                for i = 0, 1000 do
                    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
                    if sampIsPlayerConnected(i) or i == myid then
                        local nick = sampGetPlayerNickname(i)
                        if string.find(string.lower(nick), string.lower(stringtext)) then
                            local ping = sampGetPlayerPing(i)
                            local color = string.format("%06X", ARGBtoRGB(sampGetPlayerColor(i)))
                            afk = sampIsPlayerPaused(i)
                            color2 = sampGetPlayerColor(i)
                            color2 = string.format("%X", color2)
                            local score = sampGetPlayerScore(i)
                            local nick = nick:gsub('_', ' ')
                            if afk then color = string.gsub(color, "..(......)", "06%") else color = string.gsub(color, "..(......)", "ff%1")
                            end
                            sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ник: {'..color..'}'..nick..'{ffffff}, ID: {800000}'..i..'{ffffff}, LVL: {800000}'..score..'{ffffff}, Ping: {800000}'..ping, -1)
                        end
                    end
                end

чет набыдлил тут, теперь он хоть сам цвет показывает, но если человек уходит в афк то 0 реакции
Работает только если игрок в зоне стрима.
 
  • Нравится
Реакции: штейн

Forevor

Известный
77
5
Почему диалог не закрывается?
Lua:
    if id == 298 and open_car then
        sampSendDialogResponse(id, 1, 0)
        if sampIsDialogActive() then
        sampCloseCurrentDialogWithButton(0)
        end
        open_car = false
        return false
    end
 

ShuffleBoy

Известный
Друг
754
429
Почему диалог не закрывается?
Lua:
    if id == 298 and open_car then
        sampSendDialogResponse(id, 1, 0)
        if sampIsDialogActive() then
        sampCloseCurrentDialogWithButton(0)
        end
        open_car = false
        return false
    end
Толи баг, Толи что, лучше выставляй listitem а потом уже закрывай с кнопкой, сенд респонс не юзай
 

штейн

Известный
Проверенный
1,001
687
Почему диалог не закрывается?
Lua:
    if id == 298 and open_car then
        sampSendDialogResponse(id, 1, 0)
        if sampIsDialogActive() then
        sampCloseCurrentDialogWithButton(0)
        end
        open_car = false
        return false
    end

Lua:
function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 298 and open_car then
    sampSendDialogResponse(id, 1, 0)
        open_car = false
        return false
    end
end

function huina()
    open_car = true
    sampSendChat('/car')
end

Lua:
local sampev = require 'lib.samp.events' -- в начало скрипта

upd:
короче, там в одном диалоге сразу два диалога, 653 и 298, ты сразу пытаешься выполнить 298 но так как его нет и открыватеся 653 ничего соответственно работать не будет

Lua:
function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 653 and open_car then
        sampSendDialogResponse(id, 1, 0)
        open_car2 = true
        return false
    end
    if id == 298 and open_car2 then
        sampSendDialogResponse(id, 1, 0)
        open_car = false
        return false
    end
end

function huina()
    open_car = true
    sampSendChat('/car')
end



--------------------------------------------------------------------------------------------------

короче есть непонятный мне трабл, почему-то несмотря на то, что я активирую otstrel2, он не хочет через else мне оповещать о том, что он уже активирован, в чём может быть проблема я просто не понимаю

Lua:
function gootstrel()
    lua_thread.create(function()
        if gootstrel then
            if otstrel then
                if nick == 'Schweitzer_Rewzeisch' then
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я активировал режим отстрела.", -1)
                    otstrel2 = true
                    wait(500)
                    otstrelspisok()
                else
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я не имею права на использование данной команды.", -1)
                end
            else
                if otstrel2 then
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Режим отстрела и так активирован.", -1)
                end
            end
        end
    end)
end
 
Последнее редактирование:

Cameron_Bawerman

Участник
99
1
Помогите пж, я вот тут почти написал ну и нашел код на оружия, как сделать что бы он не писал fist когда я достаю кулак а он пишет Fist, как это убрать
Lua:
local game_weapons = require 'game.weapons'

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        local currentWeapon = getCurrentCharWeapon(playerPed)
        if currentWeapon ~= lastWeapon then
            sampAddChatMessage('/me достал ' .. game_weapons.get_name(currentWeapon), -1)
            lastWeapon = currentWeapon
        end
     end
end
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,484
Помогите пж, я вот тут почти написал ну и нашел код на оружия, как сделать что бы он не писал fist когда я достаю кулак а он пишет Fist, как это убрать
Lua:
local game_weapons = require 'game.weapons'

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        local currentWeapon = getCurrentCharWeapon(playerPed)
        if currentWeapon ~= lastWeapon then
            sampAddChatMessage('/me достал ' .. game_weapons.get_name(currentWeapon), -1)
            lastWeapon = currentWeapon
        end
     end
end
Lua:
if currentWeapon ~= lastWeapon and currentWeapon ~= 'Fist' then

------------

Lua:
function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 298 and open_car then
    sampSendDialogResponse(id, 1, 0)
        open_car = false
        return false
    end
end

function huina()
    open_car = true
    sampSendChat('/car')
end

Lua:
local sampev = require 'lib.samp.events' -- в начало скрипта

upd:
короче, там в одном диалоге сразу два диалога, 653 и 298, ты сразу пытаешься выполнить 298 но так как его нет и открыватеся 653 ничего соответственно работать не будет

Lua:
function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 653 and open_car then
        sampSendDialogResponse(id, 1, 0)
        open_car2 = true
        return false
    end
    if id == 298 and open_car2 then
        sampSendDialogResponse(id, 1, 0)
        open_car = false
        return false
    end
end

function huina()
    open_car = true
    sampSendChat('/car')
end



--------------------------------------------------------------------------------------------------

короче есть непонятный мне трабл, почему-то несмотря на то, что я активирую otstrel2, он не хочет через else мне оповещать о том, что он уже активирован, в чём может быть проблема я просто не понимаю

Lua:
function gootstrel()
    lua_thread.create(function()
        if gootstrel then
            if otstrel then
                if nick == 'Schweitzer_Rewzeisch' then
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я активировал режим отстрела.", -1)
                    otstrel2 = true
                    wait(500)
                    otstrelspisok()
                else
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я не имею права на использование данной команды.", -1)
                end
            else
                if otstrel2 then
                    sampAddChatMessage("[ {800000}HitMan {ffffff}]: Режим отстрела и так активирован.", -1)
                end
            end
        end
    end)
end
Где активация gootstrel и otstrel?