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

ГОХА | GoxaShow

В АРМИИ С 12.12,ЗАКАЗЫ НЕ ДЕЛАЮ,ТУПЫЕ ВОПРОСЫ-НАХУ
Проверенный
1,870
1,872
ребзи, скажите еще, хочу сделать бота для свернутого режима, как мне сделать,чтобы он нажимал n y f и другие буквы без меня, сделал по set чтото там(ща с мобилки, не могу кинуть код) и он жмет ее,.да, но это и жмется по всем прогам активным
 

BIG BOG

Известный
654
141
Lua:
function ev.onSetInterior(interior)

      sampSendChat("/gps", -1)

end
помогите вы уже, почему когда сервер шлёт смену виртуального мира на 0, это игнорируется?
 

James Hawk

Известный
919
217
ребзи, скажите еще, хочу сделать бота для свернутого режима, как мне сделать,чтобы он нажимал n y f и другие буквы без меня, сделал по set чтото там(ща с мобилки, не могу кинуть код) и он жмет ее,.да, но это и жмется по всем прогам активным
Пробуй, если в твоём случае такой вариант доступен
Lua:
setGameKeyState() -- два параметра, гугли
 

Bananious

Известный
238
17
Как мне сделать авто нажатие клавиши когда пишет Y. Сервер Жизнь в деревне. Те что для тринити не работают.
36957
 

ARI

Участник
63
11
Как угнать пинкод ( тот, который мышкой вводится )
Уже спрашивал, но ответа ( по крайне мере рабочего ) не было.
Спасибо.

Обновлено.

Нашел функцию в ивентах (onTextDrawSetString), но код зашифрован (xxx)
Знает кто, как расшифровать?
И вообще, это ведь инкамин функция. Какого черта сервер вообще отправляет эти данные на клиент?
Почему бы ему просто не хранить их на сервере?
 
Последнее редактирование:

ШPEK

Известный
1,476
525
Как угнать пинкод ( тот, который мышкой вводится )
Уже спрашивал, но ответа ( по крайне мере рабочего ) не было.
Спасибо.

Обновлено.

Нашел функцию в ивентах (onTextDrawSetString), но код зашифрован (xxx)
Знает кто, как расшифровать?
И вообще, это ведь инкамин функция. Какого черта сервер вообще отправляет эти данные на клиент?
Почему бы ему просто не хранить их на сервере?
Получать нажатия клавиш т.е нажатия на текстдравы
 

castlefamily

Участник
104
3
imgui.Begin(u8'--s', nil, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoTitleBar)
imgui.Columns(2)
bIfs, PlayerPed = sampGetCharHandleBySampPlayerId(idspectarplayer)

if bIfs then
weapon = getCurrentCharWeapon(PlayerPed)
weap = getweaponname(weapon)
skin = getCharModel(PlayerPed)
isInVeh = isCharInAnyCar(PlayerPed)
if(isInVeh) then
veh = storeCarCharIsInNoSave(PlayerPed)
idcar = getCarModel(veh)
carname = getNameOfVehicleModel(idcar)
healthcar = getCarHealth(veh)
else
idcar = ""
carname = u8"Не в машине"
healthcar = 0
end
else
weapon = "nil"
weap = "nil"
skin = 0
idcar = ""
carname = u8"Не в машине"
healthcar = 0
end
imgui.Text(u8"Имя:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", sampGetPlayerNickname(idspectarplayer)))
imgui.Separator()
imgui.NextColumn()

imgui.Text(u8"ID:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", idspectarplayer))
imgui.Separator()
imgui.NextColumn()
imgui.Text(u8"LEVEL:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", sampGetPlayerScore(idspectarplayer)))
imgui.Separator()
imgui.NextColumn()
imgui.Text(u8"HP:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", sampGetPlayerHealth(idspectarplayer)))
imgui.Separator()
imgui.NextColumn()
imgui.Text(u8"ARMOR:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", sampGetPlayerArmor(idspectarplayer)))
imgui.Separator()
imgui.NextColumn()
imgui.Text(u8"SKIN:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", skin))
imgui.Separator()
imgui.NextColumn()

imgui.Text(u8"WEAPON:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", weap))
imgui.Separator()
imgui.NextColumn()
imgui.Text(u8"PING:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", sampGetPlayerPing(idspectarplayer)))
imgui.Separator()
imgui.NextColumn()
imgui.Text("")
imgui.NextColumn()
imgui.Text("")
imgui.Separator()
imgui.NextColumn()
if(idcar == "") then
imgui.Text(u8"CAR:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", carname))
imgui.Separator()
imgui.NextColumn()
else
imgui.Text(u8"CAR:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s ID:%s", carname, idcar))
imgui.Separator()
imgui.NextColumn()
end
imgui.Text(u8"HP CAR:")
imgui.NextColumn()
imgui.Text(string.format(u8"%s", healthcar))
imgui.NextColumn()

imgui.End()

Почему может крашить в некоторых случаях?
 

ГОХА | GoxaShow

В АРМИИ С 12.12,ЗАКАЗЫ НЕ ДЕЛАЮ,ТУПЫЕ ВОПРОСЫ-НАХУ
Проверенный
1,870
1,872
скажите, как можно у arizona SaintRose спиздить их лого и изменить его на Phoenix(соотвественно чтобы он показывался на фениксе) заранее спасибок
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
Возможно ли крашнуть себя таким образом чтобы в чате ничего не вывелось, кроме северного Server closed the connection ?
Что-то типа "тихого кика" что-ли
 

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,891
1,254
а есть где-то инфа как его использовать? мб я что-то не то делаю
Если хочешь тихо кикнуть себя на команду то просто регистрируешь её в main и все.
sampRegisterChatCommand("kickme", function() sampSendEnterVehicle(-1, false) end)