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

SAMP.ASI

Известный
223
53
local lectures = inicfg.load(nil, "lectures")
У тебя именно так путь к файлу выглядит? Просто lectures? Если это инишник, то надо это прописывать
local lectures = inicfg.load(nil, "lectures.ini")
В примерах просто без .ini lua - inicfg | BlastHack — DEV_WIKI(https://blast.hk/wiki/lua:inicfg)

local lectures = inicfg.load(nil, "lectures")
У тебя именно так путь к файлу выглядит? Просто lectures? Если это инишник, то надо это прописывать
local lectures = inicfg.load(nil, "lectures.ini")
поменял на .ини все равно nil
 
Последнее редактирование модератором:

T1cKz

Известный
596
246
Есть ли на имгуи такая функция типа как полоска хп?
Пример покажу на скрине:
wfaKeIs.png
 

tlwsn

Известный
537
85
Lua:
function getNamekeybyID(id)
  local name = {
    ['8'] = 'Backspase',
    ['9'] = 'Tab',
    ['13'] = 'Enter',
    ['16'] = 'Shift',
    ['17'] = 'Ctrl',
    ['18'] = 'Alt',
    ['19'] = 'Pause',
    ['20'] = 'Caps Lock',
    ['27'] = 'Esc',
    ['32'] = 'Space',
    ['33'] = 'Page UP',
    ['34'] = 'Page Down',
    ['35'] = 'End',
    ['36'] = 'Home',
    ['45'] = 'Insert',
    ['46'] = 'Delete',
    ['48'] = 0,
    ['49'] = 1,
    ['50'] = 2,
    ['51'] = 3,
    ['52'] = 4,
    ['53'] = 5,
    ['54'] = 6,
    ['55'] = 7,
    ['56'] = 8,
    ['57'] = 9,
    ['65'] = 'A',
    ['66'] = 'B',
    ['67'] = 'C',
    ['68'] = 'D',
    ['69'] = 'E',
    ['70'] = 'F',
    ['71'] = 'G',
    ['72'] = 'H',
    ['73'] = 'I',
    ['74'] = 'J',
    ['75'] = 'K',
    ['76'] = 'L',
    ['77'] = 'M',
    ['78'] = 'N',
    ['79'] = 'O',
    ['80'] = 'P',
    ['81'] = 'Q',
    ['82'] = 'R',
    ['83'] = 'S',
    ['84'] = 'T',
    ['85'] = 'U',
    ['86'] = 'V',
    ['87'] = 'W',
    ['88'] = 'X',
    ['89'] = 'Y',
    ['90'] = 'Z',
    ['96'] = 'Num 0',
    ['97'] = 'Num 1',
    ['98'] = 'Num 2',
    ['99'] = 'Num 3',
    ['100'] = 'Num 4',
    ['101'] = 'Num 5',
    ['102'] = 'Num 6',
    ['103'] = 'Num 7',
    ['104'] = 'Num 8',
    ['105'] = 'Num 9',
    ['106'] = 'Num *',
    ['107'] = 'Num +',
    ['109'] = 'Num -',
    ['110'] = 'Num .',
    ['111'] = 'Num /',
    ['112'] = 'F1',
    ['113'] = 'F2',
    ['114'] = 'F3',
    ['115'] = 'F4',
    ['116'] = 'F5',
    ['117'] = 'F6',
    ['118'] = 'F7',
    ['119'] = 'F8',
    ['120'] = 'F9',
    ['121'] = 'F10',
    ['122'] = 'F11',
    ['123'] = 'F12',
    ['144'] = 'Num Lock',
    ['145'] = 'Scroll Lock'
  }
  return name[id]
end
у меня есть вот такая функия, мне нужн что бы она выводила значение из конфига. Пробовал так,
Lua:
 kid = tonumber(cfg.keys.tazer)
local kname = getNamekeybyID(kid)
print(kname)
но выводит nil. Значение в конфиге = 88. В чом трабл?
 

TheWille

Участник
43
4
Lua:
function getNamekeybyID(id)
  local name = {
    ['8'] = 'Backspase',
    ['9'] = 'Tab',
    ['13'] = 'Enter',
    ['16'] = 'Shift',
    ['17'] = 'Ctrl',
    ['18'] = 'Alt',
    ['19'] = 'Pause',
    ['20'] = 'Caps Lock',
    ['27'] = 'Esc',
    ['32'] = 'Space',
    ['33'] = 'Page UP',
    ['34'] = 'Page Down',
    ['35'] = 'End',
    ['36'] = 'Home',
    ['45'] = 'Insert',
    ['46'] = 'Delete',
    ['48'] = 0,
    ['49'] = 1,
    ['50'] = 2,
    ['51'] = 3,
    ['52'] = 4,
    ['53'] = 5,
    ['54'] = 6,
    ['55'] = 7,
    ['56'] = 8,
    ['57'] = 9,
    ['65'] = 'A',
    ['66'] = 'B',
    ['67'] = 'C',
    ['68'] = 'D',
    ['69'] = 'E',
    ['70'] = 'F',
    ['71'] = 'G',
    ['72'] = 'H',
    ['73'] = 'I',
    ['74'] = 'J',
    ['75'] = 'K',
    ['76'] = 'L',
    ['77'] = 'M',
    ['78'] = 'N',
    ['79'] = 'O',
    ['80'] = 'P',
    ['81'] = 'Q',
    ['82'] = 'R',
    ['83'] = 'S',
    ['84'] = 'T',
    ['85'] = 'U',
    ['86'] = 'V',
    ['87'] = 'W',
    ['88'] = 'X',
    ['89'] = 'Y',
    ['90'] = 'Z',
    ['96'] = 'Num 0',
    ['97'] = 'Num 1',
    ['98'] = 'Num 2',
    ['99'] = 'Num 3',
    ['100'] = 'Num 4',
    ['101'] = 'Num 5',
    ['102'] = 'Num 6',
    ['103'] = 'Num 7',
    ['104'] = 'Num 8',
    ['105'] = 'Num 9',
    ['106'] = 'Num *',
    ['107'] = 'Num +',
    ['109'] = 'Num -',
    ['110'] = 'Num .',
    ['111'] = 'Num /',
    ['112'] = 'F1',
    ['113'] = 'F2',
    ['114'] = 'F3',
    ['115'] = 'F4',
    ['116'] = 'F5',
    ['117'] = 'F6',
    ['118'] = 'F7',
    ['119'] = 'F8',
    ['120'] = 'F9',
    ['121'] = 'F10',
    ['122'] = 'F11',
    ['123'] = 'F12',
    ['144'] = 'Num Lock',
    ['145'] = 'Scroll Lock'
  }
  return name[id]
end
у меня есть вот такая функия, мне нужн что бы она выводила значение из конфига. Пробовал так,
Lua:
 kid = tonumber(cfg.keys.tazer)
local kname = getNamekeybyID(kid)
print(kname)
но выводит nil. Значение в конфиге = 88. В чом трабл?
Вот так функцию используй если там цифры, кавычки не нужны
Lua:
function getNamekeybyID(id)
  local name = {
      [8] = 'Backspase',
    [9] = 'Tab',
    [13] = 'Enter',
    [16] = 'Shift',
    [17] = 'Ctrl',
    [18] = 'Alt',
    [19] = 'Pause',
    [20] = 'Caps Lock',
    [27] = 'Esc',
    [32] = 'Space',
    [33] = 'Page UP',
    [34] = 'Page Down',
    [35] = 'End',
    [36] = 'Home',
    [45] = 'Insert',
    [46] = 'Delete',
    [48] = 0,
    [49] = 1,
    [50] = 2,
    [51] = 3,
    [52] = 4,
    [53] = 5,
    [54] = 6,
    [55] = 7,
    [56] = 8,
    [57] = 9,
    [65] = 'A',
    [66] = 'B',
    [67] = 'C',
    [68] = 'D',
    [69] = 'E',
    [70] = 'F',
    [71] = 'G',
    [72] = 'H',
    [73] = 'I',
    [74] = 'J',
    [75] = 'K',
    [76] = 'L',
    [77] = 'M',
    [78] = 'N',
    [79] = 'O',
    [80] = 'P',
    [81] = 'Q',
    [82] = 'R',
    [83] = 'S',
    [84] = 'T',
    [85] = 'U',
    [86] = 'V',
    [87] = 'W',
    [88] = 'X',
    [89] = 'Y',
    [90] = 'Z',
    [96] = 'Num 0',
    [97] = 'Num 1',
    [98] = 'Num 2',
    [99] = 'Num 3',
    [100] = 'Num 4',
    [101] = 'Num 5',
    [102] = 'Num 6',
    [103] = 'Num 7',
    [104] = 'Num 8',
    [105] = 'Num 9',
    [106] = 'Num *',
    [107] = 'Num +',
    [109] = 'Num -',
    [110] = 'Num .',
    [111] = 'Num /',
    [112] = 'F1',
    [113] = 'F2',
    [114] = 'F3',
    [115] = 'F4',
    [116] = 'F5',
    [117] = 'F6',
    [118] = 'F7',
    [119] = 'F8',
    [120] = 'F9',
    [121] = 'F10',
    [122] = 'F11',
    [123] = 'F12',
    [144] = 'Num Lock',
    [145] = 'Scroll Lock'
  }
  return name[id]
end
 
  • Нравится
Реакции: tlwsn

Shell :3

Активный
159
32
Помогите пожалуйста, когда подключаю это, local sampev = require 'lib.samp.events'. То не работает ничего... Ну типо, даже имгуи не открывается.