Добавление проверки на админ флаг CK

DarkLegend ™

Участник
Сообщения
206
Реакции
133
Здравствуйте, дорогие форумчане.
Как на каждый нож добавить проверку по флагу?
C-подобный:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <multicolors>
#include <clientprefs>
#include <cstrike>
#include <fpvm_interface>

#pragma newdecls required // let's go new syntax!

int BitaModel,ifu;
int KnifeSelection[MAXPLAYERS+1];
Handle g_hMySelection;
Handle g_hMyFirstJoin;
int showMenu[MAXPLAYERS+1] = 1;

#define DATA "2.3.1"

Handle cvar_time, timers, trie_times, cvar_times;
int g_veces, g_time;

public Plugin myinfo =
{
    name = "Custom Knife Models",
    author = "Mr.Derp & Franc1sco franug",
    description = "Custom Knife Models",
    version = DATA,
    url = "http://steamcommunity.com/id/iLoveAnime69"
}

public void OnPluginStart()
{
    trie_times = CreateTrie();
    
    CreateConVar("sm_customknifemodels_version", DATA, "plugin info", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    
    cvar_time = CreateConVar("sm_customknifemodels_time", "30", "time in the round start that a normal client can use the !ck command. 0 = disabled.");
    cvar_times = CreateConVar("sm_customknifemodels_times", "3", "times in the map that a normal client can use the !ck command. 0 = disabled.");
    g_veces = GetConVarInt(cvar_times);
    g_time = GetConVarInt(cvar_time);
    HookConVarChange(cvar_time, OnConVarChanged);
    HookConVarChange(cvar_times, OnConVarChanged);
    
    HookEvent("player_spawn", Event_Spawn, EventHookMode_Post);
    HookEvent("round_start", Event_Start);
    RegAdminCmd("sm_ck", Cmd_sm_customknife, ADMFLAG_CUSTOM4, "Knife Menu");
    g_hMySelection = RegClientCookie("ck_selection", "Knife Selection", CookieAccess_Protected);
    g_hMyFirstJoin = RegClientCookie("ck_firstjoin", "Knife Menu Show", CookieAccess_Protected);
    
    for (int i = MaxClients; i > 0; --i)
    {
        if (!AreClientCookiesCached(i))
        {
            continue;
        }
        
        OnClientCookiesCached(i);
    }
}

public void OnConVarChanged(Handle convar, const char[] oldValue, const char[] newValue)
{
    if (convar == cvar_time)
    {
        g_time = StringToInt(newValue);
    }
    else if (convar == cvar_times)
    {
        g_veces = StringToInt(newValue);
    }
}

public void OnMapStart()
{
    ClearTrie(trie_times);
    
    BitaModel = PrecacheModel("models/weapons/eminem/adidas_baseball_bat.mdl");
    ifu = PrecacheModel("models/weapons/v_knife_tridagger_v2.mdl");

    //bita
    AddFileToDownloadsTable("materials/reydifox/adidasbat/adidasbat.vmt");
    AddFileToDownloadsTable("materials/reydifox/adidasbat/diffuse.vtf");
    AddFileToDownloadsTable("materials/reydifox/adidasbat/gloss.vtf");
    AddFileToDownloadsTable("materials/reydifox/adidasbat/normal.vtf");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat.dx90.vtx");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat.mdl");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat.vvd");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat_dropped.dx90.vtx");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat_dropped.mdl");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat_dropped.phy");
    AddFileToDownloadsTable("models/weapons/eminem/adidas_baseball_bat_dropped.vvd");
    
    //Tridagger
    AddFileToDownloadsTable("models/weapons/v_knife_tridagger_v2.dx90.vtx");
    AddFileToDownloadsTable("models/weapons/v_knife_tridagger_v2.mdl");
    AddFileToDownloadsTable("models/weapons/v_knife_tridagger_v2.vvd");
    AddFileToDownloadsTable("materials/models/weapons/v_models/tridagger/tridagger.vmt");
    AddFileToDownloadsTable("materials/models/weapons/v_models/tridagger/tridagger.vtf");
    AddFileToDownloadsTable("materials/models/weapons/v_models/tridagger/tridagger_exp.vtf");
    AddFileToDownloadsTable("materials/models/weapons/v_models/tridagger/tridagger_normal.vtf");
}

public Action Cmd_sm_customknife(int client, int args)
{
    if (client == 0)
    {
        ReplyToCommand(client, "%t", "Команда только в игре");
        return Plugin_Handled;
    }
    ShowKnifeMenu(client);
    return Plugin_Handled;
}

void ShowKnifeMenu(int client)
{
    Menu menu_knives = new Menu(mh_KnifeHandler);
    SetMenuTitle(menu_knives, "Выберите нож");

    AddMenuItem(menu_knives, "default", "Default Knife");
    AddMenuItem(menu_knives, "tridagger", "Бита");
    AddMenuItem(menu_knives, "ifu", "Tri-Dagger");
    AddMenuItem(menu_knives, "Elucidator", "Elucidator");
    SetMenuPagination(menu_knives, 0);
    //SetMenuExitButton(menu_knives, true);
    DisplayMenu(menu_knives, client, 0);
}

public int mh_KnifeHandler(Menu menu, MenuAction action, int param1, int param2)
{
    switch (action)
    {
        case MenuAction_Select:
        {
            //param1 is client, param2 is item
            if(GetUserAdmin(param1) == INVALID_ADMIN_ID)
            {
                if(g_time > 0 && timers == INVALID_HANDLE)
                {
                
                    CPrintToChat(param1, "[{GREEN}Кореш{DEFAULT}] Ты можешь переключать ножи только в течении %i секунд после начала раунда!", g_time);
                    return;
                }
            
                char steamid[64];
                int times;
                GetClientAuthId(param1, AuthId_Steam2,  steamid, sizeof(steamid));
            
                if(!GetTrieValue(trie_times, steamid, times))
                {
                    times = 0;
                }
                
                if(g_veces > 0 && times >= g_veces)
                {
                    CPrintToChat(param1, "[{GREEN}Кореш{DEFAULT}] Ты можешь выбрать ножи %i раз за карту!", g_veces);
                    return;
                }
                ++times;
    
                SetTrieValue(trie_times, steamid, times);
            }
            
            char item[64];
            GetMenuItem(menu, param2, item, sizeof(item));
            
            SetKnife(param1, item);
            
        }
        case MenuAction_End:
        {
            //param1 is MenuEnd reason, if canceled param2 is MenuCancel reason
            CloseHandle(menu);

        }

    }
}

void SetKnife(int param1, char[] item)
{
    char item2[16];
    if (StrEqual(item, "default"))
    {
        FPVMI_RemoveViewModelToClient(param1, "weapon_knife");
        KnifeSelection[param1] = 0;
        IntToString(KnifeSelection[param1], item2, sizeof(item2));
        SetClientCookie(param1, g_hMySelection, item2);
    }
    else if (StrEqual(item, "tridagger"))
    {
        KnifeSelection[param1] = 1;
        FPVMI_AddViewModelToClient(param1, "weapon_knife", BitaModel);
        IntToString(KnifeSelection[param1], item2, sizeof(item2));
        SetClientCookie(param1, g_hMySelection, item2);
    }
    else if (StrEqual(item, "ifu"))
    {
        KnifeSelection[param1] = 7;
        FPVMI_AddViewModelToClient(param1, "weapon_knife", ifu);
        IntToString(KnifeSelection[param1], item2, sizeof(item2));
        SetClientCookie(param1, g_hMySelection, item2);
    }
}



public void OnClientCookiesCached(int client)
{
    char sCookieValue[11];
    GetClientCookie(client, g_hMySelection, sCookieValue, sizeof(sCookieValue));
    KnifeSelection[client] = StringToInt(sCookieValue);
    char sCookieValue2[11];
    GetClientCookie(client, g_hMyFirstJoin, sCookieValue2, sizeof(sCookieValue2));
    showMenu[client] = StringToInt(sCookieValue2);
}

public void OnClientPostAdminCheck(int client)
{
    if(AreClientCookiesCached(client)) SetKnife_saved(client);
}

void SetKnife_saved(int param1)
{
    switch (KnifeSelection[param1])
    {
        case 1:
        {
            FPVMI_AddViewModelToClient(param1, "weapon_knife", BitaModel);
        }
        case 2:
        {
            FPVMI_AddViewModelToClient(param1, "weapon_knife", ifu);   
        }
        default:
        {
                    // Blah
        }
    }
}

public Action Event_Start(Event gEventHook, const char[] gEventName, bool iDontBroadcast)
{
    if(timers != INVALID_HANDLE) KillTimer(timers);
    timers = CreateTimer(GetConVarInt(cvar_time) * 1.0, Passed);
    
}

public Action Passed(Handle timer)
{
    timers = INVALID_HANDLE;
}

public Action Event_Spawn(Event gEventHook, const char[] gEventName, bool iDontBroadcast)
{
    int iClient = GetClientOfUserId(GetEventInt(gEventHook, "userid"));
    
    if (AreClientCookiesCached(iClient))
    {
        if (showMenu[iClient] == 0)
        {
            showMenu[iClient] = 1;
            ShowKnifeMenu(iClient);
            SetClientCookie(iClient, g_hMyFirstJoin, "1");
        }
    }
}

stock bool IsValidClient(int client, bool nobots = true)
{
    if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client)))
    {
        return false;
    }
    return IsClientInGame(client);
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
AddMenuItem(menu_knives, "tridagger", "Бита"); AddMenuItem(menu_knives, "ifu", "Tri-Dagger"); AddMenuItem(menu_knives, "Elucidator", "Elucidator");
PHP:
    AdminId admin = GetUserAdmin(client);
    if (GetAdminFlag(admin, Admin_Reservation)) AddMenuItem(menu_knives, "tridagger", "Бита");
    if (GetAdminFlag(admin, Admin_Generic)) AddMenuItem(menu_knives, "ifu", "Tri-Dagger");
    if (GetAdminFlag(admin, Admin_Kick)) AddMenuItem(menu_knives, "Elucidator", "Elucidator");
 

DarkLegend ™

Участник
Сообщения
206
Реакции
133
PHP:
    AdminId admin = GetUserAdmin(client);
    if (GetAdminFlag(admin, Admin_Reservation)) AddMenuItem(menu_knives, "tridagger", "Бита");
    if (GetAdminFlag(admin, Admin_Generic)) AddMenuItem(menu_knives, "ifu", "Tri-Dagger");
    if (GetAdminFlag(admin, Admin_Kick)) AddMenuItem(menu_knives, "Elucidator", "Elucidator");
Спасибо :)
--- Добавлено позже ---
PHP:
    AdminId admin = GetUserAdmin(client);
    if (GetAdminFlag(admin, Admin_Reservation)) AddMenuItem(menu_knives, "tridagger", "Бита");
    if (GetAdminFlag(admin, Admin_Generic)) AddMenuItem(menu_knives, "ifu", "Tri-Dagger");
    if (GetAdminFlag(admin, Admin_Kick)) AddMenuItem(menu_knives, "Elucidator", "Elucidator");
Есть такой косяк, что кто до данного фикса выбрал биту, у них она и осталась, а так как просто удалить базу clientprefs не комильфо, в который сохранялись выборы ножей. Можно ли сделать доп проверку?
--- Добавлено позже ---
PHP:
    AdminId admin = GetUserAdmin(client);
    if (GetAdminFlag(admin, Admin_Reservation)) AddMenuItem(menu_knives, "tridagger", "Бита");
    if (GetAdminFlag(admin, Admin_Generic)) AddMenuItem(menu_knives, "ifu", "Tri-Dagger");
    if (GetAdminFlag(admin, Admin_Kick)) AddMenuItem(menu_knives, "Elucidator", "Elucidator");
Добрый вечер. Подскажите пожалуйста, можно ли сделать один из пунктов чтобы выбирался автоматически для всех у кого нету флага Admin_Kick при входе на сервер?
 
Последнее редактирование:
Сверху Снизу