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

NHacker1271

Известный
156
16
Как сделать автоматический ввод пароля в диалоговое окно?
33683
 

trefa

Известный
Всефорумный модератор
2,097
1,233

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,637
2,486
Lua:
function vr(arg)
lua_thread.create(function()
     state = not state
        if state then
         sampAddChatMessage("{01A0E9}Реклама в вип чате включена!",-1)
         sampSendChat("/b "..arg)
         wait(1000)
         else
         sampAddChatMessage("{01A0E9}Реклама в вип чате выключена!",-1)
         return true
        end
    end)
end
хули не правильного?
Если ты про ретурн -- то нельзя возвращать данные для функции в потоке, ведь поток это не коллбек функция.
Можно только запускать какую нибудь функцию и передавать ей эти же данные.
 

Fyger

Потрачен
963
418
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
@Krisvis
Lua:
script_name('ARZ HotKeys')
script_version('3.3')
script_author('Fyger')

act = false
local vk = require 'vkeys'
local hook = require 'lib.samp.events'

function main()
    while not isSampAvailable() do wait(100) end
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Скрипт был успешно загружен!", -1)
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Автор: {01A0E9} Fyger!", -1)
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Что бы узнать функции пропиши {01A0E9} /cmd", -1)
       sampRegisterChatCommand("/vr", vr)
       sampRegisterChatCommand("cmd", cmd)
       sampRegisterChatCommand('fh', function(num)
        if num ~= nil then
         sampSendChat('/findihouse '..num)
        end
    end)   
        while true do wait(0)
        result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            if result then
               name = sampGetPlayerNickname(playerid) 
            end
            if wasKeyPressed(vk.VK_1) and isKeyDown(vk.VK_MENU) and not sampIsChatInputActive() then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/showskill '..id)
                end
            end
            if wasKeyPressed(vk.VK_2) and isKeyDown(vk.VK_MENU) and not sampIsChatInputActive() then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/trade '..id)
                end
            end
            if testCheat("eda") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendClickTextdraw(673)
            end 
            if testCheat("heal") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendClickTextdraw(671)
            end 
            if testCheat("P") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                 sampSendChat("/phone")
            end
            if testCheat("arm") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/do Используя магию создал себе бронежилет")
                sampSendChat("/armour")
            end
            if testCheat("mask") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/mask")
            end
            if testCheat("smk") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/smoke")
            end     
            if testCheat("ez") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/me взглянул на часы с гравировкой •"..name.." в деле•")
                sampSendChat("/time")
                wait(1200)
                sampSendChat ("/do На часах  "..os.date('%H:%M:%S'))
            end
            if testCheat("Q") and not isCharInAnyCar(PLAYER_PED)  and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat(" ")
            end
            if testCheat("jl") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/jlock")
            end
            if testCheat("l") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/lock")
            end
            if testCheat("can") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/fillcar")
            end   
            if testCheat("recar") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/repcar")
            end
            if wasKeyPressed(vk.VK_NUMPAD1) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 1")
            end
            if wasKeyPressed(vk.VK_NUMPAD2) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 2")
            end
            if wasKeyPressed(vk.VK_NUMPAD3) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 3")
            end
            if testCheat("K") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/key")   
             end
        end
end
function cmd()
  sampShowDialog(8248, '{01A0E9} Мои функции:', '{01A0E9}ALT+1 {ffffff}- показ скилов ближайшему игроку\n{01A0E9}ALT+2 {ffffff}- трейд ближайшему игроку\n{01A0E9}EDA {ffffff}(как чит-код) - берет еду\n{01A0E9}ARM {ffffff}(как чит-код) - надевает бронежилет\n{01A0E9}MASK {ffffff}(как чит-код) - надевает маску\n{01A0E9}SMK {ffffff}(как чит-код) - курение сигареты\n{01A0E9}EZ {ffffff}(как чит-код) - смотрит на часы\n{01A0E9}Q {ffffff}(как чит-код) - сбивает анимацию пустым текстом\n{01A0E9}L {ffffff}(как чит-код) - открывает/закрывает авто\n{01A0E9}JL {ffffff}(как чит-код) - открывает/закрывает аренду\n{01A0E9}CAN {ffffff}(как чит-код) - использует канистру\n{01A0E9}RECAR {ffffff}(как чит-код) - использует набор для починки\n{01A0E9}ALT+1+2+3 {ffffff}(нумпад) - использует наркотики (1-3 шт)\n{01A0E9}HEAL {ffffff}(как чит-код) - добавляет хп\n{01A0E9}K {ffffff}(как чит-код) - ключи от машины\n\t {01A0E9}/FH {ffffff} - сокращение команды {01A0E9}/findihouse\n\t{01A0E9}//VR {ffffff}- реклама в вр {c71818}(ВАЖНО) ОТКРЫТЬ СКРИПТ И ВПИСАТЬ ТУДА РЕКЛАМУ ПЕРЕД ИСПОЛЬЗОВАНИЕМ\n\t\n\t{ffffff} Так же в скрипте присуствует авто-скип ответа администратора', Close, Close, 0)
 lua_thread.create(gg)
end
function gg()
 while sampIsDialogActive() do
    wait(0)
    local result, button, list, input = sampHasDialogRespond(8248)
    end
end
function vr(arg)
lua_thread.create(function()
     state = not state
        if state then
         sampAddChatMessage("{01A0E9}Реклама в вип чате включена!",-1)
         sampSendChat("/b "..arg)
         wait(1000)
         else
         sampAddChatMessage("{01A0E9}Реклама в вип чате выключена!",-1)
         return true
        end
    end)
end
function hook.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
if dialogId == 1000 then
setVirtualKeyDown(13, false)
end
if dialogId == 1333 then
setVirtualKeyDown(13, false)
end
if dialogId == 1332 then
setVirtualKeyDown(13, false)
 end
 end
function hook.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") then
            sampSendChat('/lock')
            wait(1200)
            sampSendChat("/s "..name.." easy car")
            wait(3000)           
            sampSendChat('/time')
        end
        if text:find("(.-)Поздравляю! Теперь этот дом ваш") then
            sampSendChat("/s "..name.." easy house")
            wait(1000)
            sampSendChat('/time')
        end
        if text:find('Игрок (.-) приобрел Titan VIP') then
            sampSendChat('/vr Добро пожаловать в наш гей клуб! Располагайтесь по удобнее!')
        end
    end)
end
 

trefa

Известный
Всефорумный модератор
2,097
1,233

Krisvis

Известный
65
27
@Krisvis
Lua:
script_name('ARZ HotKeys')
script_version('3.3')
script_author('Fyger')

act = false
local vk = require 'vkeys'
local hook = require 'lib.samp.events'

function main()
    while not isSampAvailable() do wait(100) end
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Скрипт был успешно загружен!", -1)
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Автор: {01A0E9} Fyger!", -1)
       sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Что бы узнать функции пропиши {01A0E9} /cmd", -1)
       sampRegisterChatCommand("/vr", vr)
       sampRegisterChatCommand("cmd", cmd)
       sampRegisterChatCommand('fh', function(num)
        if num ~= nil then
         sampSendChat('/findihouse '..num)
        end
    end)  
        while true do wait(0)
        result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
            if result then
               name = sampGetPlayerNickname(playerid)
            end
            if wasKeyPressed(vk.VK_1) and isKeyDown(vk.VK_MENU) and not sampIsChatInputActive() then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/showskill '..id)
                end
            end
            if wasKeyPressed(vk.VK_2) and isKeyDown(vk.VK_MENU) and not sampIsChatInputActive() then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/trade '..id)
                end
            end
            if testCheat("eda") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendClickTextdraw(673)
            end
            if testCheat("heal") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendClickTextdraw(671)
            end
            if testCheat("P") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                 sampSendChat("/phone")
            end
            if testCheat("arm") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/do Используя магию создал себе бронежилет")
                sampSendChat("/armour")
            end
            if testCheat("mask") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/mask")
            end
            if testCheat("smk") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/smoke")
            end    
            if testCheat("ez") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/me взглянул на часы с гравировкой •"..name.." в деле•")
                sampSendChat("/time")
                wait(1200)
                sampSendChat ("/do На часах  "..os.date('%H:%M:%S'))
            end
            if testCheat("Q") and not isCharInAnyCar(PLAYER_PED)  and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat(" ")
            end
            if testCheat("jl") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/jlock")
            end
            if testCheat("l") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/lock")
            end
            if testCheat("can") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/fillcar")
            end  
            if testCheat("recar") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/repcar")
            end
            if wasKeyPressed(vk.VK_NUMPAD1) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 1")
            end
            if wasKeyPressed(vk.VK_NUMPAD2) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 2")
            end
            if wasKeyPressed(vk.VK_NUMPAD3) and isKeyDown(vk.VK_MENU) and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/usedrugs 3")
            end
            if testCheat("K") and not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
                sampSendChat("/key")  
             end
        end
end
function cmd()
  sampShowDialog(8248, '{01A0E9} Мои функции:', '{01A0E9}ALT+1 {ffffff}- показ скилов ближайшему игроку\n{01A0E9}ALT+2 {ffffff}- трейд ближайшему игроку\n{01A0E9}EDA {ffffff}(как чит-код) - берет еду\n{01A0E9}ARM {ffffff}(как чит-код) - надевает бронежилет\n{01A0E9}MASK {ffffff}(как чит-код) - надевает маску\n{01A0E9}SMK {ffffff}(как чит-код) - курение сигареты\n{01A0E9}EZ {ffffff}(как чит-код) - смотрит на часы\n{01A0E9}Q {ffffff}(как чит-код) - сбивает анимацию пустым текстом\n{01A0E9}L {ffffff}(как чит-код) - открывает/закрывает авто\n{01A0E9}JL {ffffff}(как чит-код) - открывает/закрывает аренду\n{01A0E9}CAN {ffffff}(как чит-код) - использует канистру\n{01A0E9}RECAR {ffffff}(как чит-код) - использует набор для починки\n{01A0E9}ALT+1+2+3 {ffffff}(нумпад) - использует наркотики (1-3 шт)\n{01A0E9}HEAL {ffffff}(как чит-код) - добавляет хп\n{01A0E9}K {ffffff}(как чит-код) - ключи от машины\n\t {01A0E9}/FH {ffffff} - сокращение команды {01A0E9}/findihouse\n\t{01A0E9}//VR {ffffff}- реклама в вр {c71818}(ВАЖНО) ОТКРЫТЬ СКРИПТ И ВПИСАТЬ ТУДА РЕКЛАМУ ПЕРЕД ИСПОЛЬЗОВАНИЕМ\n\t\n\t{ffffff} Так же в скрипте присуствует авто-скип ответа администратора', Close, Close, 0)
lua_thread.create(gg)
end
function gg()
while sampIsDialogActive() do
    wait(0)
    local result, button, list, input = sampHasDialogRespond(8248)
    end
end
function vr(arg)
lua_thread.create(function()
     state = not state
        if state then
         sampAddChatMessage("{01A0E9}Реклама в вип чате включена!",-1)
         sampSendChat("/b "..arg)
         wait(1000)
         else
         sampAddChatMessage("{01A0E9}Реклама в вип чате выключена!",-1)
         return true
        end
    end)
end
function hook.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
if dialogId == 1000 then
setVirtualKeyDown(13, false)
end
if dialogId == 1333 then
setVirtualKeyDown(13, false)
end
if dialogId == 1332 then
setVirtualKeyDown(13, false)
end
end
function hook.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") then
            sampSendChat('/lock')
            wait(1200)
            sampSendChat("/s "..name.." easy car")
            wait(3000)          
            sampSendChat('/time')
        end
        if text:find("(.-)Поздравляю! Теперь этот дом ваш") then
            sampSendChat("/s "..name.." easy house")
            wait(1000)
            sampSendChat('/time')
        end
        if text:find('Игрок (.-) приобрел Titan VIP') then
            sampSendChat('/vr Добро пожаловать в наш гей клуб! Располагайтесь по удобнее!')
        end
    end)
end
ты же не обозначил state как переменную, а просто используешь ее
 

cheremuxa

Известный
430
200
os.date(переменные из списка)
year - год (четыре цифры)
month - месяц (1 – 12)
day - день (1 – 31)
hour - час (0 – 23)
min - минуты (0 – 59)
sec - секунды (0 – 59)
wday - день недели (1 - 7), воскресенью соответствует 1

%a - день недели, сокр. (англ.) (пример, Wed)
%A - день недели, полностью (англ.) (пример, Wednesday)
%b - месяц, сокр. (англ.) (пример, Sep)
%B - месяц, полностью (англ.) (пример, September)
%c - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11)
%d - день месяца (пример, 22) [диапазон, 01-31]
%H - час, в 24-х часовом формате (пример, 23) [диапазон, 00-23]
%I - час, в 12-и часовом формате (пример, 11) [диапазон, 01-12]
%M - минута (пример, 48) [диапазон, 00-59]
%m - месяц (пример, 09) [диапазон, 01-12]
%p - время суток "am", или "pm"
%S - секунда (пример, 10) [диапазон, 00-59]
%w - день недели (пример, 3) [диапазон, 0-6, соответствует Sunday-Saturday]
%x - дата (пример, 09/16/98)
%X - время (пример, 23:48:10)
%Y - год, 4 цифры (пример, 2015)
%y - год, 2 цифры (пример, 15) [00-99]
%% - символ "%"
*t - вернет таблицу
!*t - вернет таблицу (по Гринвичу)
 

trefa

Известный
Всефорумный модератор
2,097
1,233
os.date(переменные из списка)
year - год (четыре цифры)
month - месяц (1 – 12)
day - день (1 – 31)
hour - час (0 – 23)
min - минуты (0 – 59)
sec - секунды (0 – 59)
wday - день недели (1 - 7), воскресенью соответствует 1
Ему нужно не локальное время (как я понял)
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,637
2,486
Lua:
function vr(arg)
lua_thread.create(function()
     state = not state
        if state then
         sampAddChatMessage("{01A0E9}Реклама в вип чате включена!",-1)
         sampSendChat("/b "..arg)
         wait(1000)
         else
         sampAddChatMessage("{01A0E9}Реклама в вип чате выключена!",-1)
         return true
        end
    end)
end
хули не правильного?
Lua:
script_name('ARZ HotKeys')
script_version('3.3')
script_author('Fyger')

local act = false
local vk = require 'vkeys'
local hook = require 'lib.samp.events'
local state = false

function main()
    while not isSampAvailable() do wait(50) end
    sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Скрипт был успешно загружен!", -1)
    sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Автор: {01A0E9} Fyger!", -1)
    sampAddChatMessage("{01A0E9}[ARZ HotKeys] {ffffff} Что бы узнать функции пропиши {01A0E9} /cmd", -1)
    sampRegisterChatCommand("/vr", vr)
    sampRegisterChatCommand("cmd", cmd)
    sampRegisterChatCommand('fh', function(num)
        if num ~= nil then
            sampSendChat('/findihouse '..num)
        end
    end) 
    while true do wait(0)
        result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
        if result then
           name = sampGetPlayerNickname(playerid)
        end
        if not isSampfuncsConsoleActive() and not sampIsDialogActive() and not sampIsChatInputActive() then
            if wasKeyPressed(vk.VK_1) and isKeyDown(vk.VK_MENU) then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/showskill '..id)
                end
            end
            if wasKeyPressed(vk.VK_2) and isKeyDown(vk.VK_MENU) then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/trade '..id)
                end
            end
            if testCheat("eda") then
                sampSendClickTextdraw(673)
            end
            if testCheat("heal") then
                sampSendClickTextdraw(671)
            end
            if testCheat("P") then
                 sampSendChat("/phone")
            end
            if testCheat("arm") then
                sampSendChat("/do Используя магию создал себе бронежилет")
                sampSendChat("/armour")
            end
            if testCheat("mask") then
                sampSendChat("/mask")
            end
            if testCheat("smk") then
                sampSendChat("/smoke")
            end   
            if testCheat("ez") then
                sampSendChat("/me взглянул на часы с гравировкой •"..name.." в деле•")
                sampSendChat("/time")
                wait(1200)
                sampSendChat ("/do На часах  "..os.date('%H:%M:%S'))
            end
            if testCheat("Q") then
                sampSendChat(" ")
            end
            if testCheat("jl") then
                sampSendChat("/jlock")
            end
            if testCheat("l") then
                sampSendChat("/lock")
            end
            if testCheat("can") then
                sampSendChat("/fillcar")
            end 
            if testCheat("recar") then
                sampSendChat("/repcar")
            end
            if wasKeyPressed(vk.VK_NUMPAD1) then
                sampSendChat("/usedrugs 1")
            end
            if wasKeyPressed(vk.VK_NUMPAD2) then
                sampSendChat("/usedrugs 2")
            end
            if wasKeyPressed(vk.VK_NUMPAD3) then
                sampSendChat("/usedrugs 3")
            end
            if testCheat("K") then
                sampSendChat("/key") 
            end
        end
    end
end
function cmd()
    sampShowDialog(8248, '{01A0E9} Мои функции:', '{01A0E9}ALT+1 {ffffff}- показ скилов ближайшему игроку\n{01A0E9}ALT+2 {ffffff}- трейд ближайшему игроку\n{01A0E9}EDA {ffffff}(как чит-код) - берет еду\n{01A0E9}ARM {ffffff}(как чит-код) - надевает бронежилет\n{01A0E9}MASK {ffffff}(как чит-код) - надевает маску\n{01A0E9}SMK {ffffff}(как чит-код) - курение сигареты\n{01A0E9}EZ {ffffff}(как чит-код) - смотрит на часы\n{01A0E9}Q {ffffff}(как чит-код) - сбивает анимацию пустым текстом\n{01A0E9}L {ffffff}(как чит-код) - открывает/закрывает авто\n{01A0E9}JL {ffffff}(как чит-код) - открывает/закрывает аренду\n{01A0E9}CAN {ffffff}(как чит-код) - использует канистру\n{01A0E9}RECAR {ffffff}(как чит-код) - использует набор для починки\n{01A0E9}ALT+1+2+3 {ffffff}(нумпад) - использует наркотики (1-3 шт)\n{01A0E9}HEAL {ffffff}(как чит-код) - добавляет хп\n{01A0E9}K {ffffff}(как чит-код) - ключи от машины\n\t {01A0E9}/FH {ffffff} - сокращение команды {01A0E9}/findihouse\n\t{01A0E9}//VR {ffffff}- реклама в вр {c71818}(ВАЖНО) ОТКРЫТЬ СКРИПТ И ВПИСАТЬ ТУДА РЕКЛАМУ ПЕРЕД ИСПОЛЬЗОВАНИЕМ\n\t\n\t{ffffff} Так же в скрипте присуствует авто-скип ответа администратора', 'Close', 'Close2', 0)
    lua_thread.create(gg)
end
function gg()
    while sampIsDialogActive() do
        wait(0)
        local result, button, list, input = sampHasDialogRespond(8248)
    end
end

function vr(arg)
    state = not state
    sampAddChatMessage("{01A0E9}Реклама в вип чате ".. (state and "включена!" or "выключена!"), -1)
    if state then
        sampSendChat("/b "..arg)
    else
        sampAddChatMessage("{01A0E9}Реклама в вип чате выключена!",-1)
    end
end

function hook.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if dialogId == 1000 then
        setVirtualKeyDown(13, false)
    end
    if dialogId == 1333 then
        setVirtualKeyDown(13, false)
    end
    if dialogId == 1332 then
        setVirtualKeyDown(13, false)
    end
end

function hook.onServerMessage(color, text)
    if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") then
        lua_thread.create(function()
            sampSendChat('/lock')
            wait(1200)
            sampSendChat("/s "..name.." easy car")
            wait(3000)         
            sampSendChat('/time')
        end)
    end
    if text:find("(.-)Поздравляю! Теперь этот дом ваш") then
        lua_thread.create(function()
            sampSendChat("/s "..name.." easy house")
            wait(1000)
            sampSendChat('/time')
        end)
    end
    if text:find('Игрок (.-) приобрел Titan VIP') then
        sampSendChat('/vr Добро пожаловать в наш гей клуб! Располагайтесь по удобнее!')
    end
end
Попробуй, правда не уверен что тебе поможет, да и вообще проблема непонятная.