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

moreveal

Известный
988
723
Иногда, после длительного нахождения в AFK и выхода из него, любая попытка сделать MYSQL-запрос приводит к продолжительному фризу и крашу скрипта (видимо по истечению времени ожидания). Как фиксить?)
 

pl46x

Известный
79
15

Вложения

  • Screenshot_2.png
    Screenshot_2.png
    1,014 байт · Просмотры: 50
Последнее редактирование:

W1ll04eison

Известный
330
19
Подскажите.

Ссылка на шпору: >>Тук<<

1) Как сделать добовление / удаление слотов по кнопке, а не так что бы было статично, там статичное число шпор 50 штук



2) Как сделать поиск по шпоре, вот пример: >>Тук<<
 

coinscio

Новичок
5
0
что со скриптом не так?
[10:48:19.824363] (system) Session started.
[10:48:19.825361] (debug) Module handle: 62BA0000

MoonLoader v.026.5-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team
https://www.blast.hk/moonloader/

[10:48:19.825361] (info) Working directory: C:\NEWINDOWS\GTA SAMP\moonloader
[10:48:19.825361] (debug) FP Control: 0009001F
[10:48:19.825361] (debug) Game: GTA SA 1.0.0.0 US
[10:48:19.825361] (system) Installing pre-game hooks...
[10:48:19.826358] (system) Hooks installed.
[10:48:20.583533] (debug) Initializing opcode handler table
[10:48:20.583533] (debug) package.path = C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?\init.lua;C:\NEWINDOWS\GTA SAMP\moonloader\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\?\init.lua;.\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.luac;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?\init.luac;C:\NEWINDOWS\GTA SAMP\moonloader\?.luac;C:\NEWINDOWS\GTA SAMP\moonloader\?\init.luac;.\?.luac
[10:48:20.583533] (debug) package.cpath = C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.dll;
[10:48:20.585528] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\AutoReboot.lua'...
[10:48:20.585528] (debug) New script: 0ED517E4
[10:48:20.586525] (system) ML-AutoReboot: Loaded successfully.
[10:48:20.586525] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\check-moonloader-updates.lua'...
[10:48:20.586525] (debug) New script: 0ED5103C
[10:48:20.588520] (system) Check MoonLoader Updates: Loaded successfully.
[10:48:20.588520] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua'...
[10:48:20.588520] (debug) New script: 0ED50BA4
[10:48:20.592511] (system) extraMessages: Loaded successfully.
[10:48:20.592511] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\reload_all.lua'...
[10:48:20.592511] (debug) New script: 0ED511C4
[10:48:20.593507] (system) ML-ReloadAll: Loaded successfully.
[10:48:20.593507] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\SF Integration.lua'...
[10:48:20.593507] (debug) New script: 0ED5165C
[10:48:20.595502] (system) SF Integration: Loaded successfully.
[10:48:31.560655] (system) Installing post-load hooks...
[10:48:31.561681] (system) Hooks installed.
[10:49:00.687364] (error) extraMessages: C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:86: attempt to concatenate local 'one' (a nil value)
stack traceback:
C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:86: in function 'divide'
C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:23: in function 'callback'
C:\NEWINDOWS\GTA SAMP\moonloader\lib\samp\events\core.lua:79: in function <C:\NEWINDOWS\GTA SAMP\moonloader\lib\samp\events\core.lua:53>
[10:49:00.688361] (error) extraMessages: Script died due to an error. (0ED50BA4)
 

Next..

Известный
342
136
что со скриптом не так?
[10:48:19.824363] (system) Session started.
[10:48:19.825361] (debug) Module handle: 62BA0000

MoonLoader v.026.5-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team

[10:48:19.825361] (info) Working directory: C:\NEWINDOWS\GTA SAMP\moonloader
[10:48:19.825361] (debug) FP Control: 0009001F
[10:48:19.825361] (debug) Game: GTA SA 1.0.0.0 US
[10:48:19.825361] (system) Installing pre-game hooks...
[10:48:19.826358] (system) Hooks installed.
[10:48:20.583533] (debug) Initializing opcode handler table
[10:48:20.583533] (debug) package.path = C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?\init.lua;C:\NEWINDOWS\GTA SAMP\moonloader\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\?\init.lua;.\?.lua;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.luac;C:\NEWINDOWS\GTA SAMP\moonloader\lib\?\init.luac;C:\NEWINDOWS\GTA SAMP\moonloader\?.luac;C:\NEWINDOWS\GTA SAMP\moonloader\?\init.luac;.\?.luac
[10:48:20.583533] (debug) package.cpath = C:\NEWINDOWS\GTA SAMP\moonloader\lib\?.dll;
[10:48:20.585528] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\AutoReboot.lua'...
[10:48:20.585528] (debug) New script: 0ED517E4
[10:48:20.586525] (system) ML-AutoReboot: Loaded successfully.
[10:48:20.586525] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\check-moonloader-updates.lua'...
[10:48:20.586525] (debug) New script: 0ED5103C
[10:48:20.588520] (system) Check MoonLoader Updates: Loaded successfully.
[10:48:20.588520] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua'...
[10:48:20.588520] (debug) New script: 0ED50BA4
[10:48:20.592511] (system) extraMessages: Loaded successfully.
[10:48:20.592511] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\reload_all.lua'...
[10:48:20.592511] (debug) New script: 0ED511C4
[10:48:20.593507] (system) ML-ReloadAll: Loaded successfully.
[10:48:20.593507] (system) Loading script 'C:\NEWINDOWS\GTA SAMP\moonloader\SF Integration.lua'...
[10:48:20.593507] (debug) New script: 0ED5165C
[10:48:20.595502] (system) SF Integration: Loaded successfully.
[10:48:31.560655] (system) Installing post-load hooks...
[10:48:31.561681] (system) Hooks installed.
[10:49:00.687364] (error) extraMessages: C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:86: attempt to concatenate local 'one' (a nil value)
stack traceback:
C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:86: in function 'divide'
C:\NEWINDOWS\GTA SAMP\moonloader\ExtraMessages.lua:23: in function 'callback'
C:\NEWINDOWS\GTA SAMP\moonloader\lib\samp\events\core.lua:79: in function <C:\NEWINDOWS\GTA SAMP\moonloader\lib\samp\events\core.lua:53>
[10:49:00.688361] (error) extraMessages: Script died due to an error. (0ED50BA4)
'one' (a nil value)
 

Andrinall

Известный
702
527
Иногда, после длительного нахождения в AFK и выхода из него, любая попытка сделать MYSQL-запрос приводит к продолжительному фризу и крашу скрипта (видимо по истечению времени ожидания). Как фиксить?)
Подозреваю, что это из-за разрыва соединения и невозможности отправки того самого запроса.

Я хоть в этом деле не очень шарю, но, считаю будет правильным чекать подключение или перед отправкой запроса или каждые 1-2 секунды, например.
mysql_ping(conn) — Проверяет соединение с сервером.
 
Последнее редактирование:
  • Нравится
Реакции: moreveal

W1ll04eison

Известный
330
19
Подскажите почему при открытии имгуи окна курсор пропадает (он мерцает, если двигать мышкой)

Хотя курсор нигде не имеет значение false
 
Последнее редактирование:

moreveal

Известный
988
723
Подозреваю, что это из-за разрыва соединения и невозможности отправки того самого запроса.

Я хоть в этом деле не очень шарю, но, считаю будет правильным чекать подключение или перед отправкой запроса или каждые 1-2 секунды, например.
mysql_ping(conn) — Проверяет соединение с сервером.
Не могу нигде найти библиотеку mysql. При использовании той, что у меня есть, получаю ошибку :(
attempt to call method 'ping' (a nil value)
 

Vespan

хинкали это большие пельмени
Проверенный
2,139
1,898
Можно ли управлять imgui.Selectable(или похожее) стрелочками
 

cort

Известный
244
98
как получить текст "Оплачен на дней" с диалога ? Если оплачен менее чем на 5 дней то отправлять сообщение в вк.

Lua:
token_vk = ''
groupid_vk = ''



if mode == 1 then
            mymsglol = "Сервер: "..server.." "..sampGetCurrentServerName().."\n\nНайден дом который оплачен менее чем на 5 дней. Координаты:  [ "..gorod.." ]
            requests.get("https://api.vk.com/method/messages.send?v=5.103&access_token="..token_vk.."&user_id="..user_id.."&message="..urlencode(u8:encode(mymsglol, 'CP1251')).."&group_id="..groupid_vk.."&random_id="..random(1111111111, 9999999999))
        elseif mode == 2 then
            mymsglol = "Сервер: "..server.." "..sampGetCurrentServerName().."\n\nНайден дом который оплачен менее чем на 5 дней. Координаты: [ "..gorod.." ]\n\nБотоводит:\n"..botovod
            requests.get("https://api.vk.com/method/messages.send?v=5.103&access_token="..token_vk.."&chat_id="..chat_id.."&message="..urlencode(u8:encode(mymsglol, 'CP1251')).."&group_id="..groupid_vk.."&random_id="..random(1111111111, 9999999999))

Screenshot_96.png
 

W H Y ?

Участник
103
8
Как сделать чтобы когда убиваешь чела играла песня по ссылке?