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

Bogdan8888

Известный
9
1
подскажите как делаюца боты, ну или хотябы как заставить персонажа/Тс в которой он сидит ехать по кординатам.
 

KH9I3b_MuJIOCJIABCKu

Участник
52
20
Вот столкнулся с такой интересной проблемкой, как создать резервную переменную (хз как её по другому назвать)
например у меня есть две переменные targetid и targetidnickname как мне создать lasttaretid и lasttargetidnickname тоисть если targetid targetidnickname будут иметь новые значения то lasttaretid и lasttargetidnickname будут иметь старые значения переменных targetid и targetidnickname?
 

KH9I3b_MuJIOCJIABCKu

Участник
52
20
как узнать на сервере ли игрок? ник известен

Lua:
function sampGetPlayerIdByNickname(nick)

    local _, myid = sampGetPlayerIdByCharHandle(playerPed)

    if tostring(nick) == sampGetPlayerNickname(myid) then return myid end

    for i = 0, 1000 do if sampIsPlayerConnected(i) and sampGetPlayerNickname(i) == tostring(nick) then return i else print('Net igroka') end end

end
 
Последнее редактирование:
  • Нравится
Реакции: sdfaw

Benya

Активный
145
44
Хай ! Как заменить слово в серверной строке чата ? С помощью хука onServerMessage. Спс
 

trefa

Известный
Всефорумный модератор
2,097
1,233
Хай ! Как заменить слово в серверной строке чата ? С помощью хука onServerMessage. Спс
В самом мануале есть пример. Разве так трудно это все прочитать?

Вот столкнулся с такой интересной проблемкой, как создать резервную переменную (хз как её по другому назвать)
например у меня есть две переменные targetid и targetidnickname как мне создать lasttaretid и lasttargetidnickname тоисть если targetid targetidnickname будут иметь новые значения то lasttaretid и lasttargetidnickname будут иметь старые значения переменных targetid и targetidnickname?
Lua:
_G["test"] = 123456789
Примерно так.

Ошибок нет, но попадания выстрела не меняется
Lua:
local hook = require 'lib.samp.events'
function main()
    while not isSampAvailable() do wait(228) end
end

function hook.onBulletSync(playerId, data)
    bool, handle = sampGetCharHandleBySampPlayerId(playerId)
    if bool then
        X, Y, Z = getCharCoordinates(handle)
        data.target.x = X
        data.target.y = Y
        data.target.x = Z
        print('playerId: ['..playerId..'] X: ['..data.target.x..'] Y: ['..data.target.y..'] Z: ['..data.target.z..']')
    end
end
Ну, пакет изменил. Теперь отправь (return)
 
Последнее редактирование:

Krisvis

Известный
65
27
Как искать ник другого игрока из чата ?
 

mld

Участник
99
11
Пацаны,как сделать такую же фигню?
Чтобы сохранялось в самом скрипте и,к примеру,сотрудник написал большой текст эфира выставил задержку 5000,нажал на "отправить в чат" и весь текст с задержкой 5000 отправлялся в чат.Если не поняли вот:
Текст в инпуте:
Здравствуйте
ага
да,у нас приз огромный
-----------------------------
Чтобы между "здравствуйте,ага" была задержка 5к.
Помогите плезззз
 

Вложения

  • 1562976150073.png
    1562976150073.png
    5.3 KB · Просмотры: 131

KH9I3b_MuJIOCJIABCKu

Участник
52
20
Пацаны,как сделать такую же фигню?
Чтобы сохранялось в самом скрипте и,к примеру,сотрудник написал большой текст эфира выставил задержку 5000,нажал на "отправить в чат" и весь текст с задержкой 5000 отправлялся в чат.Если не поняли вот:
Текст в инпуте:
Здравствуйте
ага
да,у нас приз огромный
-----------------------------
Чтобы между "здравствуйте,ага" была задержка 5к.
Помогите плезззз
 

Вложения

  • binder.lua
    625 байт · Просмотры: 8
  • binder.txt
    22 байт · Просмотры: 8

DolgorukovGTA

Известный
Проверенный
652
345
Слушайте, как можно привязать отыгровку к ImGui?)
Человек не много не шарюший, можете гнобить.
Если правильно тебя понял, то ты хочешь, чтобы в чат отправлялась отыгровка (/me, /do etc...) через окно имгуи. Сделай кнопку, назови её как-нибудь, по нажатию этой кнопки будет отправляться отыгровка в чат при помощи метода sampSendChat().
 

Fyger

Потрачен
963
418
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как активировать имгуи командой?
 

Krisvis

Известный
65
27
Как активировать имгуи командой?
Тут есть пример