Получение айди ближайшего игрока в определенном радиусе и отправка команды-приглашения игроку

w99zzl1

Участник
Автор темы
105
10
Версия MoonLoader
.026-beta
Здравствуйте! Написал скрипт по красоте)


Lua:
script_name("Family Helper")
script_version_number("0.0.1")
script_description("Universal helper for the Samp Advance RP Family")
script_author("w99zzl1")
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local WinState = imgui.new.bool()
local testCollapsed = imgui.new.bool(true)
local autoAcceptFamily = imgui.new.bool(false)
local inputWindow = imgui.new.int(15)
local inputDelay = imgui.new.int(2000)
local players = {}
local lastInviteTime = 0
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
  
    sampRegisterChatCommand('cmd', function() WinState[0] = not WinState[0] end)
    while true do
        wait(0)
        if autoAcceptFamily[0] then
            local nearestPlayerId = getPlayerInRange(15)
            local currentTime = os.time()
            if nearestPlayerId ~= -1 and nearestPlayerId ~= tonumber(player.id) and currentTime - lastInviteTime >= 5 then
                setTimerFunction(function()
                    sampSendChat(string.format('/finvite %d', nearestPlayerId))
                    lastInviteTime = os.time()
                end, inputDelay[0])
            end          
        end
    end
end

imgui.OnFrame(function() return WinState[0] and not isPauseMenuActive() end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(1500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(1000, 1000), imgui.Cond.Always)
    imgui.Begin('Family Helper', WinState,imgui.WindowFlags.NoResize)
    imgui.Image(imhandle, imgui.ImVec2(1000, 400))
    imgui.Text('----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------')
    imgui.Text('HELP')
    if imgui.CollapsingHeader(u8'Настройки', imgui.TreeNodeFlags.DefaultOpen, testCollapsed) then
        imgui.Checkbox(u8'Автоматическое принятие в семью', autoAcceptFamily)
        if autoAcceptFamily[0] then
            imgui.Text(u8'Задержка перед отправкой приглашения (в мс):')
            imgui.SliderInt('##delay', inputDelay, 1000, 10000)
        end
    end
    imgui.End()
end)


imgui.OnInitialize(function()
    if doesFileExist(getWorkingDirectory()..'\\resource\\fon.png') then
        imhandle = imgui.CreateTextureFromFile(getWorkingDirectory() .. '\\resource\\fon.png')
    end
end)
function getPlayerInRange(range)
    if not isSampLoaded() or not isSampfuncsLoaded() or not isSampAvailable() or not player then return -1 end
    local playerPos = {getCharCoordinates(PLAYER_PED)}
    local nearestPlayerId = -1
    local nearestPlayerDistance = range
    for i = 0, 1000 do
        if sampIsPlayerConnected(i) and i ~= tonumber(player.id) then
            local charHandle = sampGetCharHandleBySampPlayerId(i)
            if charHandle ~= 0 then
                local res, playerPos2 = pcall(getCharCoordinates, charHandle)
                if res and playerPos2 then
                    local distance = getDistanceBetweenCoords3d(playerPos[1], playerPos[2], playerPos[3], playerPos2[1], playerPos2[2], playerPos2[3])
                    if distance < nearestPlayerDistance then
                        nearestPlayerId = i
                        nearestPlayerDistance = distance
                    end
                end
            end
        end
    end
    return nearestPlayerId
end

function setTimerFunction(callback, delay)
    local timer = os.clock() + delay / 1000
    while os.clock() < timer do
        wait(0)
    end
    callback()
end

(Навсякий отправил целый код)
Проблема в том, что по задумке, в категории "Настройки" если поставить галочку на "Авто принятие в фаму" то скрипт будет отправлять всем команду `/finvite [id]` (там где id - Айди ближайшего игрока в зоне действия команды), Только конечно если игроков рядом нет, скрипт не будет ничего отправлять. Но я подхожу к игроку в притык, а скрипт не пишет /finvite id, Кто может помочь?
 
Последнее редактирование: