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

Dmitriy Makarov

25.05.2021
Проверенный
2,515
1,142
как я могу отключить нанесение урона игроку, когда у меня есть активный идентификатор игрока через команду «/damaged ID», и игрок с этим идентификатором не получит от меня никакого урона, например, от снайпера. у меня уже есть
Lua:
local pID = -1

--

-- main
sampRegisterChatCommand("damaged", function(id)
    if tonumber(id) ~= nil then
        pID = id
    end
end)

--

require("lib.samp.events").onSendGiveDamage = function(playerId, damage, weapon, bodypart)
    if pID ~= -1 and playerId == pID --[[ and weapon == 34 ]] then
        return false
    end
end
 

holyoneverr

Потрачен
22
2
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
подскажите как реализовать setGameKeyState(21,256) , чтобы alt нажимался, всё перепробывал, не воркает. Нужно именно это, setVirtualKeyDown не подойдёт
 
  • Bug
Реакции: deleted-user-511790

baligins

Участник
38
12
Привет всем, подскажите пожалуйста, как можно такое реализовать?
Работает это так: активируется курсор нажатием кнопки (по умолчанию нажатием ПКМ), затем с помощью мыши выбирается желаемая Машина (точка назначения подсвечивается) и после клика левой кнопкой мыши (настраивается), lua скрипт пишет в чат название машины + ид игрока за рулем.
JmVy2OeIe18.jpg
 
Последнее редактирование:

Noger

Новичок
15
2
Как мне найти пакеты нитро на Аризоне рп? Я хочу сделать таймер который считывает секунды нитро и показывает в худе.
 

kyrtion

Известный
1,198
438
Привет всем, подскажите пожалуйста, как можно такое реализовать?
Работает это так: активируется курсор нажатием кнопки (по умолчанию нажатием ПКМ), затем с помощью мыши выбирается желаемая Машина (точка назначения подсвечивается) и после клика левой кнопкой мыши (настраивается), lua скрипт пишет в чат название машины + ид игрока за рулем.
Посмотреть вложение 228103
брать пример кликварп от фипа, а затем отредактировать.
там где телепорты нужно убрать, а затем добавить для вывода номер машинки и модель.
если нажал лкм - создать один поток, а в потоке 2 команды с задержкой 1 секунд (или несколько команд, а в конце максимум команд необязательно ставить задержку)
 

Dmitriy Makarov

25.05.2021
Проверенный
2,515
1,142
Как мне найти пакеты нитро на Аризоне рп? Я хочу сделать таймер который считывает секунды нитро и показывает в худе.
Может я где-то проглядел, но, вроде как, нет Event/RPC, отвечающего за это.
В Pawn нитро транспорту добавляется функцией AddVehicleComponent. В SAMP Events есть только onRemoveVehicleComponent (RPC 57).
 

T.Barrett

Новичок
27
0
Приветствую. Подскажите как получить указатель на компонент транспортного средства, в котором сидит игрок, по его наименованию (компонента)?
 

kyrtion

Известный
1,198
438
Приветствую. Подскажите как получить указатель на компонент транспортного средства, в котором сидит игрок, по его наименованию (компонента)?
Имеешь ввиду как получить модель машинки, в котором игрок сидит?
 

Andrinall

Известный
701
520

Andrinall

Известный
701
520
Имею ввиду как получить указатель на компонент этой машинки по его названию. Например wheel_lf_dummy

g7HRwmi.png
 

DarkDTM

Участник
56
4
Как изменять время что бы оно не менялось через секунду? например ч пробовал стандартную функцию для смены времени, но оно меняется на прежнею через секунду
 

DiteD331

Участник
99
13
Скачал на днях скрипт. Одной из функций этого скрипта является то, что над головой человека, на которого направлено действие этого скрипта, появляется нужный мне текст. Текст появляется в белом цвете и в таком виде, в каком бы он появлялся при отправлении сообщения от этого человека. Могу ли я изменить цвет этого текста через код Lua(Сам в нём не шарю)? Если требуется, могу скинуть код или сам скрипт.
 

вайега52

Налуашил состояние
Модератор
2,901
2,915
Скачал на днях скрипт. Одной из функций этого скрипта является то, что над головой человека, на которого направлено действие этого скрипта, появляется нужный мне текст. Текст появляется в белом цвете. Могу ли я изменить цвет этого текста через код Lua(Сам в нём не шарю)? Если требуется, могу скинуть код или сам скрипт.
скидывай)