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

Удалённый пользователь 257775

Гость
Обычное, емаё
Код:
if ... then
...
end
Я может прям сильно туплю, но
Lua:
if menu_window_state.v == false then
    imgui.Process = false
end
не работает, нужно-ли создать какой-то новый imgui.Process и как это делать?
Дайте какой-то нормальный курс по imgui на Lua если таковой имеется :CC
 

trefa

3d print
Всефорумный модератор
2,112
1,276
Я может прям сильно туплю, но
Lua:
if menu_window_state.v == false then
    imgui.Process = false
end
не работает, нужно-ли создать какой-то новый imgui.Process и как это делать?
Дайте какой-то нормальный курс по imgui на Lua если таковой имеется :CC
Lua:
if ... then
imgui.Begin()
...
imgui.End()
end
if ... then
imgui.Begin()
...
imgui.End()
end
 
У

Удалённый пользователь 257775

Гость
Помогите, можете создать в данном коде новое окно imgui, которое будет открываться на клавишу "F9"
Желательно закоментируйте всё что вы сделали, огромнейшое спасибо всем кто поможет, и конечно с меня по почте ананас :D

Lua:
--Arizona Helper v0.1
require "lib.moonloader"

local keys = require "vkeys"
local imgui = require "lib.imgui"
local encoding = require "lib.encoding"
local tag = "{FFFFFF}[7P Script]:{3BADFE} "
local mc = 0x3BADFE
local wc = 0xFFFFFF
local mct = '{3BADFE}'
local wct = '{FFFFFF}'
local name = '"{FF2E2E}Arizona {FFFFFF}Helper"{3BADFE}'
local version = '0.1'
local sampev = require 'lib.samp.events'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    color = ("%06x"):format(sampGetPlayerColor(idp))
    thread = lua_thread.create_suspended(thread_function)
    sampRegisterChatCommand("azhelp", cmd_azhelp)
    sampRegisterChatCommand("cchat", cmd_cchat) -- регистрируем команду очистки чата
    sampAddChatMessage(tag .. name .. "- активирован!!",wc)
    sampAddChatMessage(tag .. 'Версия скрипта - ' .. version,wc)
        sampAddChatMessage(tag .. 'Используйте: ' .. wct .. '/azhelp' .. mct .. ' для того, что-бы узнать весь список функций скрипта!',wc)
    print(mct .. "Скрипт Активирован!")
    while not sampIsLocalPlayerSpawned() do wait(100) return end --[[делаем проверку на то заспавнен ли игрок потому что после доступности сампа твой локальный ид будет равен 0 и вот только потом получаем ID]]
    _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
    imgui.Process = false
    while true do
        wait(0)
      
        if main_window_state.v == false then
            imgui.Process = false
        end
        
        if isKeyJustPressed(VK_L) and not sampIsChatInputActive() and not sampIsDialogActive() then
            sampSendChat("/lock")
        end
      
        if isKeyDown(VK_I) and isKeyJustPressed(VK_D) and not sampIsChatInputActive() and not sampIsDialogActive() then -- узнаём свой ID
            sampAddChatMessage(tag .. 'Ваш ID: {FFFFFF}' .. idp, wc)
        end
        if isKeyDown(VK_E) and isKeyJustPressed(VK_Z) and not sampIsChatInputActive() and not sampIsDialogActive()  then -- ez - время
            sampAddChatMessage(tag .. "Время:", wc)
            sampSendChat("/time")
        end       
        if isKeyDown(VK_A) and isKeyDown(VK_R) and isKeyJustPressed(VK_M) and not sampIsChatInputActive() and not sampIsDialogActive()  then  -- При нажатии ARM вы юзаете броник
            sampSendChat("/armour")
        end   
        if isKeyDown(VK_M) and isKeyDown(VK_S) and isKeyJustPressed(VK_K) and not sampIsChatInputActive() and not sampIsDialogActive()  then
            sampSendChat("/mask")
        end
        if isKeyJustPressed(VK_P) and not sampIsChatInputActive() and not sampIsDialogActive() then
            sampSendChat("/phone")
        end
    end
end

function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 1000 then
    lua_thread.create(function()
    wait(10)
    sampCloseCurrentDialogWithButton(1)
    end)
    end
end

function cmd_cchat()
        for i=1, 30 do
        sampAddChatMessage("", wc)
        end
end

--function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
--print(dialogId)
--print(style)
--print(title)
--print(buuton1)
--print(button2)
--print(text)
--end

function imgui.OnDrawFrame()
    local ex, ey = getScreenResolution()
    imgui.SetNextWindowSize(imgui.ImVec2(400, 400), imgui.Cond.FirstUseEver) -- пример
    imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 200, ey / 2 - 200), imgui.Cond.FirstUseEver) -- пример
    imgui.Begin(u8"Первая помощь!", main_window_state)
    imgui.Text(u8" /azhelp - Вывести это окно.")
    imgui.Text(u8" /cchat - очистить чат.")
    imgui.Text(u8" 'P' - Достать телефон")
    imgui.Text(u8" 'L' - Открыть/закрыть личный транспорт")
    imgui.Text(u8" 'I + D' - Узнать свой ID")
    imgui.Text(u8" 'E + Z' - Посмотреть время (/time)")
    imgui.Text(u8" 'A + R + M' - Надеть бронежилет.")
    imgui.Text(u8" 'M + S + K' - Надеть маску.")
    imgui.Text(u8" ")
    imgui.Text(u8" Специально для BlastHack, автор: vendykoff")
    imgui.End()

end

function cmd_azhelp()
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end
 

Carrentine

Потрачен
569
462
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Помогите, можете создать в данном коде новое окно imgui, которое будет открываться на клавишу "F9"
Желательно закоментируйте всё что вы сделали, огромнейшое спасибо всем кто поможет, и конечно с меня по почте ананас :D

Lua:
--Arizona Helper v0.1
require "lib.moonloader"

local keys = require "vkeys"
local imgui = require "lib.imgui"
local encoding = require "lib.encoding"
local tag = "{FFFFFF}[7P Script]:{3BADFE} "
local mc = 0x3BADFE
local wc = 0xFFFFFF
local mct = '{3BADFE}'
local wct = '{FFFFFF}'
local name = '"{FF2E2E}Arizona {FFFFFF}Helper"{3BADFE}'
local version = '0.1'
local sampev = require 'lib.samp.events'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    color = ("%06x"):format(sampGetPlayerColor(idp))
    thread = lua_thread.create_suspended(thread_function)
    sampRegisterChatCommand("azhelp", cmd_azhelp)
    sampRegisterChatCommand("cchat", cmd_cchat) -- регистрируем команду очистки чата
    sampAddChatMessage(tag .. name .. "- активирован!!",wc)
    sampAddChatMessage(tag .. 'Версия скрипта - ' .. version,wc)
        sampAddChatMessage(tag .. 'Используйте: ' .. wct .. '/azhelp' .. mct .. ' для того, что-бы узнать весь список функций скрипта!',wc)
    print(mct .. "Скрипт Активирован!")
    while not sampIsLocalPlayerSpawned() do wait(100) return end --[[делаем проверку на то заспавнен ли игрок потому что после доступности сампа твой локальный ид будет равен 0 и вот только потом получаем ID]]
    _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
    imgui.Process = false
    while true do
        wait(0)
     
        if main_window_state.v == false then
            imgui.Process = false
        end
       
        if isKeyJustPressed(VK_L) and not sampIsChatInputActive() and not sampIsDialogActive() then
            sampSendChat("/lock")
        end
     
        if isKeyDown(VK_I) and isKeyJustPressed(VK_D) and not sampIsChatInputActive() and not sampIsDialogActive() then -- узнаём свой ID
            sampAddChatMessage(tag .. 'Ваш ID: {FFFFFF}' .. idp, wc)
        end
        if isKeyDown(VK_E) and isKeyJustPressed(VK_Z) and not sampIsChatInputActive() and not sampIsDialogActive()  then -- ez - время
            sampAddChatMessage(tag .. "Время:", wc)
            sampSendChat("/time")
        end      
        if isKeyDown(VK_A) and isKeyDown(VK_R) and isKeyJustPressed(VK_M) and not sampIsChatInputActive() and not sampIsDialogActive()  then  -- При нажатии ARM вы юзаете броник
            sampSendChat("/armour")
        end  
        if isKeyDown(VK_M) and isKeyDown(VK_S) and isKeyJustPressed(VK_K) and not sampIsChatInputActive() and not sampIsDialogActive()  then
            sampSendChat("/mask")
        end
        if isKeyJustPressed(VK_P) and not sampIsChatInputActive() and not sampIsDialogActive() then
            sampSendChat("/phone")
        end
    end
end

function sampev.onShowDialog(id, style, title, b1, b2, text)
    if id == 1000 then
    lua_thread.create(function()
    wait(10)
    sampCloseCurrentDialogWithButton(1)
    end)
    end
end

function cmd_cchat()
        for i=1, 30 do
        sampAddChatMessage("", wc)
        end
end

--function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
--print(dialogId)
--print(style)
--print(title)
--print(buuton1)
--print(button2)
--print(text)
--end

function imgui.OnDrawFrame()
    local ex, ey = getScreenResolution()
    imgui.SetNextWindowSize(imgui.ImVec2(400, 400), imgui.Cond.FirstUseEver) -- пример
    imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 200, ey / 2 - 200), imgui.Cond.FirstUseEver) -- пример
    imgui.Begin(u8"Первая помощь!", main_window_state)
    imgui.Text(u8" /azhelp - Вывести это окно.")
    imgui.Text(u8" /cchat - очистить чат.")
    imgui.Text(u8" 'P' - Достать телефон")
    imgui.Text(u8" 'L' - Открыть/закрыть личный транспорт")
    imgui.Text(u8" 'I + D' - Узнать свой ID")
    imgui.Text(u8" 'E + Z' - Посмотреть время (/time)")
    imgui.Text(u8" 'A + R + M' - Надеть бронежилет.")
    imgui.Text(u8" 'M + S + K' - Надеть маску.")
    imgui.Text(u8" ")
    imgui.Text(u8" Специально для BlastHack, автор: vendykoff")
    imgui.End()

end

function cmd_azhelp()
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

во первых сложно читать, во вторых лень. комментируй все что делаешь и кидай куски кода где нужна помощь а не весь код
 
У

Удалённый пользователь 257775

Гость
во первых сложно читать, во вторых лень. комментируй все что делаешь и кидай куски кода где нужна помощь а не весь код
Я-же хер знает где именно тут нужно что-то вставить, а насчёт комментариев, ты пожалуй прав..


Помогите, можете создать в данном коде новое окно imgui, которое будет открываться на клавишу "F9"
Желательно закоментируйте всё что вы сделали, огромнейшое спасибо всем кто поможет, и конечно с меня по почте ананас :D
Полный код потому-что я не знаю что и где, всего 120 строк :C
Помогите опять-таки новичку в Lua :C

Code:
--Arizona Helper v0.1
require "lib.moonloader"

local keys = require "vkeys" -- подключаю библиотеку vkeys
local imgui = require "lib.imgui" -- подключаю imgui
local encoding = require "lib.encoding" -- теперь encoding
ocal sampev = require 'lib.samp.events' -- Самп Ивент подключаю

-- полезные локальные переменные которые потом сильно помогут
local tag = "{FFFFFF}[7P Script]:{3BADFE} "
local name = '"{FF2E2E}Arizona {FFFFFF}Helper"{3BADFE}'
local version = '0.1'
-- цвета
local mc = 0x3BADFE
local wc = 0xFFFFFF
local mct = '{3BADFE}'
local wct = '{FFFFFF}'
-- настройка encoding для стабильного отображения кириллицы в imgui
encoding.default = 'CP1251'
u8 = encoding.UTF8

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    color = ("%06x"):format(sampGetPlayerColor(idp))
    thread = lua_thread.create_suspended(thread_function)
    sampRegisterChatCommand("azhelp", cmd_azhelp) -- регистрируем команду открытия окна помощи
    sampRegisterChatCommand("cchat", cmd_cchat) -- регистрируем команду очистки чата
    -- текст при старте скрипта
    wait(2000)
    sampAddChatMessage(tag .. name .. "- активирован!!",wc)
    sampAddChatMessage(tag .. 'Версия скрипта - ' .. version,wc)
        sampAddChatMessage(tag .. 'Используйте: ' .. wct .. '/azhelp' .. mct .. ' для того, что-бы узнать весь список функций скрипта!',wc)
    print(mct .. "Скрипт Активирован!")
    --делаем проверку на то заспавнен ли игрок потому что после доступности сампа твой локальный ид будет равен 0 и вот только потом получаем ID
    while not sampIsLocalPlayerSpawned() do wait(100) return end
    --объявляем глобальную переменную idp
    _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
    imgui.Process = false
    --цикл постоянного выполнения функций
    while true do
        wait(0)
     
        if main_window_state.v == false then -- если main_window_state = ложь, тогда imgui не работает
            imgui.Process = false
        end
       
        if isKeyJustPressed(VK_L) and not sampIsChatInputActive() and not sampIsDialogActive() then -- регистрируем /lock
            sampSendChat("/lock")
        end
     
        if isKeyDown(VK_I) and isKeyJustPressed(VK_D) and not sampIsChatInputActive() and not sampIsDialogActive() then -- узнаём свой ID
            sampAddChatMessage(tag .. 'Ваш ID: {FFFFFF}' .. idp, wc)
        end
        if isKeyDown(VK_E) and isKeyJustPressed(VK_Z) and not sampIsChatInputActive() and not sampIsDialogActive()  then -- ez - время
            sampAddChatMessage(tag .. "Время:", wc)
            sampSendChat("/time")
        end      
        if isKeyDown(VK_A) and isKeyDown(VK_R) and isKeyJustPressed(VK_M) and not sampIsChatInputActive() and not sampIsDialogActive()  then  -- При нажатии ARM вы юзаете броник
            sampSendChat("/armour")
        end  
        if isKeyDown(VK_M) and isKeyDown(VK_S) and isKeyJustPressed(VK_K) and not sampIsChatInputActive() and not sampIsDialogActive()  then --  при нажатии MSK вы надевааете маску
            sampSendChat("/mask")
        end
        if isKeyJustPressed(VK_P) and not sampIsChatInputActive() and not sampIsDialogActive() then -- мобилка
            sampSendChat("/phone")
        end
    end
end

function sampev.onShowDialog(id, style, title, b1, b2, text) -- автоматом принимаем диалог выбора телефона
    if id == 1000 then
    lua_thread.create(function()
    wait(10)
    sampCloseCurrentDialogWithButton(1)
    end)
    end
end

function cmd_cchat() -- очистка чата
        for i=1, 30 do
        sampAddChatMessage("", wc)
        end
end

--function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
--print(dialogId)
--print(style)
--print(title)
--print(buuton1)
--print(button2)
--print(text)
--end

function imgui.OnDrawFrame() -- /azhelp меню
    local ex, ey = getScreenResolution()
    imgui.SetNextWindowSize(imgui.ImVec2(400, 400), imgui.Cond.FirstUseEver) -- пример
    imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 200, ey / 2 - 200), imgui.Cond.FirstUseEver) -- пример
    imgui.Begin(u8"Первая помощь!", main_window_state)
    imgui.Text(u8" /azhelp - Вывести это окно.")
    imgui.Text(u8" /cchat - очистить чат.")
    imgui.Text(u8" 'P' - Достать телефон")
    imgui.Text(u8" 'L' - Открыть/закрыть личный транспорт")
    imgui.Text(u8" 'I + D' - Узнать свой ID")
    imgui.Text(u8" 'E + Z' - Посмотреть время (/time)")
    imgui.Text(u8" 'A + R + M' - Надеть бронежилет.")
    imgui.Text(u8" 'M + S + K' - Надеть маску.")
    imgui.Text(u8" ")
    imgui.Text(u8" Специально для BlastHack, автор: vendykoff")
    imgui.End()

end

function cmd_azhelp() -- включение данного меню
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end
 
Последнее редактирование модератором:

Xasthul

Новичок
1
0
Я хочу сделать уведомления для телеграма, например: когда в чате появляется слово "Администратор", то мне бот в телеграмме присылает сообщение какое-нибудь, как я могу это сделать? Я сделал ссылку: "https://api.telegram.org/bot' .. token .. '/sendMessage?chat_id=' .. chatid .. '&text= .. text", только как ее отправить? Я нашел, что нужна библиотека internet, но не знаю как ее подключить, помогите, пожалуйста.
 

neverlane

t.me/neverlane00
Друг
1,010
1,159
Как сделать правильно либу?
Я делаю так
Что в либе, название либы aslib:
function GetVers(numver)
    print('Ver: '..numver)
end
что в скрипте:
--до main
local aslib = require 'aslib'
--в мейне после проверки на загружиность сампа
aslib.GetVers(1)
и после проверки крашит при вызове


Крашит:
[ML] (error) ARZ Assistant: D:\gta ronny\moonloader\ARZ Assistant.lua:315: attempt to index upvalue 'aslib' (a boolean value)
stack traceback:
    D:\gta ronny\moonloader\ARZ Assistant.lua: in function <D:\gta ronny\moonloader\ARZ Assistant.lua:309>
[ML] (error) ARZ Assistant: Script died due to an error. (0EFEEC04)
 

Германский

Потрачен
43
3
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как сохранить данные веденные в диалог?
Игрок пишет текст в диалог, как их записать в переменную:
 

REMI99

Известный
38
1
I want to make a script. when they kick me out of the interior, i'll still be able to see them and they will see me too
 

Cod

Участник
117
15
- Как проверить является ли строка числом? (возможно что-то мимо регулярных выражений, но не важно)
- Как проверить нахожусь я в игре(авторизован на сервере) или нет?
Буду благодарен за ответ.
 

Musaigen

abobusnik
Проверенный
1,620
1,404
- Как проверить является ли строка числом? (возможно что-то мимо регулярных выражений, но не важно)
- Как проверить нахожусь я в игре(авторизован на сервере) или нет?
Буду благодарен за ответ.
1. type(value) == "number"
2. Писать самостоятельно систему. Можно проверять по уровню персонажа и т.д.
 

Германский

Потрачен
43
3
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
- Как проверить является ли строка числом? (возможно что-то мимо регулярных выражений, но не важно)
- Как проверить нахожусь я в игре(авторизован на сервере) или нет?
Буду благодарен за ответ.
2. Проверить был ли перс заспавнен в мире
 
  • Нравится
Реакции: Cod

astynk

Известный
Проверенный
741
532
Помогите пожалуйста. Хочу сделать простой биндер для себя на lua, ибо lua стабильнее АХК. Суть биндера - отыгровка на стандартные команды.
К примеру: /cuff [id] -- /do Наручники висят на ремне. /me снял наручники с ремня и одел их на преступника. и после отыгровки уже одевает наручники
/arrest [id] [time] -- рп отыгровка, а после нее /arrest [id] [time]

Типо как сделать активацию по команде и что бы id вместе с time переносились потом в конец функции.
Lua:
sampRegisterChatCommand('arrest', function (arg)
    local id, time = arg:match('(%d+)%s*(%d*)')
    if not (id and time) then
        return sampAddChatMessage('Введите /arrest [ID] [time]', -1)
    end
    sampSendChat('/do ...')
    sampSendChat('/me ...')
    sampSendChat('/arrest ' .. arg)
end)
I want to make a script. when they kick me out of the interior, i'll still be able to see them and they will see me too
Impossible to do that. You can ignore interior change RPC, but when the server sets your virtual world there's no way to bypass it.
- Как проверить является ли строка числом? (возможно что-то мимо регулярных выражений, но не важно)
Lua:
if tonumber(str) then
 
  • Нравится
Реакции: Tr1ple