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

Орк

Известный
497
470
  • Нравится
Реакции: Naito

Naito

Активный
166
36
Как увеличить скоростной режим автомобиля? Например, буйвол достигает 188 км, и я хочу изменить его на 200 км.
 

tomate kudasai/

Участник
94
18
Кароче, почему то кикает запись маршрутов на раксамп лайт. На обычном сампе, все работает.
Код раксампа:
Lua:
function sampev.onSendPlayerSync()
    if play then return false end
end
function sampev.onSendVehicleSync()
    if play then return false end
end
function sampev.onSendTrailerSync()
    if play then return false end
end
local pack = 0
local sleeping = 50

local message = function(text) return print('[Router-Recorder] '..text) end

function playRoute(name)
    local f = io.open('routes\\'..name..'.rr', 'r')
    if not f then
        return message("Маршрут не найден!")
    end
    local r = f:read('a')
    f:close()
    playroute = json.decode(r)
    play = true
    message('Запустил маршрут "'..name..'" ')
    playcurrsetroute()
end
function bitStream.sendTrailerSynchronization(PACKET)
    local bs = bitStream.new()
    bs:writeUInt8(210)
    bs:writeVector3(PACKET)
    bs:writeUInt16(TrID)
    bs:writeFloat(PACKET.q0)
    bs:writeFloat(PACKET.q1)
    bs:writeFloat(PACKET.q2)
    bs:writeFloat(PACKET.q3)
    bs:writeVector3({x = PACKET.sx, y = PACKET.sy, z = PACKET.sz})
    bs:writeVector3({x = PACKET.sx, y = PACKET.sy, z = PACKET.sz})
    bs:writeVector3({x = 0.0, y = 0.0, z = 0.0}) -- вот тут тупанул, записал маршрут без turnSpeed
    bs:writeVector3({x = PACKET.rx, y = PACKET.ry, z = PACKET.rz})
    bs:writeVector3({x = PACKET.dx, y = PACKET.dy, z = PACKET.dz})
    bs:writeVector3({x = PACKET.spx, y = PACKET.spy, z = PACKET.spz})
    bs:writeUInt32(PACKET.unk)
    bs:sendPacket()
end
function bitStream.sendVehicleSynchronization(PACKET)
    local bs = bitStream.new()
    bs:writeUInt8(200)
    bs:writeUInt16(getBotVehicle())
    bs:writeUInt16(PACKET.lr)
    bs:writeUInt16(PACKET.ud)
    bs:writeUInt16(PACKET.keys)
    bs:writeFloat(PACKET.q0)
    bs:writeFloat(PACKET.q1)
    bs:writeFloat(PACKET.q2)
    bs:writeFloat(PACKET.q3)
    bs:writeVector3(PACKET)
    bs:writeVector3({x = PACKET.sx, y = PACKET.sy, z = PACKET.sz})
    bs:writeFloat(1500)
    bs:writeUInt8(getBotHealth() )
    bs:writeUInt8(getBotArmor() )
    bs:writeUInt8(0)
    bs:writeUInt8(0)
    bs:writeUInt8(0)
    bs:writeUInt16(TrID or 0)
    bs:writeFloat(PACKET.lean)
    bs:writeFloat(0)
    bs:sendPacket()
end
function playcurrsetroute()
    newTask(function ()
       while play do
            pack = pack + 1
            if not playroute[pack] or not play then pack = #playroute goto pepe end
            if playroute[pack].veh_ == 1 and TrID ~= 0 then
                if not playroute[pack] or not play then pack = #playroute goto pepe end
                bitStream.sendVehicleSynchronization(playroute[pack].veh)
                sleeping = int(playroute[pack].veh.timer)
                if not sleeping then sleeping = int(playroute[pack].tr.timer) elseif sleeping < 5 then sleeping = int(playroute[pack].tr.timer) end
                print(sleeping)
                bitStream.sendTrailerSynchronization(playroute[pack].tr)
                setBotPosition(playroute[pack].veh.x, playroute[pack].veh.y, playroute[pack].veh.z)
            end
            if playroute[pack].veh_ == 1 and TrID == 0 then
                if not playroute[pack] or not play then pack = #playroute goto pepe end
                bitStream.sendVehicleSynchronization(playroute[pack].veh)
                setBotPosition(playroute[pack].veh.x, playroute[pack].veh.y, playroute[pack].veh.z)
            end
            ::pepe::
            if pack == #playroute then
                play = false;
                message('Закончил маршрут.')
                playroute = {}
            end
            wait(sleeping)
        end
    end)
end
Код на самп:
Lua:
local message = function (text) return sampAddChatMessage('[{8de33c}Route-Recorder{ffffff}] {1a9ded}'..text, -1); end
require('moonloader')
local sampev = require('samp.events')
local json = require('cjson')
local route_name
local recording = false
local route = {}
local trailer_record = false
local lasttime = os.clock() * 1000
local playroute = {}
local play = false
local int = tonumber
local loop_route
local trailer_Id = 0
function main()
    while not isSampAvailable() do wait(0) end
    message('Загружен! (/rr rec [route name] | /rr trailer_record | /rr play [route name] [if loop route 1 or 0])')
    createDirectory(getWorkingDirectory()..'\\RouteRecorder')
    sampRegisterChatCommand('rr', function (arg)
        if arg == 'trailer_record' then
            trailer_record = not trailer_record
            message('Запись маршрутов с трейлером: '..(trailer_record and '{68ff00}Включена' or "{ff0000}Выключена"))
        elseif arg:match('rec %S+') then
            route_name = arg:match('rec (%S+)')
            message('Чтобы начать запись маршрута {ff0000}"'..route_name..'"{1a9ded} нажмите клавишу {ff0000} Q')
        elseif arg:match('play %S+ %S+') then
            local name, loop = arg:match('play (%S+) (%S+)')
            print(name, loop)
            local f = io.open('moonloader\\RouteRecorder\\'..name..'.rr', 'r')
            if not f then
                return message("Маршрут не найден!")
            end
            loop_route = loop == "1"
            local r = f:read('a')
            f:close()
            playroute = json.decode(r)
            play = true
            message('Запустил маршрут {ff0000}"'..name..'"{1a9ded} Нажмите клавишу {ff0000}Q{1a9ded} чтобы остановить его.')
            playRoute()
        elseif arg:match('trid %d+') then
            trailer_Id = arg:match('trid (%d+)')
            message('Айди трейлера: {ff0000}'..trailer_Id)
        end
    end)
    while true do
        wait(0)
        if route_name then
            if wasKeyPressed(VK_Q) and not sampIsCursorActive() then
                recording = not recording
                if recording then
                    message('Начал записывать маршрут {ff0000}"'..route_name..'"')
                    lasttime = os.clock() * 1000
                    recording = true
                else
                    message('Закончил записывать маршрут! Сохроняю...')
                    local f = io.open('moonloader\\RouteRecorder\\'..route_name..'.rr', 'w')
                    f:write(json.encode(route))
                    f:close()
                    route_name = ''
                    play = false;
                    route = {}
                    playroute = {}
                    trailer_record = false
                    recording = false
                end
            end
        end
        if play then
            if wasKeyPressed(VK_Q) and not sampIsCursorActive() then
                play = false;
                message('Остановил маршрут.')
                route = {}
                playroute = {}
                trailer_record = false
                recording = false
            end
        end
    end
end
function sampev.onSendPlayerSync(data)
    if play then return false end
    if recording then
        route[#route+1] = {
            tr_ = 0,
            pl_ = 1,
            veh_ = 0,
            pl = {
                ud = int(data.upDownKeys),
                keys = int(data.keysData),
                x = int(data.position.x),
                y = int(data.position.y),
                z = int(data. position. z),
                q0 = int(data.quaternion[0]),
                q1 = int(data.quaternion[1]),
                q2 = int(data.quaternion[2]),
                q3 = int(data.quaternion[3]),
                sx = int(data.moveSpeed.x),
                sy = int(data.moveSpeed.y),
                sz = int(data.moveSpeed.z),
                aid = int(data.animation.id),
                timer = int(os.clock() * 1000 - lasttime)
            }
        }
        lasttime = os.clock() * 1000
        printStringNow('~g~[Router-Recorder]~b~~h~ Recording player sync... Recorded: '..#route..' packets.', 1000)
    end
end
function sampev.onSendVehicleSync(data)
    if play then return false end
    if recording then
        if trailer_record then
            route[#route+1] = {
                tr_ = 1,
                pl_ = 0,
                veh_ = 1,
                veh = {
                    lr = int(data.leftRightKeys),
                    ud = int(data.upDownKeys),
                    keys = int(data.keysData),
                    q0 = int(data.quaternion[0]),
                    q1 = int(data.quaternion[1]),
                    q2 = int(data.quaternion[2]),
                    q3 = int(data.quaternion[3]),
                    x = int(data.position.x),
                    y = int(data.position.y),
                    z = int(data.position.z),
                    sx = int(data.moveSpeed.x),
                    sy =int( data.moveSpeed.y),
                    sz = int(data.moveSpeed.z),
                    lean = int(data.bikeLean)
                }
            }
        else
            route[#route+1] = {
                tr_ = 0,
                pl_ = 0,
                veh_ = 1,
                veh = {
                    lr = int(data.leftRightKeys),
                    ud = int(data.upDownKeys),
                    keys = int(data.keysData),
                    q0 = int(data.quaternion[0]),
                    q1 = int(data.quaternion[1]),
                    q2 = int(data.quaternion[2]),
                    q3 = int(data.quaternion[3]),
                    x = int(data.position.x),
                    y = int(data.position.y),
                    z = int(data.position.z),
                    sx = int(data.moveSpeed.x),
                    sy =int( data.moveSpeed.y),
                    sz = int(data.moveSpeed.z),
                    lean = int(data.bikeLean),
                    timer = int(os.clock() * 1000 - lasttime)
                }
            }
            printStringNow('~g~[Router-Recorder]~b~~h~ Recording vehicle sync... Recorded: '..#route..' packets.', 1000)
            lasttime = os.clock() * 1000
        end
    end
end
function sampev.onSendTrailerSync(data)
    if play then return false end
    if recording then
        if route[#route] then
            if route[#route].tr_ then
                route[#route].tr = {
                    x = int(data.position.x),
                    y = int(data.position.y),
                    z = int(data.position.z),
                    q0 = int(data.quaternion[0]),
                    q1 = int(data.quaternion[1]),
                    q2 = int(data.quaternion[2]),
                    q3 = int(data.quaternion[3]),
                    sx = int(data.moveSpeed.x),
                    sy = int(data.moveSpeed.y),
                    sz = int(data.moveSpeed.z),
                    rx = int(data.roll.x),
                    ry = int(data.roll.y),
                    rz = int(data.roll.z),
                    dx = int(data.direction.x),
                    dy = int(data.direction.y),
                    dz = int(data.direction.z),
                    spx =int( data.speed.x),
                    spy =int( data.speed.y),
                    spz =int( data.speed.z),
                    unk =int( data.unk),
                    timer =int( os.clock() * 1000 - lasttime)
                }
                printStringNow('~g~[Router-Recorder]~b~~h~ Recording trailer sync... Recorded: '..#route..' packets.', 1000)
                lasttime = os.clock() * 1000
            end
        end
    end
end
function playRoute()
    lua_thread.create(function ()
        local pack = 0
        local sleeping = 50
        while play do
            wait(sleeping)
            pack = pack + 1
            local q = playroute[pack]
           
            if not q or not play then pack = #playroute goto pepe end
            if q.pl_ == 1 then
                if not q or not play then pack = #playroute goto pepe end
                q = q.pl
                local data = samp_create_sync_data('player')
                data.upDownKeys = q.ud
                data.keysData = q.keys
                data.position.x = q.x
                data.position.y = q.y
                data. position. z = q.z
                data.quaternion[0] = q.q0
                data.quaternion[1] = q.q1
                data.quaternion[2] = q.q2
                data.quaternion[3] = q.q3
                data.moveSpeed.x = q.sx
                data.moveSpeed.y = q.sy
                data.moveSpeed.z = q.sz
                data.animation.id = q.aid
                sleeping = q.timer
                data.send()
                setCharCoordinatesNoOffset(PLAYER_PED, q.x, q.y, q.z)
                setCharQuaternion(PLAYER_PED, q.q1, q.q2, q.q3, q.q0)
                printStringNow('~g~[Router-Recorder]~b~~h~ Playing player sync... Played: '..pack..'/'..#playroute..' packets.', 1000)
            end
            if q.veh_ == 1 and trailer_Id ~= 0 then
                if not q or not play then pack = #playroute goto pepe end
                local old, vehsyncsend, trailersyncsend
                old = q
                q = q.veh
                local data = samp_create_sync_data('vehicle')
                data.leftRightKeys = q.lr
                data.upDownKeys = q.ud
                data.keysData = q.keys
                data.quaternion[0] = q.q0
                data.quaternion[1] = q.q1
                data.quaternion[2] = q.q2
                data.quaternion[3] = q.q3
                data.position.x = q.x
                data.position.y = q.y
                data. position. z = q.z
               
                data.moveSpeed.x = q.sx
                data.moveSpeed.y = q.sy
                data.moveSpeed.z = q.sz
                data.bikeLean = q.lean
                data.vehicleId = select(2, sampGetVehicleIdByCarHandle(storeCarCharIsInNoSave(PLAYER_PED)))
                data.trailerId = int(trailer_Id)
                data.vehicleHealth = 1500
                sleeping = int(old.veh.timer)
                if not sleeping then
                    sleeping = int(old.tr.timer)
                else
                    if sleeping < 10 then
                        sleeping = int(old.tr.timer)
                    end
                end
               
                data.send()
                q = old.tr
               
               
                data = samp_create_sync_data('trailer')
                data.position.x = q.x
                data.position.y = q.y
                data. position. z = q.z
                data.quaternion[0] = q.q0
                data.quaternion[1] = q.q1
                data.quaternion[2] = q.q2
                data.quaternion[3] = q.q3
                data.moveSpeed.x = q.sx
                data.moveSpeed.y = q.sy
                data.moveSpeed.z = q.sz
                data.roll.x = q.rx
                data.roll.y = q.ry
                data.roll.z = q.rz
               
                data.direction.x = q.dz
                data.direction.y = q.dy
                data.direction.z = q.dz
               
                data.speed.x = q.spx
                data.speed.y = q.spy
                data.speed.z = q.spz
                data.unk = q.unk
                data.trailerId = int(trailer_Id)
                print('gg')
               
                data.send()
                setCarCoordinatesNoOffset(storeCarCharIsInNoSave(PLAYER_PED), q.x, q.y, q.z)
                printStringNow('~g~[Router-Recorder]~b~~h~ Playing trailer sync... Played: '..pack..'/'..#playroute..' packets.', 1000)
            end
            if q.veh_ == 1 and q.tr_ == 0 then
                if not q or not play then pack = #playroute goto pepe end
                q = q.veh
                local data = samp_create_sync_data('vehicle')
                data.leftRightKeys = int(q.lr)
                data.upDownKeys = q.ud
                data.keysData = q.keys
                data.quaternion[0] = q.q0
                data.quaternion[1] = q.q1
                data.quaternion[2] = q.q2
                data.quaternion[3] = q.q3
                data.position.x = q.x
                data.position.y = q.y
                data. position. z = q.z
               
                data.moveSpeed.x = q.sx
                data.moveSpeed.y = q.sy
                data.moveSpeed.z = q.sz
                data.bikeLean = q.lean
                sleeping = q.timer
                data.vehicleId = select(2, sampGetVehicleIdByCarHandle(storeCarCharIsInNoSave(PLAYER_PED)))
                data.send()
                setCarCoordinatesNoOffset(storeCarCharIsInNoSave(PLAYER_PED), q.x, q.y, q.z)
                printStringNow('~g~[Router-Recorder]~b~~h~ Playing vehicle sync... Played: '..pack..'/'..#playroute..' packets.', 1000)
            end
            ::pepe::
            if pack == #playroute then
                if loop_route then
                    pack = 0
                else
                    play = false;
                    message('Закончил маршрут.')
                    route = {}
                    playroute = {}
                    trailer_record = false
                    recording = false
                end
            end
        end
    end)
end
function samp_create_sync_data(sync_type, copy_from_player)
    local ffi = require 'ffi'
    local sampfuncs = require 'sampfuncs'
    local raknet = require 'samp.raknet'
    copy_from_player = copy_from_player or true
    local sync_traits = {
        player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC, sampStorePlayerOnfootData},
        vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC, sampStorePlayerIncarData},
        passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC, sampStorePlayerPassengerData},
        aim = {'AimSyncData', raknet.PACKET.AIM_SYNC, sampStorePlayerAimData},
        trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC, sampStorePlayerTrailerData},
        unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC, nil},
        bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC, nil},
        spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC, nil}
    }
    local sync_info = sync_traits[sync_type]
    local data_type = 'struct ' .. sync_info[1]
    local data = ffi.new(data_type, {})
    local raw_data_ptr = tonumber(ffi.cast('uintptr_t', ffi.new(data_type .. '*', data)))
    if copy_from_player then
        local copy_func = sync_info[3]
        if copy_func then
            local _, player_id
            if copy_from_player == true then
                _, player_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
            else
                player_id = tonumber(copy_from_player)
            end
            copy_func(player_id, raw_data_ptr)
        end
    end
    local func_send = function()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, sync_info[2])
        raknetBitStreamWriteBuffer(bs, raw_data_ptr, ffi.sizeof(data))
        raknetSendBitStreamEx(bs, sampfuncs.HIGH_PRIORITY, sampfuncs.UNRELIABLE_SEQUENCED, 1)
        raknetDeleteBitStream(bs)
    end
    local mt = {
        __index = function(t, index)
            return data[index]
        end,
        __newindex = function(t, index, value)
            data[index] = value
        end
    }
    return setmetatable({send = func_send}, mt)
end
 
  • Грустно
Реакции: qdIbp

dmitry.karle

Известный
408
109
каким образом можно получить нажатие Y / N игрока из спека? через функцию
Lua:
function onReceiveRpc(id, bitStream)
end

можно ли как-то через эту функцию ловить Y / N из спека и передавать её в функцию?
Lua:
function onPlayerSync(playerId, data)
end

сервером не получается получить Y / N через onPlayerSync(playerId, data)
 
Последнее редактирование:

droffet

Новичок
2
0
Проблема, выкидывает ошибку ни с того ни с сего от функции getCharInCarPassengerSeat()

Код:
[ML] (error) script.lua: opcode '0432' call caused an unhandled exception
stack traceback:
    [C]: in function 'getCharInCarPassengerSeat'
    C:\GTA San Andreas\moonloader\script.lua:34: in function 'callback'
Код:
function SE.onSendCommand(msg)
    if string.find(msg, "/dkl") then
        local status = isCharOnFoot(PLAYER_PED)
        if status then
            sampAddChatMessage('Нельзя сделать доклад, когда игрок не в машине.', 0xd3d3d3ff)
        else
            local carhandle = storeCarCharIsInNoSave(PLAYER_PED) 
            for i = 1, getMaximumNumberOfPassengers(carhandle) do
                print('Вывод: ' .. getCharInCarPassengerSeat(carhandle, i))
            end
        end
    elseif string.find(msg, "/1057v") then
        local X, Y, Z = ge0CharCoordinates(PLAYER_PED)
        sampSendChat('/r [Officer of HPD]: GPS: ' .. math.floor(X+0.5) .. '.0, ' .. math.floor(Y+0.5) .. '.0, ' .. math.floor(Z+0.5) .. '.0.')
        --sampSendChat
    end
end

 

TSIDEX

Известный
86
8
Можно ли как-то получить позицию маркера на карте так, чтобы через imgui.SetCursorPos() установить точку в имгуи в том же соотношении?
Чтобы грубо говоря, получить в имгуи окне тот же рендер карты и отображать на нём метки по нужным координатам?

Координаты само собой рисуются в своём порядке, мол -2530, 23, -2. Но для imgui.SetCursorPos() нужны совершенно иные значения.
Может есть вариант получить положение метки на карте относительно экрана и передать аналогичное положение в имгуи окно?
gta_sa 2024-11-21 00-51-25-316.jpg
 
Последнее редактирование:

mo.hennessy

Участник
34
5
Что делать, не ищется айди.
Lua:
function main()

    local valid, ped = getCharPlayerIsTargeting()
if valid and doesCharExist(ped) then
  local result, id = sampGetPlayerIdByCharHandle(ped)
  local name = sampGetPlayerNickname(id)

end
Тут получаю айди;
Код:
       if imgui.Button(u8'Оружие(медка)', imgui.ImVec2(100, 40)) then
            lua_thread.create(function ()
            sampSendChat('Для оформления лицензии на оружие необходимо предоставить мед.карту')
            wait(1000)
            sampSendChat('/b /showmc Maestro_Hennessy')
                while not isKeyJustPressed(VK_K) do wait(100) end

            sampSendChat('Хорошо, лицензия на оружие стоит на месяц - 1.000.000$, на 2 - 1.150.000$, на 3 - 1.250.000$')
            wait(1000)
            sampSendChat('На сколько желаете оформить?')
            wait(1500)
                sampSendChat('5')
            wait(1000)
            sampSendChat('/me достал бланк, внёс в него нужную информацию, передал клиенту напротив')
            for id = 1, 999 do 
            sampSendChat('/gliciveense' + id)
            
            end
            end)
        end
Тут пытаюсь сделать, что бы скрипт реагировал на айди, но этого не происходит. Почему так?
 

Minhjhs

Участник
74
25
Здаров, перерыл весь форум БХ, и вики, Не нашёл ответа на свой вопрос..
2024-11-21_13-05-27.png

Как сделать так, чтобы если в ini.coord.cord что - то есть, скрипт создавал новый раздел, к примеру ini.coord.cord2, и туда записывал координату и т.д(Надо много коорд засейвить)
(Видос чапо, и TheChampGuess уже смотрел, ответа нет)
 

chromiusj

Известный
Модератор
6,011
4,328
Здаров, перерыл весь форум БХ, и вики, Не нашёл ответа на свой вопрос..
Посмотреть вложение 257761
Как сделать так, чтобы если в ini.coord.cord что - то есть, скрипт создавал новый раздел, к примеру ini.coord.cord2, и туда записывал координату и т.д(Надо много коорд засейвить)
(Видос чапо, и TheChampGuess уже смотрел, ответа нет)
используй json
 

solution

Участник
79
12
при определенных действиях нужно быстро сделать реконнект(отключить игрока и так же подключить его)
Lua:
sampDisconnectWithReason(quit)
wait(8000)
sampSetGamestate(1)
использую такой метод(нашел на бх), но почему-то игрока после такого выхода больше не подключает:
1732176216928.png


висит тупо на рестарте, при этом если прописать второй реконнект(другой плагин) то подключение пойдет корректно. в чем может быть трабл?
 

droffet

Новичок
2
0
Проблема, выкидывает ошибку ни с того ни с сего от функции getCharInCarPassengerSeat()

Код:
[ML] (error) script.lua: opcode '0432' call caused an unhandled exception
stack traceback:
    [C]: in function 'getCharInCarPassengerSeat'
    C:\GTA San Andreas\moonloader\script.lua:34: in function 'callback'
Код:
function SE.onSendCommand(msg)
    if string.find(msg, "/dkl") then
        local status = isCharOnFoot(PLAYER_PED)
        if status then
            sampAddChatMessage('Нельзя сделать доклад, когда игрок не в машине.', 0xd3d3d3ff)
        else
            local carhandle = storeCarCharIsInNoSave(PLAYER_PED)
            for i = 1, getMaximumNumberOfPassengers(carhandle) do
                print('Вывод: ' .. getCharInCarPassengerSeat(carhandle, i))
            end
        end
    elseif string.find(msg, "/1057v") then
        local X, Y, Z = ge0CharCoordinates(PLAYER_PED)
        sampSendChat('/r [Officer of HPD]: GPS: ' .. math.floor(X+0.5) .. '.0, ' .. math.floor(Y+0.5) .. '.0, ' .. math.floor(Z+0.5) .. '.0.')
        --sampSendChat
    end
end

up