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

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,993
2,180
  • Нравится
Реакции: vuyy

kro4icks

Участник
11
0
Итак, добрый день, дорогие программисты и читатели данной темы.
Смотрел видео thechampguess, ютубер, который учит программироваю и наткнулся на видео, где у меня почему то код не работает. Облазил уже все форумы, пытался сам у него спросить, сам что-то исправлял, но по итогу нечего не вышло.
В IMGUI есть функция. Imgui.Hotkey(), которая создаёт меню где можно выбрать определённую клавишу и забиндить её, но у меня всё биндится, вроде всё работает, но по итогу функция для этой клавиши не работает.
Lua:
script_name('Imgui Addons Hotkey') -- название скрипта
script_author('FORMYS') -- автор скрипта
script_description('Imgui Addons Hotkey Review') -- описание скрипта

require "lib.moonloader" -- подключение библиотеки
local keys = require "vkeys"
local imgui = require 'imgui'
local inicfg = require 'inicfg'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local directIni = "moonloader\\settings.ini"

local mainIni = inicfg.load(nil, directIni)

if mainIni.hotkey == nil then -- если отсутствует секция hotkey в ини файле
    mainIni.hotkey = {
        bindClock = "[18,82]", -- alt + r
        bindPass = "[18,83]" -- alt + s
    }
end

local rkeys = require 'rkeys'
imgui.HotKey = require('imgui_addons').HotKey

local tLastKeys = {} -- тут будут храниться предыдущие хоткеи при переактивации

local ActiveClockMenu = {
    v = decodeJson(mainIni.hotkey.bindClock)
}

local ActivePassMenu = {
    v = decodeJson(mainIni.hotkey.bindPass)
}

main_window_state = imgui.ImBool(false)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand("hotkey", cmd_hotkey)

    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)

    imgui.Process = false

    imgui.SwitchContext()
    themes.SwitchColorTheme()

    bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc) -- создаем объект хоткея и регистрируем коллбэк функцию
    bindPass = rkeys.registerHotKey(ActivePassMenu.v, true, passFunc)

    while true do
        wait(0)

        -- Блок выполняющийся бесконечно (пока самп активен)

    end
end

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

function clockFunc()
    sampSendChat("/c 60")
end

function passFunc()
    sampSendChat("/pass " .. id)
end

function imgui.OnDrawFrame()

    if not main_window_state.v then
        imgui.Process = false
    end

    if main_window_state.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, 200), imgui.Cond.FirstUseEver)

        imgui.Begin('Imgui Hotkey Review', main_window_state, imgui.WindowFlags.NoCollapse)

        imgui.Text(u8"Посмотреть время")
        imgui.SameLine()
        if imgui.HotKey("##1", ActiveClockMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
            sampAddChatMessage("Успешно! Старое значение: {F4A460}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. "{ffffff} | Новое: {F4A460}" .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "), -1)
            sampAddChatMessage("Строчное значение: {F4A460}" .. encodeJson(ActiveClockMenu.v), -1)

            mainIni.hotkey.bindClock = encodeJson(ActiveClockMenu.v)
            inicfg.save(mainIni, directIni)
        end

        imgui.Text(u8"Посмотреть паспорт")
        imgui.SameLine()
        if imgui.HotKey("##2", ActivePassMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindPass, ActivePassMenu.v)
            sampAddChatMessage("Успешно! Старое значение: {F4A460}" .. table.concat(rkeys.getKeysName(tLastKeys.v), " + ") .. "{ffffff} | Новое: {F4A460}" .. table.concat(rkeys.getKeysName(ActivePassMenu.v), " + "), -1)
            sampAddChatMessage("Строчное значение: {F4A460}" .. encodeJson(ActivePassMenu.v), -1)

            mainIni.hotkey.bindPass = encodeJson(ActivePassMenu.v)
            inicfg.save(mainIni, directIni)
        end

        imgui.End()
    end
end
Если найдутся разработчики, кто сможет помочь в данном деле буду благодарен!
 

sep

Известный
682
76
как кликнуть на все по порядку пункты в диологе
тупо все по порядку писать sampSendDialogResponse(3107, 1, 0, text) не работает
if dialogId == 3107 then
sampSendDialogResponse(3107, 1, 1, text)
sampSendDialogResponse(3107, 1, 2, text)
sampSendDialogResponse(3107, 1, 3, text)
end
так не работает
 

chapo

чопа сребдс
Модератор
8,840
11,505
как кликнуть на все по порядку пункты в диологе
тупо все по порядку писать sampSendDialogResponse(3107, 1, 0, text) не работает
if dialogId == 3107 then
sampSendDialogResponse(3107, 1, 1, text)
sampSendDialogResponse(3107, 1, 2, text)
sampSendDialogResponse(3107, 1, 3, text)
end
так не работает
Ну блять ясен хуй что не работает, у тебч же после первого ответа диалог закрывается
 
  • Нравится
Реакции: sep

sep

Известный
682
76
удалите пожалуста все лишнее нужны только ники времене надо
код:
require "lib.moonloader"
local sf = require 'sampfuncs'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'

site = 'https://pastebin.com/raw/11111111'

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Если сф и самп не знагружены - возращаемся обратно
    while not isSampAvailable() do wait(100) end -- Если самп не доступен - ждем 100 ms
    local bool, users = getTableUsersByUrl(site)
    local _, myid = sampGetPlayerIdByCharHandle(playerPed) -- Узнаём свой ид.
    if not isAvailableUser(users, sampGetPlayerNickname(myid)) then -- Если срок уже прошёл или в списке нету моего ника, то..
        sampAddChatMessage("КУ", 0x00ff00)
        thisScript():unload() -- Выгружаем скрипт.
    end       
-- место под команды

     while true do
      wait(0)

--место под постоянно выполнающие "скрипты" типо бидерови тд
      


function getTableUsersByUrl(url)
    local n_file, bool, users = os.getenv('TEMP')..os.time(), false, {}
    downloadUrlToFile(url, n_file, function(id, status)
        if status == 6 then bool = true end
    end)
    while not doesFileExist(n_file) do wait(0) end
    if bool then
        local file = io.open(n_file, 'r')
        for w in file:lines() do
            local n, d = w:match('(.*): (.*)')
            users[#users+1] = { name = n, date = d }
        end
        file:close()
        os.remove(n_file)
    end
    return bool, users
end

function isAvailableUser(users, name)
    for i, k in pairs(users) do
        if k.name == name then
            local d, m, y = k.date:match('(%d+)%.(%d+)%.(%d+)')
            local time = {
                day = tonumber(d),
                isdst = true,
                wday = 0,
                yday = 0,
                year = tonumber(y),
                month = tonumber(m),
                hour = 0
            }
            if os.time(time) >= os.time() then return true end
        end
    end
    return false
end

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

kultizdat.

Известный
114
8
Код:
function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    sampAddChatMessage("ID DIALOG - "..dialogId.." Заголовок Диалога - ".. title, -1)
    if title:find("Основная статистика")  then
        if show_stats_info == true then
            player_auth_date = text:match("%{FFFFFF%}Авторизация на сервере:    %{B83434%}(%d+:%d+%s%d+.%d+.%d+)")
            player_level = text:match("%{FFFFFF%}Уровень: %{B83434%}%[(%d+)%] ")
            player_exp_level = text:match("%{FFFFFF%}Уважение: %{B83434%}%[(%d+/%d+)%] ")
            player_money_on_hand= text:match("{FFFFFF}Наличные деньги %(SA%$%): {B83434}%[%$(%d+)%]")
            player_money_on_bank = text:match("{FFFFFF}Деньги в банке: {B83434}%[%$(%d+)%]")
            player_money_on_deposite = text:match("{FFFFFF}Деньги на депозите: {B83434}%[%$(%d+)%]")
            player_all_money = player_money_on_hand + player_money_on_bank + player_money_on_deposite
       
            lua_thread.create(function()
            wait(1000)
            sendTelegramNotification("Авторизация - ".. player_auth_date .."\n"
            .."Уровень игрока - "..tonumber(player_level).."\n"
            .."Респекты - "..player_exp_level.."\n"
            .."На руках $ - "..separator(player_money_on_hand).."\n"
            .."В банке $ - "..separator(player_money_on_bank).."\n"
            .."На депозите $ - "..separator(player_money_on_deposite).."\n"
            .."Общие деньги - "..separator(player_all_money))
            end)
        end
        return false
    end 
end

После того, как приходит диалог, инвентарь открывается, но по нему нельзя нажать..
 
Последнее редактирование:

sep

Известный
682
76
1) как сделать "визуальный" пикап если его взять то сработает команда
2) как сделать чтобы можно написать в файле ники и у кого есть доступ у того скрипт работал ? (файл на гигхапе или подобном сервисе)
плиз готовые коды есть ?
 
  • Злость
Реакции: qdIbp

Vintik

Через тернии к звёздам
Проверенный
1,521
994
Итак, добрый день, дорогие программисты и читатели данной темы.
Смотрел видео thechampguess, ютубер, который учит программироваю и наткнулся на видео, где у меня почему то код не работает. Облазил уже все форумы, пытался сам у него спросить, сам что-то исправлял, но по итогу нечего не вышло.
В IMGUI есть функция. Imgui.Hotkey(), которая создаёт меню где можно выбрать определённую клавишу и забиндить её, но у меня всё биндится, вроде всё работает, но по итогу функция для этой клавиши не работает.

Если найдутся разработчики, кто сможет помочь в данном деле буду благодарен!
А что в ini файл записывается?

1) как сделать "визуальный" пикап если его взять то сработает команда
Эмулировать RPC от сервера «Создать пикапа» (ID этого RPC — 95).
Параметры: int iPickupID, int iModelID, int iSpawnType, float x, float y, float z.
ID пикапа выбираешь любой, какой тебе понравится, от 0 до 1024 (вроде бы).
ID моделей для пикапов указаны здесь.
Типы создания пикапов указаны здесь.
Функция создания пикапа:
function CreatePickup(id, model, type, x, y, z)
    bs = raknetNewBitStream()
    raknetBitStreamWriteInt32(bs, id)
    raknetBitStreamWriteInt32(bs, model)
    raknetBitStreamWriteInt32(bs, type)
    raknetBitStreamWriteFloat(bs, x)
    raknetBitStreamWriteFloat(bs, y)
    raknetBitStreamWriteFloat(bs, z)
    raknetEmulRpcReceiveBitStream(95, bs)
    raknetDeleteBitStream(bs)
end
А чтобы срабатывала команда при взятии пикапа нужно использовать SAMP.Lua, а конкретно:
OUTCOMING_RPCS[RPC.PICKEDUPPICKUP] = {'onSendPickedUpPickup', {pickupId = 'int32'}}
То есть в коде это будет выглядеть вот так:
Функция проверки на взятие пикапа:
local ev = require 'samp.events'

function ev.onSendPickedUpPickup(pickupId)
    if pickupId == 777 then -- тут твой id, который ты придумаешь при создании
        -- тут что ты хочешь сделать при взятии пикапа
        return false -- серверу информацию отправлять не будем, т.к. пикап визуальный
    end
    return true
end
2) как сделать чтобы можно написать в файле ники и у кого есть доступ у того скрипт работал ? (файл на гигхапе или подобном сервисе)
плиз готовые коды есть ?
Проверять ники на Github с помощью библиотеки lua-requests.
Если ник не совпадает — выходить из скрипта.
Но тогда надо компилировать, чтобы хоть как-то усложнить процесс удаления этой проверки.
 
Последнее редактирование:
  • Нравится
Реакции: sep и mooh

sep

Известный
682
76
Проверять ники на Github с помощью библиотеки lua-requests.
Если ник не совпадает — выходить из скрипта.
Но тогда надо компилировать, чтобы хоть как-то усложнить процесс удаления этой проверки.
готовый код есть у когото ?
или как сократить этот до миниума (время действия можно удалить можно сократить код )


код:
require "lib.moonloader"
local sf = require 'sampfuncs'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'

site = 'https://pastebin.com/raw/ge111'

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Если сф и самп не знагружены - возращаемся обратно
    while not isSampAvailable() do wait(100) end -- Если самп не доступен - ждем 100 ms
    local bool, users = getTableUsersByUrl(site)
    local _, myid = sampGetPlayerIdByCharHandle(playerPed) -- Узнаём свой ид.
    if not isAvailableUser(users, sampGetPlayerNickname(myid)) then -- Если срок уже прошёл или в списке нету моего ника, то..
        sampAddChatMessage("КУ", 0x00ff00)
        thisScript():unload() -- Выгружаем скрипт.
    end       
-- место под команды
sampRegisterChatCommand('mmm', function(param) sampSendChat('/style') end)
     while true do
      wait(0)

--место под постоянно выполнающие "скрипты" типо бидерови тд
      
if isKeyDown(VK_MENU) and isKeyJustPressed(VK_3) then sampSendChat("/mn") end     
     end
end

function getTableUsersByUrl(url)
    local n_file, bool, users = os.getenv('TEMP')..os.time(), false, {}
    downloadUrlToFile(url, n_file, function(id, status)
        if status == 6 then bool = true end
    end)
    while not doesFileExist(n_file) do wait(0) end
    if bool then
        local file = io.open(n_file, 'r')
        for w in file:lines() do
            local n, d = w:match('(.*): (.*)')
            users[#users+1] = { name = n, date = d }
        end
        file:close()
        os.remove(n_file)
    end
    return bool, users
end

function isAvailableUser(users, name)
    for i, k in pairs(users) do
        if k.name == name then
            local d, m, y = k.date:match('(%d+)%.(%d+)%.(%d+)')
            local time = {
                day = tonumber(d),
                isdst = true,
                wday = 0,
                yday = 0,
                year = tonumber(y),
                month = tonumber(m),
                hour = 0
            }
            if os.time(time) >= os.time() then return true end
        end
    end
    return false
end
 

Vintik

Через тернии к звёздам
Проверенный
1,521
994
готовый код есть у когото ?
или как сократить этот до миниума (время действия можно удалить можно сократить код )


код:
require "lib.moonloader"
local sf = require 'sampfuncs'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'

site = 'https://pastebin.com/raw/ge111'

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Если сф и самп не знагружены - возращаемся обратно
    while not isSampAvailable() do wait(100) end -- Если самп не доступен - ждем 100 ms
    local bool, users = getTableUsersByUrl(site)
    local _, myid = sampGetPlayerIdByCharHandle(playerPed) -- Узнаём свой ид.
    if not isAvailableUser(users, sampGetPlayerNickname(myid)) then -- Если срок уже прошёл или в списке нету моего ника, то..
        sampAddChatMessage("КУ", 0x00ff00)
        thisScript():unload() -- Выгружаем скрипт.
    end      
-- место под команды
sampRegisterChatCommand('mmm', function(param) sampSendChat('/style') end)
     while true do
      wait(0)

--место под постоянно выполнающие "скрипты" типо бидерови тд
     
if isKeyDown(VK_MENU) and isKeyJustPressed(VK_3) then sampSendChat("/mn") end    
     end
end

function getTableUsersByUrl(url)
    local n_file, bool, users = os.getenv('TEMP')..os.time(), false, {}
    downloadUrlToFile(url, n_file, function(id, status)
        if status == 6 then bool = true end
    end)
    while not doesFileExist(n_file) do wait(0) end
    if bool then
        local file = io.open(n_file, 'r')
        for w in file:lines() do
            local n, d = w:match('(.*): (.*)')
            users[#users+1] = { name = n, date = d }
        end
        file:close()
        os.remove(n_file)
    end
    return bool, users
end

function isAvailableUser(users, name)
    for i, k in pairs(users) do
        if k.name == name then
            local d, m, y = k.date:match('(%d+)%.(%d+)%.(%d+)')
            local time = {
                day = tonumber(d),
                isdst = true,
                wday = 0,
                yday = 0,
                year = tonumber(y),
                month = tonumber(m),
                hour = 0
            }
            if os.time(time) >= os.time() then return true end
        end
    end
    return false
end
Оно не работает?
 

sakuta

Участник
37
9
готовый код есть у когото ?
или как сократить этот до миниума (время действия можно удалить можно сократить код )


код:
require "lib.moonloader"
local sf = require 'sampfuncs'
local encoding = require 'encoding'
local sampev = require 'lib.samp.events'

site = 'https://pastebin.com/raw/ge111'

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Если сф и самп не знагружены - возращаемся обратно
    while not isSampAvailable() do wait(100) end -- Если самп не доступен - ждем 100 ms
    local bool, users = getTableUsersByUrl(site)
    local _, myid = sampGetPlayerIdByCharHandle(playerPed) -- Узнаём свой ид.
    if not isAvailableUser(users, sampGetPlayerNickname(myid)) then -- Если срок уже прошёл или в списке нету моего ника, то..
        sampAddChatMessage("КУ", 0x00ff00)
        thisScript():unload() -- Выгружаем скрипт.
    end    
-- место под команды
sampRegisterChatCommand('mmm', function(param) sampSendChat('/style') end)
     while true do
      wait(0)

--место под постоянно выполнающие "скрипты" типо бидерови тд
   
if isKeyDown(VK_MENU) and isKeyJustPressed(VK_3) then sampSendChat("/mn") end  
     end
end

function getTableUsersByUrl(url)
    local n_file, bool, users = os.getenv('TEMP')..os.time(), false, {}
    downloadUrlToFile(url, n_file, function(id, status)
        if status == 6 then bool = true end
    end)
    while not doesFileExist(n_file) do wait(0) end
    if bool then
        local file = io.open(n_file, 'r')
        for w in file:lines() do
            local n, d = w:match('(.*): (.*)')
            users[#users+1] = { name = n, date = d }
        end
        file:close()
        os.remove(n_file)
    end
    return bool, users
end

function isAvailableUser(users, name)
    for i, k in pairs(users) do
        if k.name == name then
            local d, m, y = k.date:match('(%d+)%.(%d+)%.(%d+)')
            local time = {
                day = tonumber(d),
                isdst = true,
                wday = 0,
                yday = 0,
                year = tonumber(y),
                month = tonumber(m),
                hour = 0
            }
            if os.time(time) >= os.time() then return true end
        end
    end
    return false
end
сам пользуюсь этой привязкой, сократить - я сокрачу, на гитхаб думаю интуитивно можно догадаться как доделать.

Держи

привязка:
requests = require 'requests'

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

    while not isSampAvailable() do
        wait(100)
    end

    while not sampIsLocalPlayerSpawned() do
        wait(100)
    end

-- ЭТО ПРИВЯЗКА --

    local request = requests.get('ССЫЛКА НА ПАСТБИН НУ ИЛИ ЧТО ТО ТАКОЕ')
    local nick = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
    local function res()
        for n in request.text:gmatch('[^\r\n]+') do
            if nick:find(n) then return true end
        end
        return false
    end
    if not res() then sampAddChatMessage(' текст - который будет высвечиваться в чате при ненахождении ника в таблице ') error(' текст - который будет выдавать в сампфунксе при ненаходе ника ') end

-- ЭТО ПРИВЯЗКА --
 
  • Нравится
  • Ха-ха
Реакции: deleted-user-511790 и sep

sep

Известный
682
76
Оно не работает?
работает только слижной большой

сам пользуюсь этой привязкой, сократить - я сокрачу, на гитхаб думаю интуитивно можно догадаться как доделать.

Держи

привязка:
requests = require 'requests'

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

    while not isSampAvailable() do
        wait(100)
    end

    while not sampIsLocalPlayerSpawned() do
        wait(100)
    end

-- ЭТО ПРИВЯЗКА --

    local request = requests.get('ССЫЛКА НА ПАСТБИН НУ ИЛИ ЧТО ТО ТАКОЕ')
    local nick = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
    local function res()
        for n in request.text:gmatch('[^\r\n]+') do
            if nick:find(n) then return true end
        end
        return false
    end
    if not res() then sampAddChatMessage(' текст - который будет высвечиваться в чате при ненахождении ника в таблице ') error(' текст - который будет выдавать в сампфунксе при ненаходе ника ') end

-- ЭТО ПРИВЯЗКА --
как должен выгредеть ники в строчку или в столбец
 
Последнее редактирование:

Kaktyc007

Известный
166
11
Скинули lua скрипт, типа рабочий. Открываю, а там непонятные символы, пробовал менять кодировку, но ничего не меняется. Что необходимо сделать, чтобы посмотреть на код скрипта и внести в него корректировки?
1711389031681.png
 
  • Вау
Реакции: Vintik

chromiusj

Kommando-Leiteinheit Bioresonanztechnik-Replika
Модератор
5,504
3,830
Скинули lua скрипт, типа рабочий. Открываю, а там непонятные символы, пробовал менять кодировку, но ничего не меняется. Что необходимо сделать, чтобы посмотреть на код скрипта и внести в него корректировки? Посмотреть вложение 235507
может скрипт скомпилирован просто?скинь сюда или в помощь по изменению скриптов