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

ШPEK

Известный
1,474
525
Как сделать продолжение отыгровки при нажатии на клавишу?
 

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как сделать продолжение отыгровки при нажатии на клавишу?
не ну на такие вопросы отвечать это вообще глупо, раз ты сам этого не можешь додумат
Lua:
local otig = false -- global
function main()
if isKeyJustPressed(VK_F1) then
-- отыгровка 1
otig = true
end
if isKeyJustPressed(VK_F2) and otig then
-- отыгровка 2
otig = false
end
end
 
  • Нравится
Реакции: ШPEK

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
не ну на такие вопросы отвечать это вообще глупо, раз ты сам этого не можешь додумат
Lua:
local otig = false -- global
function main()
if isKeyJustPressed(VK_F1) then
-- отыгровка 1
otig = true
end
if isKeyJustPressed(VK_F2) and otig then
-- отыгровка 2
otig = false
end
end
А где же бесконечный цикл? Без него и горячие клавиши не будут работать, и скрипт не запустится. :)
 

ШPEK

Известный
1,474
525
не ну на такие вопросы отвечать это вообще глупо, раз ты сам этого не можешь додумат
Lua:
local otig = false -- global
function main()
if isKeyJustPressed(VK_F1) then
-- отыгровка 1
otig = true
end
if isKeyJustPressed(VK_F2) and otig then
-- отыгровка 2
otig = false
end
end
Не пашет
Lua:
if but == 1 and list == 6 then
             sampSendChat("Здравствуйте, сейчас я проведу медицинский осмотр.")
             wait(3000)
             sampSendChat("Хорошо, будьте добры встать к стене.")
             wait(100)
              sampAddChatMessage("Как человек встанет к стене, нажмите {00FF00}F5", -1)
              local otig = true
                 if isKeyJustPressed(VK_F5) and otig then
                    sampSendChat("/do На столе лежат тонкие перчатки.")
                    wait(3000)
                    sampSendChat("/me взял тонкие перчатки со стола")
                    wait(3000)
                    sampSendChat("/me надел перчатки на руки")
                    wait(3000)
                    sampSendChat("/do Перчатки на руках.")
                    wait(3000)
                    sampSendChat("/me приступил к медицинскому осмотру")
                    wait(3000)
                    sampSendChat("/me провел голову на наличие вшей")
                    wait(3000)
                    sampSendChat("/me прощупал живот и половой орган человека")
                    wait(100)
                    sampAddChatMessage("Нажмите {00FF00}F5 {ffffff}как подойдёте к столу", -1)
                    if isKeyJustPressed(VK_F5) and otig then
                            sampSendChat("/do Медицинская карта лежит на столе.")
                            wait(3000)
                            sampSendChat("/me взял медицинскую карту со стола")
                            wait(3000)
                            sampSendChat("/do На столе лежит ручка.")
                            wait(3000)
                            sampSendChat("/me взял ручку со стола")
                            wait(3000)
                            sampSendChat("/me поставил галочку на против строки 'Здоров'")
                            wait(3000)
                            sampSendChat("/me поставил подпись в граффе 'Подпись врача'")
                            wait(3000)
                            sampSendChat("/me положив ручку на стол, взял со стола печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me поставив печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me передал медицинскую карту пациенту")
                            wait(3000)
                            sampSendChat("/medcard "..id1)
                            local otig = false
                            sampAddChatMessage("Мед.карта выдана игроку {6666FF}"..name1.."{ffffff}[{00FF00}"..id1.."{FFFFFF}]", 0x66FF33) end
                end
                end
                end
 

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не пашет
Lua:
if but == 1 and list == 6 then
             sampSendChat("Здравствуйте, сейчас я проведу медицинский осмотр.")
             wait(3000)
             sampSendChat("Хорошо, будьте добры встать к стене.")
             wait(100)
              sampAddChatMessage("Как человек встанет к стене, нажмите {00FF00}F5", -1)
              local otig = true
                 if isKeyJustPressed(VK_F5) and otig then
                    sampSendChat("/do На столе лежат тонкие перчатки.")
                    wait(3000)
                    sampSendChat("/me взял тонкие перчатки со стола")
                    wait(3000)
                    sampSendChat("/me надел перчатки на руки")
                    wait(3000)
                    sampSendChat("/do Перчатки на руках.")
                    wait(3000)
                    sampSendChat("/me приступил к медицинскому осмотру")
                    wait(3000)
                    sampSendChat("/me провел голову на наличие вшей")
                    wait(3000)
                    sampSendChat("/me прощупал живот и половой орган человека")
                    wait(100)
                    sampAddChatMessage("Нажмите {00FF00}F5 {ffffff}как подойдёте к столу", -1)
                    if isKeyJustPressed(VK_F5) and otig then
                            sampSendChat("/do Медицинская карта лежит на столе.")
                            wait(3000)
                            sampSendChat("/me взял медицинскую карту со стола")
                            wait(3000)
                            sampSendChat("/do На столе лежит ручка.")
                            wait(3000)
                            sampSendChat("/me взял ручку со стола")
                            wait(3000)
                            sampSendChat("/me поставил галочку на против строки 'Здоров'")
                            wait(3000)
                            sampSendChat("/me поставил подпись в граффе 'Подпись врача'")
                            wait(3000)
                            sampSendChat("/me положив ручку на стол, взял со стола печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me поставив печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me передал медицинскую карту пациенту")
                            wait(3000)
                            sampSendChat("/medcard "..id1)
                            local otig = false
                            sampAddChatMessage("Мед.карта выдана игроку {6666FF}"..name1.."{ffffff}[{00FF00}"..id1.."{FFFFFF}]", 0x66FF33) end
                end
                end
                end
потому что ты ставил нажатие одной клавиши - в нажатие другой

А где же бесконечный цикл? Без него и горячие клавиши не будут работать, и скрипт не запустится. :)
я вкурсе, я ему дал это как пример, и там он уже должен пихнуть это в свой код, то что он просил - прекрасно работает
 
Последнее редактирование модератором:

штейн

Известный
Проверенный
1,003
688
Lua:
function scm(param)
    local colors = {
        -1442814209, -1436129537, -1426807712, -1426102682, -1429419008, -1432813568, -1426063361, -1426076570, -1442827418, -1442840448,
        -1439485133, -1442788352, -1432813364, -1426076621, -1442775041, -1439458919, -1436142848, -1429418855, -1432787354, -1442827418,
        -1439485184, -1442788199, -1439458970
    }
    local id = tonumber(param)
    if id and colors[id] then
        local color = colors[id]
        local select_col = false
        for i = 0, sampGetMaxPlayerId(false) do
            math.randomseed(os.time())
            local i = math.random(0, sampGetMaxPlayerId(false))
            if sampIsPlayerConnected(i) and sampGetPlayerColor(i) == color then
                sampSendChat('/masked '..i)
                break
            end
            if id == tonumber('8') then
                sampAddChatMessage("[ {800000}HitMan {ffffff}]: Маскировка невозможна.", -1)
                break
            end
        end
        if not color then sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ни одного из членов данной органицзации нет в игре.', -1) end
    else
        sampAddChatMessage('[ {800000}HitMan {ffffff}]: Скины фракций - [ {800000}/scm {ffffff}].', -1)
    sampAddChatMessage('[ {800000}1 {ffffff}] - LSPD; [ {800000}2 {ffffff}] - FBI; [ {800000}3 {ffffff}] - NGSA; [ {800000}4 {ffffff}] - МинЗдрав ..', -1)
    sampAddChatMessage('.. [ {800000}5 {ffffff}] - Cosa Nostra; [ {800000}6 {ffffff}] - Yakuza; [ {800000}7 {ffffff}] - Правительство ..', -1)
    sampAddChatMessage('.. [ {800000}8 {ffffff}] - None; [ {800000}9 {ffffff}] - CNN; [ {800000}10 {ffffff}] - Triada  ..', -1)
    sampAddChatMessage('.. [ {800000}11 {ffffff}] - SFPD; [ {800000}12 {ffffff}] - Russia; [ {800000}13 {ffffff}] - Grove ..', -1)
    sampAddChatMessage('.. [ {800000}14 {ffffff}] - Ballas; [ {800000}15 {ffffff}] - Vagos; [ {800000}16 {ffffff}] - Aztecas ..', -1)
    sampAddChatMessage('.. [ {800000}17 {ffffff}] - Rifa; [ {800000}18 {ffffff}] - Arabian; [ {800000}19 {ffffff}] - Street Racers ..', -1)
    sampAddChatMessage('.. [ {800000}20 {ffffff}] - Bikers; [ {800000}21 {ffffff}] - LVPD ..', -1)
    sampAddChatMessage('.. [ {800000}22 {ffffff}]- Призывник; [ {800000}23 {ffffff}] - ВВС; [ {800000}24 {ffffff}] - ВМФ.', -1)
    end
end

короче не догоняю как сделать рандом среди тех игроков у кого цвет будет равен одному из тех что есть в таблице, то есть у меня есть цвет LSPD - -1442814209, мне нужно чтобы рандомило тех игроков у кого цвет LSPD, если цвет FBI то рандомило среди всех у кого цвет фбр и тп
и ещё из-за if id == tonumber('8') then у меня всё сбилось и то, что по идее должно было быть 9 стало 10 и тп
 

ШPEK

Известный
1,474
525
почему не работает?
Lua:
if but == 1 and list == 6 then
             sampSendChat("Здравствуйте, сейчас я проведу медицинский осмотр.")
             wait(3000)
             sampSendChat("Хорошо, будьте добры встать к стене.")
             wait(100)
              sampAddChatMessage("Как человек встанет к стене, нажмите {00FF00}F5", -1)
              local otig = true
    end
                 if isKeyJustPressed(VK_F5) and otig then
                    sampSendChat("/do На столе лежат тонкие перчатки.")
                    wait(3000)
                    sampSendChat("/me взял тонкие перчатки со стола")
                    wait(3000)
                    sampSendChat("/me надел перчатки на руки")
                    wait(3000)
                    sampSendChat("/do Перчатки на руках.")
                    wait(3000)
                    sampSendChat("/me приступил к медицинскому осмотру")
                    wait(3000)
                    sampSendChat("/me провел голову на наличие вшей")
                    wait(3000)
                    sampSendChat("/me прощупал живот и половой орган человека")
                    wait(100)
                    sampAddChatMessage("Нажмите {00FF00}F5 {ffffff}как подойдёте к столу", -1)
                    end
                    if isKeyJustPressed(VK_F5) and otig then
                            sampSendChat("/do Медицинская карта лежит на столе.")
                            wait(3000)
                            sampSendChat("/me взял медицинскую карту со стола")
                            wait(3000)
                            sampSendChat("/do На столе лежит ручка.")
                            wait(3000)
                            sampSendChat("/me взял ручку со стола")
                            wait(3000)
                            sampSendChat("/me поставил галочку на против строки 'Здоров'")
                            wait(3000)
                            sampSendChat("/me поставил подпись в граффе 'Подпись врача'")
                            wait(3000)
                            sampSendChat("/me положив ручку на стол, взял со стола печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me поставив печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me передал медицинскую карту пациенту")
                            wait(3000)
                            sampSendChat("/medcard "..id1)
                            local otig = false
                            sampAddChatMessage("Мед.карта выдана игроку {6666FF}"..name1.."{ffffff}[{00FF00}"..id1.."{FFFFFF}]", 0x66FF33)
                            end
                            end
                end
 

rraggerr

проверенный какой-то
1,626
848
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
почему не работает?
Lua:
if but == 1 and list == 6 then
             sampSendChat("Здравствуйте, сейчас я проведу медицинский осмотр.")
             wait(3000)
             sampSendChat("Хорошо, будьте добры встать к стене.")
             wait(100)
              sampAddChatMessage("Как человек встанет к стене, нажмите {00FF00}F5", -1)
              local otig = true
    end
                 if isKeyJustPressed(VK_F5) and otig then
                    sampSendChat("/do На столе лежат тонкие перчатки.")
                    wait(3000)
                    sampSendChat("/me взял тонкие перчатки со стола")
                    wait(3000)
                    sampSendChat("/me надел перчатки на руки")
                    wait(3000)
                    sampSendChat("/do Перчатки на руках.")
                    wait(3000)
                    sampSendChat("/me приступил к медицинскому осмотру")
                    wait(3000)
                    sampSendChat("/me провел голову на наличие вшей")
                    wait(3000)
                    sampSendChat("/me прощупал живот и половой орган человека")
                    wait(100)
                    sampAddChatMessage("Нажмите {00FF00}F5 {ffffff}как подойдёте к столу", -1)
                    end
                    if isKeyJustPressed(VK_F5) and otig then
                            sampSendChat("/do Медицинская карта лежит на столе.")
                            wait(3000)
                            sampSendChat("/me взял медицинскую карту со стола")
                            wait(3000)
                            sampSendChat("/do На столе лежит ручка.")
                            wait(3000)
                            sampSendChat("/me взял ручку со стола")
                            wait(3000)
                            sampSendChat("/me поставил галочку на против строки 'Здоров'")
                            wait(3000)
                            sampSendChat("/me поставил подпись в граффе 'Подпись врача'")
                            wait(3000)
                            sampSendChat("/me положив ручку на стол, взял со стола печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me поставив печать 'Hospital Las-Venturas'")
                            wait(3000)
                            sampSendChat("/me передал медицинскую карту пациенту")
                            wait(3000)
                            sampSendChat("/medcard "..id1)
                            local otig = false
                            sampAddChatMessage("Мед.карта выдана игроку {6666FF}"..name1.."{ffffff}[{00FF00}"..id1.."{FFFFFF}]", 0x66FF33)
                            end
                            end
                end
потому что ты обьявил otig локально, и закрыл функцию, поэтому условия ее не прнимают
 
Последнее редактирование:

trefa

3d print
Всефорумный модератор
2,107
1,263
Lua:
function scm(param)
    local colors = {
        -1442814209, -1436129537, -1426807712, -1426102682, -1429419008, -1432813568, -1426063361, -1426076570, -1442827418, -1442840448,
        -1439485133, -1442788352, -1432813364, -1426076621, -1442775041, -1439458919, -1436142848, -1429418855, -1432787354, -1442827418,
        -1439485184, -1442788199, -1439458970
    }
    local id = tonumber(param)
    if id and colors[id] then
        local color = colors[id]
        local select_col = false
        for i = 0, sampGetMaxPlayerId(false) do
            math.randomseed(os.time())
            local i = math.random(0, sampGetMaxPlayerId(false))
            if sampIsPlayerConnected(i) and sampGetPlayerColor(i) == color then
                sampSendChat('/masked '..i)
                break
            end
            if id == tonumber('8') then
                sampAddChatMessage("[ {800000}HitMan {ffffff}]: Маскировка невозможна.", -1)
                break
            end
        end
        if not color then sampAddChatMessage('[ {800000}HitMan {ffffff}]: Ни одного из членов данной органицзации нет в игре.', -1) end
    else
        sampAddChatMessage('[ {800000}HitMan {ffffff}]: Скины фракций - [ {800000}/scm {ffffff}].', -1)
    sampAddChatMessage('[ {800000}1 {ffffff}] - LSPD; [ {800000}2 {ffffff}] - FBI; [ {800000}3 {ffffff}] - NGSA; [ {800000}4 {ffffff}] - МинЗдрав ..', -1)
    sampAddChatMessage('.. [ {800000}5 {ffffff}] - Cosa Nostra; [ {800000}6 {ffffff}] - Yakuza; [ {800000}7 {ffffff}] - Правительство ..', -1)
    sampAddChatMessage('.. [ {800000}8 {ffffff}] - None; [ {800000}9 {ffffff}] - CNN; [ {800000}10 {ffffff}] - Triada  ..', -1)
    sampAddChatMessage('.. [ {800000}11 {ffffff}] - SFPD; [ {800000}12 {ffffff}] - Russia; [ {800000}13 {ffffff}] - Grove ..', -1)
    sampAddChatMessage('.. [ {800000}14 {ffffff}] - Ballas; [ {800000}15 {ffffff}] - Vagos; [ {800000}16 {ffffff}] - Aztecas ..', -1)
    sampAddChatMessage('.. [ {800000}17 {ffffff}] - Rifa; [ {800000}18 {ffffff}] - Arabian; [ {800000}19 {ffffff}] - Street Racers ..', -1)
    sampAddChatMessage('.. [ {800000}20 {ffffff}] - Bikers; [ {800000}21 {ffffff}] - LVPD ..', -1)
    sampAddChatMessage('.. [ {800000}22 {ffffff}]- Призывник; [ {800000}23 {ffffff}] - ВВС; [ {800000}24 {ffffff}] - ВМФ.', -1)
    end
end

короче не догоняю как сделать рандом среди тех игроков у кого цвет будет равен одному из тех что есть в таблице, то есть у меня есть цвет LSPD - -1442814209, мне нужно чтобы рандомило тех игроков у кого цвет LSPD, если цвет FBI то рандомило среди всех у кого цвет фбр и тп
и ещё из-за if id == tonumber('8') then у меня всё сбилось и то, что по идее должно было быть 9 стало 10 и тп
Чекай игроков через for на подходящий цвет и заноси иды в таблицу. И значения из таблицы рандомь.(Потому что в таблице 8я переменая есть, замени её на nil и всё норм должно)
 

штейн

Известный
Проверенный
1,003
688
Lua:
function hc()
    sampSendChat("/hmenu")
    local did = sampGetCurrentDialogId()
    if did == 586 then
        wait(5)
        sampSendDialogResponse(586, 1, 0, -1)
        sampCloseCurrentDialogWithButton(1)
    end
end

ne understand почему он не закрывает диалог
 

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Lua:
function hc()
    sampSendChat("/hmenu")
    local did = sampGetCurrentDialogId()
    if did == 586 then
        wait(5)
        sampSendDialogResponse(586, 1, 0, -1)
        sampCloseCurrentDialogWithButton(1)
    end
end

ne understand почему он не закрывает диалог
1-ый вариант
Lua:
samp = require 'samp.events'

function hc()
    open_hc = true
    sampSendChat('/hmenu')
end

function samp.onShowDialog(id, style, title, b1, b2, text)
    if id == 586 and open_hc then
        sampSendDialogResponse(id, 1, 0)
        return false
    end
end
2-ой вариант
Lua:
function hc()
    enableDialog(false)
    sampSendChat('/hmenu')
    while not sampIsDialogActive() do wait(0) end
    sampSendDialogResponse(586, 1, 0)
    enableDialog(false)
end
 

штейн

Известный
Проверенный
1,003
688
Lua:
function hfp(param)
    local id, id2 = string.match(param, '(%d+) (%d+)')
    if id ~= nil and id2 ~= nil then
        if id == '1' then
            sampSendChat("%d %d", id, id2)
        end

почему че бы я не вводил он выводит совершенно разные числа
 

штейн

Известный
Проверенный
1,003
688
Lua:
function goupdatt(param)
    id = string.match(param, '%s*(.+)')
    if id ~= nil then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
        nick = sampGetPlayerNickname(myid)
        nick2 = sampGetPlayerNickname(id)
        local nick = nick:gsub('_', ' ')
        local nick2 = nick2:gsub('_', ' ')
        if nick == 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' then
            sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я выдал разрешение "..nick2.." [ "..id.." ] на обновление скрипта.", -1)
            sampSendChat("/w "..id.." Я, "..nick..", позволяю тебе - "..nick2..", обновиться - [ goUPDATEATT ].")
        else
            if not nick == 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' then
                sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я не имею права на использование данной команды.", -1)
            end
        end
    else
        sampAddChatMessage("[ {800000}HitMan {ffffff}]: Выдать разрешение на обновление - [ {800000}/goupdatt {ffffff}].", -1)
    end
end

почему даже если мой ник не один из тех что есть в списке, скрипт всё равно позволяет мне использовать команду (ники скрыл в целях анонимности хах)
 
1,417
1,032
Lua:
function goupdatt(param)
    id = string.match(param, '%s*(.+)')
    if id ~= nil then
        local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
        nick = sampGetPlayerNickname(myid)
        nick2 = sampGetPlayerNickname(id)
        local nick = nick:gsub('_', ' ')
        local nick2 = nick2:gsub('_', ' ')
        if nick == 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' then
            sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я выдал разрешение "..nick2.." [ "..id.." ] на обновление скрипта.", -1)
            sampSendChat("/w "..id.." Я, "..nick..", позволяю тебе - "..nick2..", обновиться - [ goUPDATEATT ].")
        else
            if not nick == 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' or 'Nick Name' then
                sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я не имею права на использование данной команды.", -1)
            end
        end
    else
        sampAddChatMessage("[ {800000}HitMan {ffffff}]: Выдать разрешение на обновление - [ {800000}/goupdatt {ffffff}].", -1)
    end
end

почему даже если мой ник не один из тех что есть в списке, скрипт всё равно позволяет мне использовать команду (ники скрыл в целях анонимности хах)
Lua:
nicknames =
{
    ['Nick Name'] = true,
    ['Name Nick'] = true
}

function goupdatt(param)
    if param:find('(%d+)') then
        id = param:match('(%d+)')
        if sampIsPlayerConnected(id) then
            local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            local nick = sampGetPlayerNickname(myid):gsub('_', ' ')
            local nick2 = sampGetPlayerNickname(id):gsub('_', ' ')
            if nicknames[nick] then
                sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я выдал разрешение "..nick2.." [ "..id.." ] на обновление скрипта.", -1)
                sampSendChat("/w "..id.." Я, "..nick..", позволяю тебе - "..nick2..", обновиться - [ goUPDATEATT ].")
            else sampAddChatMessage("[ {800000}HitMan {ffffff}]: Я не имею права на использование данной команды.", -1)
            end
        end
    else
        sampAddChatMessage("[ {800000}HitMan {ffffff}]: Выдать разрешение на обновление - [ {800000}/goupdatt {ffffff}].", -1)
    end
end
 
  • Нравится
Реакции: штейн