Lua PlayerRemover for SanTrope.

yuki x montogomery

Участник
Автор темы
113
19
Геттовцы! Аллоха!
Представляю вам скрит PRMenu для проекта Santrope RP[G]
Как вы знаете, на Santrope другие CLIST'ы банд.
В Этом скрипте, исправлены клисты, а так же есть банда "Pirus"

Активация

- Активация /prm (активируйте тогда, когда уже на капт зоне)
- Чтобы все появились нужно выключить в /prm и зайти в какую нибудь инту.


Требования:
- ImGUI, ImGUI Addons, SAMP lua, SAMPFUNCS


v0.1 РЕЛИЗ
v0.2 НЕЗНАЧИТЕЛЬНЫЙ ФИКС КОДА

PS Код закрыд, так как первый опыт, и он не очень идеальный.

Автор: @yuki x montogomery |
Помощь: @CaJlaT, @xXx_maynkraftpro2010
Идея: @M0rtelli
 

Вложения

  • prm_santrope_v2.luac
    5.9 KB · Просмотры: 8
Последнее редактирование:

CaJlaT

Овощ
Проверенный
1,785
1,097
1617820272063.png
Конечно, не мне кого-то учить, но всё же попытаюсь...
Насчёт табуляции промолчу...
Зачем подгружаешь библиотеку, которую не используешь?
Lua:
local key = require 'vkeys'
Про саму идею использовать имгуи ради нескольких кнопок говорить не буду, но зачем тогда подгружать ещё и аддоны? Хватило бы обычного чекбокса
Lua:
local imadd = require 'imgui_addons'

Это можно сократить в одну-две строчки
Lua:
local c = sampGetPlayerColor(id)
c = argb_to_rgb(c)
c = string.format("%06X",c)



--где-то там:
function argb_to_rgb(argb)
    return bit.band(argb, 0xFFFFFF)
end
Lua:
local c = sampGetPlayerColor(id)
c = string.format("%06X", bit.band(с, 0xFFFFFF))


--Ну или так
local c = string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))

По поводу эмуляции рпц, зачем ты перетащил такую громоздкую функцию, если её можно существенно сократить до этого:
Lua:
function emul_rpc(hook, parameters)
    local bs_io = require 'samp.events.bitstream_io'
    local hooks = {
        ['onPlayerStreamOut'] = { 'int16', 163 },
    }
    local hook_table = hooks[hook]
    if hook_table then
        local bs = raknetNewBitStream()
        local max = #hook_table-1
        if max > 0 then
            for i = 1, max do
                local p = hook_table[i]
                bs_io[p]['write'](bs, parameters[i])
            end
        end
        raknetEmulRpcReceiveBitStream(hook_table[#hook_table], bs)
        raknetDeleteBitStream(bs)
    end
end

Зачем в бесконечном цикле менять тему, если можно сменить 1 раз при запуске скрипта?

Lua:
function imgui.OnDrawFrame()
style()

Нет слов, одни эмоции... сверху - кал, зато снизу нормально
1617821349768.png


Чтоп, сто? if imgui.Text? С каких пор обычный рендер текста возвращает какие-то значения?
Lua:
if imgui.Text(u8("Groove")) then
end
Зачем нужно было подгружать библиотеку с кодировками, если ты всё равно не пишешь кириллицей?

В main() вообще какие-то танцы с бубном

Подправил табуляцию:
function main()
    imgui.Process = false -- Зачем это делать, если изначально процесс имгуи выключен?
    sampRegisterChatCommand('prm', function() -- Регестрировать команду лучше после проверок, которые идут ниже
        main_menu.v = not main_menu.v
        imgui.Process = main_menu.v -- эту строчку можно засунуть в беск.цикл
    end)
    while not isSampAvailable() do wait(50) end -- Сначала нужно проверить подгружен ли самп, а потом уже ждать инициализации, а не наоборот
    if not isSampfuncsLoaded() or not isSampLoaded() then
        return
    end
    while true do
        wait(50)
    end
end
Вроде про всё написал, хотя мб что-то и упустил.
Вот мой вариант этого кода:
Lua:
local imgui = require 'imgui'
local main_menu = imgui.ImBool(false)
local sampev = require 'lib.samp.events'
local imadd = require 'imgui_addons'


local groove = imgui.ImBool(false)
local ballas = imgui.ImBool(false)
local aztec = imgui.ImBool(false)
local rifa = imgui.ImBool(false)
local vagos = imgui.ImBool(false)
local pirus = imgui.ImBool(false)


function delplayers()
    for _, handle in ipairs(getAllChars()) do
        local _, id = sampGetPlayerIdByCharHandle(handle)
        local c = string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))
        if doesCharExist(handle) then
            if c == '009900' and groove.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == 'FF0000' and pirus.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == 'CC00FF' and ballas.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end

            if c == 'FFFF00' and vagos.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == '6666FF' and rifa.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == '00CCFF' and aztec.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
        end
    end
end


function imgui.OnDrawFrame()
    if main_menu.v then
        local so, sp = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(so / 2.8, sp / 2), imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(300, 250)) --imgui.WindowFlags.MenuBar
        imgui.Begin('PRM Santrope | Author - Yuki Montogomery', main_menu, imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
        imgui.Separator()
        imgui.Text("Groove")
        imgui.SameLine(60)
        if imadd.ToggleButton(" ", groove) then
            delplayers()
        end
        imgui.Text("Vagos")
        imgui.SameLine(60)
        if imadd.ToggleButton("2", vagos) then
            delplayers()
        end
        imgui.Text("Aztec")
        imgui.SameLine(60)
        if imadd.ToggleButton("3", aztec) then
            delplayers()
        end
        imgui.Text("Pirus")
        imgui.SameLine(60)
        if imadd.ToggleButton("4", pirus) then
            delplayers()
        end
        imgui.Text("Rifa")
        imgui.SameLine(60)
        if imadd.ToggleButton("5", rifa) then
            delplayers()
        end
        imgui.Text("Ballas")
        imgui.SameLine(60)
        if imadd.ToggleButton("6", ballas) then
            delplayers()
        end
        imgui.End()
    end

end

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(50) end
    sampRegisterChatCommand('prm', function()
        main_menu.v = not main_menu.v
    end)
    while true do
        wait(0)
        imgui.Process = main_menu.v
    end
end

function sampev.onPlayerStreamIn(id, team, model, pos, rot, color, style)
    local c = string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))
    if c == '009900' and groove.v then
        return false
    end
    if c == 'FF0000' and pirus.v then
        return false
    end
    if c == 'CC00FF' and ballas.v then
        return false
    end
    if c == 'FFFF00' and vagos.v then
        return false
    end
    if c == '6666FF' and rifa.v then
        return false
    end
    if c == '00CCFF' and aztec.v then
        return false
    end
end


function style()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    style.WindowRounding = 1.5
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ChildWindowRounding = 1.5
    style.FrameRounding = 1.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    style.WindowPadding = imgui.ImVec2(4.0, 4.0)
    style.FramePadding = imgui.ImVec2(2.5, 3.5)
    style.ButtonTextAlign = imgui.ImVec2(0.02, 0.4)
    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]           = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.WindowBg]               = imgui.ImColor(20, 20, 20, 255):GetVec4()
    colors[clr.ChildWindowBg]          = ImVec4(1.00, 1.00, 1.00, 0.00)
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    colors[clr.Border]                 = imgui.ImColor(40, 142, 110, 90):GetVec4()
    colors[clr.BorderShadow]           = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.FrameBg]                = imgui.ImColor(40, 142, 110, 113):GetVec4()
    colors[clr.FrameBgHovered]         = imgui.ImColor(40, 142, 110, 164):GetVec4()
    colors[clr.FrameBgActive]          = imgui.ImColor(40, 142, 110, 255):GetVec4()
    colors[clr.TitleBg]                = imgui.ImColor(40, 142, 110, 236):GetVec4()
    colors[clr.TitleBgActive]          = imgui.ImColor(40, 142, 110, 236):GetVec4()
    colors[clr.TitleBgCollapsed]       = ImVec4(0.05, 0.05, 0.05, 0.79)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = imgui.ImColor(40, 142, 110, 236):GetVec4()
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CheckMark]              = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.28, 0.28, 0.28, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.35, 0.35, 0.35, 1.00)
    colors[clr.Button]                 = imgui.ImColor(35, 35, 35, 255):GetVec4()
    colors[clr.ButtonHovered]          = imgui.ImColor(35, 121, 93, 174):GetVec4()
    colors[clr.ButtonActive]           = imgui.ImColor(44, 154, 119, 255):GetVec4()
    colors[clr.Header]                 = imgui.ImColor(40, 142, 110, 255):GetVec4()
    colors[clr.HeaderHovered]          = ImVec4(0.34, 0.34, 0.35, 0.89)
    colors[clr.HeaderActive]           = ImVec4(0.12, 0.12, 0.12, 0.94)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.26, 0.59, 0.98, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]             = imgui.ImColor(40, 142, 110, 255):GetVec4()
    colors[clr.ResizeGripHovered]      = imgui.ImColor(35, 121, 93, 174):GetVec4()
    colors[clr.ResizeGripActive]       = imgui.ImColor(44, 154, 119, 255):GetVec4()
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]              = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]       = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.10, 0.10, 0.10, 0.35)
end
style()

function emul_rpc(hook, parameters)
    local bs_io = require 'samp.events.bitstream_io'
    local hooks = {
        ['onPlayerStreamOut'] = { 'int16', 163 },
    }
    local hook_table = hooks[hook]
    if hook_table then
        local bs = raknetNewBitStream()
        local max = #hook_table-1
        if max > 0 then
            for i = 1, max do
                local p = hook_table[i]
                bs_io[p]['write'](bs, parameters[i])
            end
        end
        raknetEmulRpcReceiveBitStream(hook_table[#hook_table], bs)
        raknetDeleteBitStream(bs)
    end
end
 
Последнее редактирование:

Musaigen

ŜĆŘΣΔΜ ΔΝĐ ŜΉØΩТ
Проверенный
1,319
696
По поводу эмуляции рпц, зачем ты перетащил такую громоздкую функцию, если её можно существенно сократить до этого:
Lua:
function removePlayer(id)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt16(bs, id)
    raknetEmulRpcReceiveBitStream(163, bs)
    raknetDeleteBitStream(bs)
end
 
  • Нравится
Реакции: CaJlaT и Seven Memz

paulohardy

Известный
Проверенный
1,503
736
Не шарю, поэтому просто вырезал лишнее
можно было и от дублирования проверок избавиться
вместо такого кода
Lua:
function delplayers()
    for _, handle in ipairs(getAllChars()) do
        local _, id = sampGetPlayerIdByCharHandle(handle)
        local c = string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))
        if doesCharExist(handle) then
            if c == '009900' and groove.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == 'FF0000' and pirus.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == 'CC00FF' and ballas.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end

            if c == 'FFFF00' and vagos.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == '6666FF' and rifa.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
            if c == '00CCFF' and aztec.v then
                if id ~= myid then
                    emul_rpc('onPlayerStreamOut', { id })
                end
            end
        end
    end
end

function sampev.onPlayerStreamIn(id, team, model, pos, rot, color, style)
    local c = string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))
    if c == '009900' and groove.v then
        return false
    end
    if c == 'FF0000' and pirus.v then
        return false
    end
    if c == 'CC00FF' and ballas.v then
        return false
    end
    if c == 'FFFF00' and vagos.v then
        return false
    end
    if c == '6666FF' and rifa.v then
        return false
    end
    if c == '00CCFF' and aztec.v then
        return false
    end
end
вот такой
Lua:
function delplayers()
    for _, handle in ipairs(getAllChars()) do
        if doesCharExist(handle) then
            local _, id = sampGetPlayerIdByCharHandle(handle)
            if id ~= myid and getColor(string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF))) then
                removePlayer(id)
            end
        end
    end
end

function sampev.onPlayerStreamIn(id)
    return not getColor(string.format("%06X", bit.band(sampGetPlayerColor(id), 0xFFFFFF)))
end

function getColor(c)
    if c == '009900' and groove.v or c == 'FF0000' and pirus.v or c == 'CC00FF' and ballas.v or c == 'FFFF00' and vagos.v or c == '6666FF' and rifa.v or c == '00CCFF' and aztec.v then
        return true
    end
    return false
end
 
  • Нравится
Реакции: CaJlaT

paulohardy

Известный
Проверенный
1,503
736
Че там такого что 6 килобайт весит?
Lua:
slot0 = require("imgui")
slot1 = slot0.ImBool(false)
slot3 = require("imgui_addons")
slot4 = slot0.ImBool(false)
slot5 = slot0.ImBool(false)
slot6 = slot0.ImBool(false)
slot7 = slot0.ImBool(false)
slot8 = slot0.ImBool(false)
slot9 = slot0.ImBool(false)

function delplayers()
    for slot3, slot4 in ipairs(getAllChars()) do
        slot5, slot6 = sampGetPlayerIdByCharHandle(slot4)
        slot7 = string.format("%06X", bit.band(sampGetPlayerColor(slot6), 16777215))

        if doesCharExist(slot4) then
            if slot7 == "009900" and uv0.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end

            if slot7 == "FF0000" and uv1.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end

            if slot7 == "CC00FF" and uv2.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end

            if slot7 == "FFFF00" and uv3.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end

            if slot7 == "6666FF" and uv4.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end

            if slot7 == "00CCFF" and uv5.v and slot6 ~= myid then
                emul_rpc("onPlayerStreamOut", {
                    slot6
                })
            end
        end
    end
end

function slot0.OnDrawFrame()
    if uv0.v then
        slot0, slot1 = getScreenResolution()

        uv1.SetNextWindowPos(uv1.ImVec2(slot0 / 2.8, slot1 / 2), uv1.ImVec2(0.5, 0.5))
        uv1.SetNextWindowSize(uv1.ImVec2(300, 250))
        uv1.Begin("PRM Santrope | Author - Yuki Montogomery", uv0, uv1.WindowFlags.NoMove + uv1.WindowFlags.NoCollapse)
        uv1.Separator()
        uv1.Text("Groove")
        uv1.SameLine(60)

        if uv2.ToggleButton("1", uv3) then
            delplayers()
        end

        uv1.Text("Vagos")
        uv1.SameLine(60)

        if uv2.ToggleButton("2", uv4) then
            delplayers()
        end

        uv1.Text("Aztec")
        uv1.SameLine(60)

        if uv2.ToggleButton("3", uv5) then
            delplayers()
        end

        uv1.Text("Pirus")
        uv1.SameLine(60)

        if uv2.ToggleButton("4", uv6) then
            delplayers()
        end

        uv1.Text("Rifa")
        uv1.SameLine(60)

        if uv2.ToggleButton("5", uv7) then
            delplayers()
        end

        uv1.Text("Ballas")
        uv1.SameLine(60)

        if uv2.ToggleButton("6", uv8) then
            delplayers()
        end

        uv1.End()
    end
end

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(50)
    end

    sampAddChatMessage("{808080}[PRMenu] {EEE8AA}PRM {FFFFFF}for Santrope RP{808080}[G]", -1)
    sampAddChatMessage("{808080}[PRMenu] {EEE8AA}јктиваци¤: {FFFFFF}/prm", -1)
    sampAddChatMessage("{808080}[PRMenu] {EEE8AA}јвтор: {FFFFFF}Yuki Montogomery", -1)
    sampAddChatMessage("{808080}[PRMenu] {EEE8AA}Ѕлагодарность: {FFFFFF}CaJlaT, xXx_maynkraftpro2010", -1)
    sampRegisterChatCommand("prm", function ()
        uv0.v = not uv0.v
    end)

    while true do
        wait(0)

        uv1.Process = uv0.v
    end
end

require("lib.samp.events").onPlayerStreamIn = function (slot0, slot1, slot2, slot3, slot4, slot5, slot6)
    if string.format("%06X", bit.band(sampGetPlayerColor(slot0), 16777215)) == "009900" and uv0.v then
        return false
    end

    if slot7 == "FF0000" and uv1.v then
        return false
    end

    if slot7 == "CC00FF" and uv2.v then
        return false
    end

    if slot7 == "FFFF00" and uv3.v then
        return false
    end

    if slot7 == "6666FF" and uv4.v then
        return false
    end

    if slot7 == "00CCFF" and uv5.v then
        return false
    end
end

function style()
    slot0 = uv0.GetStyle()
    slot1 = slot0.Colors
    slot2 = uv0.Col
    slot3 = uv0.ImVec4
    slot0.WindowRounding = 1.5
    slot0.WindowTitleAlign = uv0.ImVec2(0.5, 0.5)
    slot0.ChildWindowRounding = 1.5
    slot0.FrameRounding = 1
    slot0.ItemSpacing = uv0.ImVec2(5, 4)
    slot0.ScrollbarSize = 13
    slot0.ScrollbarRounding = 0
    slot0.GrabMinSize = 8
    slot0.GrabRounding = 1
    slot0.WindowPadding = uv0.ImVec2(4, 4)
    slot0.FramePadding = uv0.ImVec2(2.5, 3.5)
    slot0.ButtonTextAlign = uv0.ImVec2(0.02, 0.4)
    slot1[slot2.Text] = slot3(1, 1, 1, 1)
    slot1[slot2.TextDisabled] = slot3(0.5, 0.5, 0.5, 1)
    slot1[slot2.WindowBg] = uv0.ImColor(20, 20, 20, 255):GetVec4()
    slot1[slot2.ChildWindowBg] = slot3(1, 1, 1, 0)
    slot1[slot2.PopupBg] = slot3(0.08, 0.08, 0.08, 0.94)
    slot1[slot2.ComboBg] = slot1[slot2.PopupBg]
    slot1[slot2.Border] = uv0.ImColor(40, 142, 110, 90):GetVec4()
    slot1[slot2.BorderShadow] = slot3(0, 0, 0, 0)
    slot1[slot2.FrameBg] = uv0.ImColor(40, 142, 110, 113):GetVec4()
    slot1[slot2.FrameBgHovered] = uv0.ImColor(40, 142, 110, 164):GetVec4()
    slot1[slot2.FrameBgActive] = uv0.ImColor(40, 142, 110, 255):GetVec4()
    slot1[slot2.TitleBg] = uv0.ImColor(40, 142, 110, 236):GetVec4()
    slot1[slot2.TitleBgActive] = uv0.ImColor(40, 142, 110, 236):GetVec4()
    slot1[slot2.TitleBgCollapsed] = slot3(0.05, 0.05, 0.05, 0.79)
    slot1[slot2.MenuBarBg] = slot3(0.14, 0.14, 0.14, 1)
    slot1[slot2.ScrollbarBg] = slot3(0.02, 0.02, 0.02, 0.53)
    slot1[slot2.ScrollbarGrab] = uv0.ImColor(40, 142, 110, 236):GetVec4()
    slot1[slot2.ScrollbarGrabHovered] = slot3(0.41, 0.41, 0.41, 1)
    slot1[slot2.ScrollbarGrabActive] = slot3(0.51, 0.51, 0.51, 1)
    slot1[slot2.CheckMark] = slot3(1, 1, 1, 1)
    slot1[slot2.SliderGrab] = slot3(0.28, 0.28, 0.28, 1)
    slot1[slot2.SliderGrabActive] = slot3(0.35, 0.35, 0.35, 1)
    slot1[slot2.Button] = uv0.ImColor(35, 35, 35, 255):GetVec4()
    slot1[slot2.ButtonHovered] = uv0.ImColor(35, 121, 93, 174):GetVec4()
    slot1[slot2.ButtonActive] = uv0.ImColor(44, 154, 119, 255):GetVec4()
    slot1[slot2.Header] = uv0.ImColor(40, 142, 110, 255):GetVec4()
    slot1[slot2.HeaderHovered] = slot3(0.34, 0.34, 0.35, 0.89)
    slot1[slot2.HeaderActive] = slot3(0.12, 0.12, 0.12, 0.94)
    slot1[slot2.Separator] = slot1[slot2.Border]
    slot1[slot2.SeparatorHovered] = slot3(0.26, 0.59, 0.98, 0.78)
    slot1[slot2.SeparatorActive] = slot3(0.26, 0.59, 0.98, 1)
    slot1[slot2.ResizeGrip] = uv0.ImColor(40, 142, 110, 255):GetVec4()
    slot1[slot2.ResizeGripHovered] = uv0.ImColor(35, 121, 93, 174):GetVec4()
    slot1[slot2.ResizeGripActive] = uv0.ImColor(44, 154, 119, 255):GetVec4()
    slot1[slot2.CloseButton] = slot3(0.41, 0.41, 0.41, 0.5)
    slot1[slot2.CloseButtonHovered] = slot3(0.98, 0.39, 0.36, 1)
    slot1[slot2.CloseButtonActive] = slot3(0.98, 0.39, 0.36, 1)
    slot1[slot2.PlotLines] = slot3(0.61, 0.61, 0.61, 1)
    slot1[slot2.PlotLinesHovered] = slot3(1, 0.43, 0.35, 1)
    slot1[slot2.PlotHistogram] = slot3(0.9, 0.7, 0, 1)
    slot1[slot2.PlotHistogramHovered] = slot3(1, 0.6, 0, 1)
    slot1[slot2.TextSelectedBg] = slot3(0.26, 0.59, 0.98, 0.35)
    slot1[slot2.ModalWindowDarkening] = slot3(0.1, 0.1, 0.1, 0.35)
end

style()

function emul_rpc(slot0, slot1)
    slot2 = require("samp.events.bitstream_io")

    if ({
        onPlayerStreamOut = {
            "int16",
            163
        }
    })[slot0] then
        slot5 = raknetNewBitStream()

        if #slot4 - 1 > 0 then
            for slot10 = 1, slot6 do
                slot2[slot4[slot10]].write(slot5, slot1[slot10])
            end
        end

        raknetEmulRpcReceiveBitStream(slot4[#slot4], slot5)
        raknetDeleteBitStream(slot5)
    end
end