Как сделать статистику инвайтов?

_Snake_

Участник
Автор темы
40
2
У меня есть код, но не могу сделать статистику инвайтов. могу скинуть код (не осуждайте на говно код)


Lua:
local imgui = require('mimgui');
local ffi = require('ffi');
local encoding = require('encoding');
encoding.default = 'CP1251';
local u8 = encoding.UTF8;
local window = imgui.new.bool(false);
local active = imgui.new.bool(false)
local inviteCountDay = 0 -- счетчик приглашений за день
local inviteCountWeek = 0 -- счетчик приглашений за неделю
local inviteCountMonth = 0 -- счетчик приглашений за месяц
local inviteCountTotal = 0 -- счетчик приглашений за все время

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil;
end);

imgui.OnFrame( function() return window[0] end, function(this)
    local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution())

    imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    if (imgui.Begin('AutoFamInvite', window)) then
        if imgui.BeginTabBar('TabBar') then
            if imgui.BeginTabItem(u8'Инвайт') then
                if imgui.Button(u8'Инвайт в фаму (разово)', imgui.ImVec2(155, 50)) then
                    sampAddChatMessage('Кинул запрос игрок(у) или (ам)', -1)
                    rfam() -- вызов функции rfam при нажатии кнопки
                end
                if  imgui.Checkbox(u8'Автоинвайт в фаму: ', active) then
                    sampAddChatMessage('Автоинвайт: ' ..(active[0] and 'Включен' or 'Выключен') , -1)
                end
                imgui.EndTabItem()
            end
            if imgui.BeginTabItem(u8'Статистика') then
                imgui.Text(u8'Приглашено игроков сегодня: ' .. inviteCountDay) -- отображение счетчика приглашений за день
                imgui.Text(u8'Приглашено игроков за неделю: ' .. inviteCountWeek) -- отображение счетчика приглашений за неделю
                imgui.Text(u8'Приглашено игроков за месяц: ' .. inviteCountMonth) -- отображение счетчика приглашений за месяц
                imgui.Text(u8'Приглашено игроков за все время: ' .. inviteCountTotal) -- отображение счетчика приглашений за все время
                imgui.EndTabItem()
            end
            imgui.EndTabBar()
        end
    end
    imgui.End();
end
);

local autoInviteActive = false
script_name('Версия 0.1')
script_author('Автор Snake')
require "lib.moonloader"
function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('Скрипт загружен!', -1)
    sampAddChatMessage('Автор скрипта Snake',0x808080)
    sampAddChatMessage('Активация скрипта /rfam или /rfamauto',0x808080)

    sampRegisterChatCommand('rfam', rfam)
    sampRegisterChatCommand('rfamauto',function ()
        autoInviteActive = not autoInviteActive
    sampAddChatMessage(autoInviteActive and 'Включен' or 'Выключен', -1)
    end )
    sampRegisterChatCommand('faminv', function ()
        window[0] = not window[0]
    end)

    -- Регистрация обработчика системных сообщений
    sampRegisterChatCallback(function (index, text, prefix, color, isSystem)
        if isSystem and string.find(text, "пригласил нового члена:") then
            inviteCountDay = inviteCountDay + 1
            inviteCountWeek = inviteCountWeek + 1
            inviteCountMonth = inviteCountMonth + 1
            inviteCountTotal = inviteCountTotal + 1
        end
    end)

    while true do
        wait(1000)
        if active[0] then
            local peds = getAllChars()
        for _, v in pairs(peds) do
            local result, myid = sampGetPlayerIdByCharHandle(playerPed)
            local mx, my, mz = getCharCoordinates(playerPed)
            local x, y, z = getCharCoordinates(v)
            local distance = getDistanceBetweenCoords3d(mx, my, mz, x, y, z)
            local result, id = sampGetPlayerIdByCharHandle(v)
            if result and id ~= sampGetPlayerIdByCharHandle(PLAYER_PED) and distance < 5.0 then
                if id ~= myid then
                    sampSendChat('/faminvite '..tonumber(id))
                end
            end
        end
        end
    end
end

function rfam()
    local peds = getAllChars()
    for _, v in pairs(peds) do
        local result, myid = sampGetPlayerIdByCharHandle(playerPed)
        local mx, my, mz = getCharCoordinates(playerPed)
        local x, y, z = getCharCoordinates(v)
        local distance = getDistanceBetweenCoords3d(mx, my, mz, x, y, z)
        local result, id = sampGetPlayerIdByCharHandle(v)
        if result and id ~= sampGetPlayerIdByCharHandle(PLAYER_PED) and distance < 5.0 then
            if id ~= myid then
                sampSendChat('/faminvite '..tonumber(id))
            end
        end
    end
end
 

chromiusj

Известный
Модератор
5,662
3,963
Так можешь помочь?
используй хук onServerMessage
Lua:
local sampev = require('lib.samp.events')
local num = 0
function sampev.onServerMessage(color, text)
    if text:match('пригласил') then -- естественно такой вариант может не пойти, и в данном случае придется использовать регулярные выражения для более точного поиска текста
        num = num + 1
    end
end