SA:MP нужно помочь переписать окно с онлайн друзьями из .sf в lua

ecipseu

Участник
Автор темы
91
7
ниже дам свой код и скрипт .sf, хочу в свой френдлист добавить окошко с онлайн друзьями посередине экрана слева, как в сф плагине от кичиро, но никак не получаеться, в чате гпт он дает мне странный код с несуществующими командами и в итоге скрипт даже не загружает в игру, буду пиздец как благодарен

мой код на луа:
local inicfg = require("inicfg")
local sampEvents = require("samp.events")

local FRIEND_COLOR = 0xffbdf7FF

local HELP = [[{ffffff}/fradd [id] - добавление человека в друзья.
/frdel [id] - удаление человека из друзей.
/frlist - просмотр списка друзей.
/frinfo - как ты открыл это меню?]]

do
    function chat(...)
        sampAddChatMessageEx(FRIEND_COLOR, {
            { "{HEX}", "{483d8b}" },
            { "{}", "{CECECE}" }
        }, "|{}", ...)
    end

    function sampAddChatMessageEx(color, patterns, ...)
        local output
        for key, value in pairs({...}) do
            if output then
                output = string.format("%s %s", output, tostring(value))
            else
                output = tostring(value)
            end
        end
        for key, value in ipairs(patterns) do
            if string.match(output, value[1]) then
                output = string.gsub(output, value[1], value[2])
            end
        end
        sampAddChatMessage(output, color)
    end
end

function main()
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage("{FFB6C1}[FriendList]{FFFFFF} Use /frinfo to get more information! tg - {FF4C4C}@romancial", -1)
end

local friends = (function()
    local ini = inicfg.load({
        friends = {}
    })

    local this = {
        index = ini.friends,
        color = FRIEND_COLOR,
        hash = {}
    }

    function this:rehash()
        self.hash = {}
        for i, v in ipairs(self.index) do
            self.hash[v] = i
        end
    end

    function this:exist(nickname)
        return self.hash[nickname]
    end

    function this:insert(nickname)
        if self:exist(nickname) then
            return false
        else
            table.insert(self.index, nickname)
            self.hash[nickname] = #self.index
            inicfg.save(ini)
            return true
        end
    end

    function this:remove(nickname)
        local i = self:exist(nickname)
        if i then
            table.remove(self.index, i)
            self:rehash()
            inicfg.save(ini)
            return true
        else
            return false
        end
    end

    this:rehash()

    return this
end)()

function sampEvents.onSendCommand(arguments)
    local command, parameters = arguments:match("/(%S+) ?(.*)")
    if command == "fradd" then
        local id, nickname = tonumber(parameters)

        if id then
            if sampIsPlayerConnected(id) then
                nickname = sampGetPlayerNickname(id)
            else
                chat("Игрок не подключен к серверу.")
                return false
            end
        else
            nickname = parameters
        end

        local result = friends:insert(nickname)

        if result then
            chat(("Игрок {FFB6C1}%s{FFFFFF} был добавлен в список друзей."):format(nickname))
        else
            chat("Не удалось добавить игрока в список друзей.")
        end

        return false
    elseif command == "frdel" then
        local id, nickname = tonumber(parameters)

        if id then
            if sampIsPlayerConnected(id) then
                nickname = sampGetPlayerNickname(id)
            else
                chat("Игрок не подключен к серверу.")
                return false
            end
        else
            nickname = parameters
        end

        local result = friends:remove(nickname)

        if result then
            chat(("Игрок {FFB6C1}%s{FFFFFF} был удален из списка друзей."):format(nickname))
        else
            chat("Не удалось удалить игрока из списка друзей.")
        end

        return false
    elseif command == "frlist" then
        local output = "{FFFFFF}"

        for index, value in ipairs(friends.index) do
            output = ("%s\n%s"):format(output, value)
        end

        sampShowDialog(0, "Friend List", output, "Close", "", 0)
        return false
    elseif command == "frinfo" then
        sampShowDialog(0, "{0047AB}Friends", HELP, "Close", "", 0)
        return false
    end
end

function sampEvents.onSendGiveDamage(id)
    if sampIsPlayerConnected(id) and friends:exist(sampGetPlayerNickname(id)) then
        printStyledString("~y~FRIENDLY ~r~FIRE", 1000, 7)
    end
end

function sampEvents.onPlayerStreamIn(id, team, model, position, rotation, color, fightingStyle)
    if sampIsPlayerConnected(id) and friends:exist(sampGetPlayerNickname(id)) then
        return { id, team, model, position, rotation, friends.color, fightingStyle }
    end
end

function sampEvents.onSetPlayerColor(id, color)
    if sampIsPlayerConnected(id) and friends:exist(sampGetPlayerNickname(id)) then
        return { id, friends.color }
    end
end

function sampEvents.onPlayerJoin(id, color, isNpc, nickname)
    if friends:exist(nickname) then
        return { id, friends.color, isNpc, nickname }
    end
end

Снимок экрана 2026-01-26 110008.png
Снимок экрана 2026-01-26 102944.png

забыл про пример с окном

upd мой фрлист сохраняет список всех друзей в .ini файл в config, если это может както заролять говорю
 

Вложения

  • FriendList_kichiro.sf
    196 KB · Просмотры: 2
Последнее редактирование: