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

Izvinisb

Известный
Проверенный
963
600
Как сделать текст в переменной в нижнем регистре? Функция string:lower(text) посылает меня и не делает все в нижний
 
  • Нравится
Реакции: Joni Scripts

MrBidloKoder

Известный
423
249
emul_rpc принимает id rpc и BitStream
можешь дать пример пожалуйста.. я ебусь с этим уже 3 дня.... Сам тоже попутно попробую решить это, но не помешает помощь.

upd: и как я передаду битстрим...
 
Последнее редактирование:

Dashok.

Участник
228
9
  • Ищу скрипт для Форм Администраторов.
    Пример: Администратор написал в Админ чат: /jail 12 300 MP| D.Salvatore
  • После чего скрипт принимает форму, и пишет этот текст в чат.
 

MrBidloKoder

Известный
423
249
Как в радиусе 100 метров выдать хп, к примеру?
парсить хендл, сравнивать дистанцию между твоим педом и получать потом ид. Примеров дохуя. Могу тебе помочь, вот:
1603577650966.png

найди у себя эту кнопку и спрашивай у него эти вопросы. Он знает ответ.
 
  • Нравится
Реакции: moreveal и enyag

kreyN

Известный
78
13
Каким-то великолепным образом не работает диалог респонс.
1603578410151.png

Код текстом:
if dlpointlv.v or tonumber(dostavka) >= tonumber(ignorepricefloat.v) then
                            if (tovar == prod_slad1 or tovar == prod_slad2 or tovar == prod_slad3 or tovar == prod_slad4) and (tonumber(kolvo) >= min_zakaz.v) then
                                if has_value(dlendpointslv, kuda) then
                                    local num = tonumber(num)-1
                                    if debugmode.v then
                                        print('FOUND LV OR DOSTAVKA IS BIGGER, num: '..num)
                                        if tonumber(num) then
                                            print('NUM IS NUMBER: '..num)
                                        end
                                    end
                                    sampSendDialogResponse(1241, 1, num, -1)
                                    kolvoEx1 = tonumber(kolvo)
                                    kudaEx1 = kuda
                                    priceEx1 = tonumber(price)
                                    tovarEx1 = tovar
                                    dostavkaEx1 = tonumber(dostavka)
                                    tempstring1 = kudaEx1.." - "..tovarEx1.." - "..kolvoEx1.." - "..priceEx1
                                    FUCKING_TEMPORARY_VARIABLE = false
                                    FUCKING_TEMPORARY_VARIABLE2 = false
                                    if debugmode.v then
                                        if tempstring1 ~= nil then
                                            print(tempstring1)
                                        else
                                            print('Tempstring1 is null.')
                                        end
                                    end
                                end
                            end
                        end
Консоль: (проверка РАБОТАЕТ)
1603578465904.png


————————————————————

Оно в конфиг записывает, но в imgui окне не сохраняется
Так ты задавай переменной имгуи значение из ини конфига
Код:
local inputvar = imgui.ImBuffer(Nazvanie_Ini_File.Nazvanie_Cekcii.INPUT_VARIABLE_IN_INI)
 

Вложения

  • 1603578400448.png
    1603578400448.png
    111.1 KB · Просмотры: 72
Последнее редактирование:

Alessandro Arabella

Новичок
4
2
У меня есть пакет:

PACKET_CONNECTION_COOKIE = 26

Как прочитать его данные?
Ну или как перехватить пакет и прочитать его содержимое
 

корбус

Известный
433
108
как повернуть камеру на координаты
например:
какаитакаманда(0, 0 , 0 )
и если я буду стоять на любых координатах и нажму на W оно буит идти в сторону координат 0, 0, 0



P. s дада я умный(соре за орфографию и за тупость в этом сообщении)
 
Последнее редактирование:

ufdhbi

Известный
Проверенный
1,460
866
как повернуть камеру на координаты
например:
какаитакаманда(0, 0 , 0 )
и если я буду стоять на любых координатах и нажму на W оно буит идти в сторону координат 0, 0, 0



P. s дада я умный(соре за орфографию и за тупость в этом сообщении)
Lua:
function setCam(px, py)
    local xpos, ypos, _ = getActiveCameraCoordinates()
    local v = {x = px - xpos, y = py - ypos}
    local d = math.sqrt(v.x ^ 5 + v.y ^ 5)
    local ay, ax = math.atan2(d, v.y), math.atan2(v.y, -v.x)
    setCameraPositionUnfixed(-ay/5, -ax)
end
 

_ex$tanOr_

Участник
125
19
Ну, сделать, конечно же, можно, но ты смотри, чтобы такого текста на сервере больше не было, ибо скрипт будет реагировать на каждое такое слово. Дабы избежать такого, то можно, как вариант, использовать активацию этой функции.
Lua:
local sampev = require 'lib.samp.events'

function sampev.onDisplayGameText(style, time, text)
    if text:find("SUCCES!") then
        lua_thread.create(function() wait(10)
            sampSendChat("/po")
        end)
    end
end
Это вариант без активации, ибо не знаю, хочешь ли ты этого.

Шо у тебя там в скрипте творится?)
Кинь эту строку (62) сюда, постараюсь помочь. Он ругается на синтаксическую ошибку, если верить логу.
Активацию сам сделал. Спасибо
 

Sedoj

Участник
56
1
Lua:
 function chh()
for k,v in ipairs(getAllChars()) do
    if doesCharExist(v) then
        local result, id = sampGetPlayerIdByCharHandle(v)
        local rpX, rpY, rpZ = getCharCoordinates(v)
        local pX, pY, pZ = getCharCoordinates(PLAYER_PED)
        if getDistanceBetweenCoords3d(pX, pY, pZ, rpX, rpY, rpZ) <= 100.0 then
            sampAddChatMessage(id,-1)
        end
    end
end
 end

Как все из полученных ID вписывать в команду?
/heal id, /heal id и так далее
 

moreveal

Известный
Проверенный
928
624
Как все из полученных ID вписывать в команду?
/heal id, /heal id и так далее
Lua:
 function chh()
for k,v in ipairs(getAllChars()) do
    if doesCharExist(v) then
        local result, id = sampGetPlayerIdByCharHandle(v)
        local rpX, rpY, rpZ = getCharCoordinates(v)
        local pX, pY, pZ = getCharCoordinates(PLAYER_PED)
        if getDistanceBetweenCoords3d(pX, pY, pZ, rpX, rpY, rpZ) <= 100.0 then
            sampSendChat('/heal '..id)
        end
    end
end
end