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

serhiyrubin

Известный
396
106
Безымянный.png

Помогите, надоело это уже
Ставил кодировку, и все равно нифига
Windows 1251
 

RTD

Потужно
Модератор
399
470
Посмотреть вложение 11455
Помогите, надоело это уже
Ставил кодировку, и все равно нифига
Windows 1251
Preferences->Setting->User
Туда этот код
Код:
{
    "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
    "default_encoding": "Cyrillic (Windows 1251)",
    "fallback_encoding": "Cyrillic (Windows 1251)",
    "font_size": 10,
    "theme": "Adaptive.sublime-theme",
    "word_wrap": true
}
 

serhiyrubin

Известный
396
106
Как рендерить текста сколько мне надо, а не сколько помещается?
upd
Решено, в цикле просто читаю текст построчно и рендерю каждую строку

Код:
renderFontDrawText(font, k, X, Y, 0xFFFFFFFF)
Y = Y + renderGetFontDrawHeight(font)
 
Последнее редактирование:

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Диалоги dxut возможно сделать на .lua?
Да
Lua:
DxutDialog dialog = dxutCreateDialog(zstring name)  -- 0B80
bool result, int event, int id = dxutPopEvent(DxutDialog dialog)  -- 0B81
dxutAddButton(DxutDialog dialog, int id, zstring text, int posX, int posY, int sizeX, int sizeY)  -- 0B82
dxutAddCheckbox(DxutDialog dialog, int id, zstring text, int posX, int posY, int sizeX, int sizeY)  -- 0B83
dxutSetDialogPos(DxutDialog dialog, int posX, int posY, int sizeX, int sizeY)  -- 0B84
int posX, int posY, int sizeX, int sizeY = dxutGetDialogPosAndSize(DxutDialog dialog)  -- 0B85
dxutSetDialogVisible(DxutDialog dialog, bool visible)  -- 0B86
bool result = dxutIsDialogVisible(DxutDialog dialog)  -- 0B87
dxutAddEditbox(DxutDialog dialog, int id, zstring text, int posX, int posY, int sizeX, int sizeY)  -- 0B88
zstring text = dxutGetControlText(DxutDialog dialog, int id)  -- 0B89
dxutSetControlVisible(DxutDialog dialog, int id, bool visible)  -- 0B90
dxutAddStatic(DxutDialog dialog, int id, zstring text, int posX, int posY, int sizeX, int sizeY)  -- 0B91
bool result = dxutIsCheckboxChecked(DxutDialog dialog, int id)  -- 0B92
dxutSetDialogBackgroundColor(DxutDialog dialog, int color)  -- 0B93
dxutSetControlText(DxutDialog dialog, int id, zstring text)  -- 0B94
bool result = dxutControlIsVisible(DxutDialog dialog, int id)  -- 0B95
dxutAddSlider(DxutDialog dialog, int id, int posX, int posY, int sizeX, int sizeY, int max)  -- 0B96
int value = dxutGetSliderValue(DxutDialog dialog, int id)  -- 0B97
dxutSetSliderValue(DxutDialog dialog, int id, int value)  -- 0B98
dxutAddListbox(DxutDialog dialog, int id, int posX, int posY, int sizeX, int sizeY)  -- 0B99
dxutListboxInsertItem(DxutDialog dialog, int id, zstring element, int data, int after)  -- 0B9A
int element, int count = dxutGetListboxSelectedItemAndCount(DxutDialog dialog, int id)  -- 0B9B
dxutListboxDeleteItem(DxutDialog dialog, int id, int element)  -- 0B9C
zstring text, int data = dxutGetListboxItemTextAndData(DxutDialog dialog, int id, int element)  -- 0B9D
dxutCheckboxSetChecked(DxutDialog dialog, int id, bool checked)  -- 0B9E
dxutEnableDialogCaption(DxutDialog dialog, int enable)  -- 0B9F
bool result = dxutIsDialogCaptionEnabled(DxutDialog dialog)  -- 0BA0
dxutSetDialogMinimized(DxutDialog dialog, bool minimized)  -- 0BA1
bool result = dxutIsDialogMinimized(DxutDialog dialog)  -- 0BA2
dxutDeleteControl(DxutDialog dialog, int id)  -- 0BA3
dxutDeleteDialog(DxutDialog dialog)  -- 0BA4
dxutSetFocusOnControl(DxutDialog dialog, int id)  -- 0BA5
dxutSetControlSize(DxutDialog dialog, int id, int sizeX, int sizeY)  -- 0BA6
int sizeX, int sizeY = dxutGetControlSize(DxutDialog dialog, int id)  -- 0BA7
dxutSetControlPos(DxutDialog dialog, int id, int posX, int posY)  -- 0BA8
int posX, int posY = dxutGetControlPos(DxutDialog dialog, int id)  -- 0BA9
dxutSetCheckboxColor(DxutDialog dialog, int id, int color)  -- 0BAA
bool result = dxutIsDialogExists(DxutDialog dialog)  -- 0BAB
 
  • Нравится
Реакции: ScripterForYou

serhiyrubin

Известный
396
106
Как иероглефы перевести в русские после смены кодировки?
ПЕРЕПИСЫВАТЬ ЗАНОВО ЛУЧШЕ ВООБЩЕ ЗАБРОСИТЬ(((
там много