AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting (https://forums.alliedmods.net/forumdisplay.php?f=107)
-   -   !wp command once per round (https://forums.alliedmods.net/showthread.php?t=331240)

combocarte112 03-12-2021 02:28

!wp command once per round
 
Hi, I want to be able to use the !wp command once per round, can anyone help me?

Code:

#include <sdktools>
#include <vip_core>

public Plugin myinfo = {name = "VIP_WeaponPack | Комплект оружий", author = "Drumanid", version = "2.0 [ FINAL ? ]", url = "http://vk.com/drumanid | http://hlmod.ru"}

#pragma newdecls required
#pragma semicolon 1

int g_iRounds;
int g_iRound[MAXPLAYERS+1];

int g_iGrenadeOffsets[] = {15, 17, 16, 14, 18, 17};

#define VIP_WEAPONPACK        "Weaponpack"

ConVar c_RoundMenu;
ConVar c_RoundLimit;

Handle kv;
char MenuName[PLATFORM_MAX_PATH];

//======================================================================================================================================================================
// Регистрация
//======================================================================================================================================================================
public void OnPluginStart()
{
        RegConsoleCmd("wp", WeaponMenuCmd);

       
        HookEvent("round_start", RoundStart, EventHookMode_Pre);

        c_RoundMenu = CreateConVar("c_RoundMenu", "0", "1 - Включить / 0 - Выключить | Выводит менюшку в начале раунда для вип игроков");
        c_RoundLimit = CreateConVar("c_RoundLimit", "3", "0 - Можно использовать всегда | Cколько раундов запрещать вип игроку снова использовать WeaponPack");       
       
        if(VIP_IsVIPLoaded())
        {
                VIP_OnVIPLoaded();
        }
       
        kv = CreateKeyValues("WeaponPack");
        if(FileToKeyValues(kv, "addons/sourcemod/data/vip/modules/WeaponPack.ini"))
        {
               
        }
        else
        {
                PrintToServer("No found: addons/sourcemod/data/vip/modules/WeaponPack.ini");
                LogError("No found: addons/sourcemod/data/vip/modules/WeaponPack.ini");
        }
       
        AutoExecConfig(true, "VIP_WeaponPack", "vip");
}

//======================================================================================================================================================================
// Выдаем меню "Хотите ли" в начале каждого раунда вип игроку
//======================================================================================================================================================================
public Action RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
        if(GetConVarInt(c_RoundMenu) == 1)
        {
                for(int i = 1; i <= MaxClients; i++)
                {
                        if(IsClientInGame(i))
                        {
                                if(VIP_IsClientVIP(i) && VIP_IsClientFeatureUse(i, VIP_WEAPONPACK))
                                {
                                        RoundMenu(i);
                                }
                        }
                }
        }
}

public void RoundMenu(int client)
{
        char map[PLATFORM_MAX_PATH];
        GetCurrentMap(map, sizeof(map));
 
        if((strncmp(map, "35hp_", 5) == 0) || (strncmp(map, "awp_", 4) == 0))
        {
                return;
        }
        else
        {
                if(GameRules_GetProp("m_bWarmupPeriod") == 1)
                {
                        return;
                }
                else
                {
                        g_iRounds = GetRound();
                        if(g_iRounds < 2)
                        {
                                return;
                        }
                }
   
                if(IsPlayerAlive(client))
                {
                        if(g_iRound[client] > g_iRounds)
                        {
                                PrintToChat(client, " \x07Комплект оружия будет доступен через: \x04%i\x07 раунд(а)!", g_iRound[client] - g_iRounds);
                                return;
                        }
                        else
                        {
                                Panel hPanel = new Panel();
                                hPanel.SetTitle( "Хотите ли воспользоваться WeaponPack?\n \n");
                                hPanel.DrawItem("Да");
                                hPanel.DrawItem("Нет");

                                hPanel.Send(client, SelectMenu, 0);
                                delete hPanel;
                        }
                }
        }
}

public int SelectMenu(Menu hPanel, MenuAction action, int client, int option)
{
    if(action == MenuAction_Select && option == 1)
    {
        WeaponMenu(client);
    }
}

//======================================================================================================================================================================
// Обнуляем данные отыгранных раундов
//======================================================================================================================================================================
public void OnMapStart()
{
        g_iRounds = 0;
}

public void OnClientPostAdminCheck(int client)
{
        g_iRound[client] = 0;
}

//======================================================================================================================================================================
// Регистрируем модуль в вип системе
//======================================================================================================================================================================
public void VIP_OnVIPLoaded()
{
        VIP_RegisterFeature(VIP_WEAPONPACK, BOOL, SELECTABLE, OnSelectItem);
}

public bool OnSelectItem(int client, const char[] sFeatureName)
{
        WeaponMenu(client);
        return;
}

//======================================================================================================================================================================
// Проверка и выполнение команды !wp
//======================================================================================================================================================================
public Action WeaponMenuCmd(int client, int args)
{
        if(client > 0 && args < 1 && VIP_IsClientVIP(client) && VIP_IsClientFeatureUse(client, VIP_WEAPONPACK))
        {
                WeaponMenu(client);
        }
        return Plugin_Handled;
}

//======================================================================================================================================================================
// Сама менюшка
//======================================================================================================================================================================
public void WeaponMenu(int client)
{
        char map[PLATFORM_MAX_PATH];
        GetCurrentMap(map, sizeof(map));
 
        if((strncmp(map, "35hp_", 5) == 0) || (strncmp(map, "awp_", 4) == 0))
        {
                PrintToChat(client, " \x07You can't take a gun from menu on this map!");
                ClientCommand(client,"play buttons/weapon_cant_buy.wav");
                return;
        }
        else
        {
                if(GameRules_GetProp("m_bWarmupPeriod") == 1)
                {
                        PrintToChat(client, " \x07You can't take a pistol from menu in warmup time!");
                        ClientCommand(client,"play buttons/weapon_cant_buy.wav");
                        return;
                }
                else
                {
                        g_iRounds = GetRound();
                        if(g_iRounds < 2)
                        {
                                PrintToChat(client, " \x07You can't take weapons from menu in the first round");
                                ClientCommand(client,"play buttons/weapon_cant_buy.wav");
                                return;
                        }
                }
   
                if(IsPlayerAlive(client))
                {
                        if(g_iRound[client] > g_iRounds)
                        {
                       
                                ClientCommand(client,"play buttons/weapon_cant_buy.wav");
                                return;
                        }
                        else
                        {
                                Handle menu = CreateMenu(SelectWeapon);
                                SetMenuTitle(menu, "Gun Menu ^_^");
                               
                                KvRewind(kv);
                                if(KvGotoFirstSubKey(kv))
                                {
                                        do
                                        {
                                                if(KvGetSectionName(kv, MenuName, sizeof(MenuName)))
                                                {
                                                        if(GetClientTeam(client) == KvGetNum(kv, "Team", 0) || KvGetNum(kv, "Team", 0) == 0)
                                                        {
                                                                AddMenuItem(menu, MenuName, MenuName);
                                                        }
                                                }
                                        }
                                        while(KvGotoNextKey(kv));
                                }
                                SetMenuExitButton(menu, true);
                                DisplayMenu(menu, client, 0);
                        }
                }
                else
                {
                        PrintToChat(client, " \x07You have to be alive to take gun from menu!");
                        ClientCommand(client,"play buttons/weapon_cant_buy.wav");
                }
        }
}

//======================================================================================================================================================================
// Выполняем пункты в меню
//======================================================================================================================================================================
public int SelectWeapon(Handle menu, MenuAction action, int client, int option)
{
        switch(action)
        {
                case MenuAction_End:
                {
                        CloseHandle(menu);
                }
                case MenuAction_Select:
                {
                        GetMenuItem(menu, option, MenuName, sizeof(MenuName));

                        KvRewind(kv);
                        if(KvJumpToKey(kv, MenuName, false))
                        {
                                char sBuffer[64];
                                if(KvGotoFirstSubKey(kv, false))
                                {
                                        WeaponDelete(client);
                                       
                                        g_iRound[client] = g_iRounds + GetConVarInt(c_RoundLimit);
                                        do
                                        {
                                                KvGetSectionName(kv, sBuffer, sizeof(sBuffer));
                                                if(!StrEqual(sBuffer, "weapon"))
                                                {
                                                        continue;
                                                }
                                                KvGetString(kv, NULL_STRING, sBuffer, sizeof(sBuffer));
                                                GivePlayerItem(client, sBuffer);
                                        }
                                        while(KvGotoNextKey(kv, false));
                                }
                        }
                }
        }
}

//======================================================================================================================================================================
// Удаляем и выдаем оружие...
//======================================================================================================================================================================
public void WeaponDelete(int client)
{
        for (int i = 0; i < 4; ++i)
        {
                if (i == 3)
                {
                        RemoveNades(client);
                }
                else
                {
                        RemoveWeaponBySlot(client, i);
                }
        }
}

stock void RemoveNades(int client)
{
        while (RemoveWeaponBySlot(client, 3))
        {
                for (int i = 0; i < 6; i++)
                {
                        SetEntProp(client, Prop_Send, "m_iAmmo", 0, _, g_iGrenadeOffsets[i]);
                }
        }
}

stock bool RemoveWeaponBySlot(int client, int slot)
{
        int entity = GetPlayerWeaponSlot(client, slot);
        if(IsValidEdict(entity))
        {
                RemovePlayerItem(client, entity);
                AcceptEntityInput(entity, "Kill");
                return true;
        }
       
        return false;
}

//======================================================================================================================================================================
// Проверяем раунды
//======================================================================================================================================================================
stock int GetRound()
{
        static ConVar mp_halftime, mp_maxrounds;
        if(!mp_halftime)
        {
                mp_halftime = FindConVar("mp_halftime");
                mp_maxrounds = FindConVar("mp_maxrounds");
        }
               
        int total_score = GetTeamScore(2) + GetTeamScore(3) + 1;
        if (mp_halftime.IntValue == 1)
        {
                int halftimer = mp_maxrounds.IntValue/2;
                if(halftimer < total_score) return total_score - mp_maxrounds.IntValue/2;
        }
        return total_score;
}

//======================================================================================================================================================================
// Выгружаем модуль
//======================================================================================================================================================================
public void OnPluginEnd()
{
        if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_WEAPONPACK") == FeatureStatus_Available)
    {
                VIP_UnregisterFeature(VIP_WEAPONPACK);
        }
}


bklol 03-12-2021 03:58

Re: !wp command once per round
 
each player once per round or just once per round?

combocarte112 03-13-2021 08:47

Re: !wp command once per round
 
Quote:

Originally Posted by bklol (Post 2740151)
each player once per round or just once per round?

each player once per round

stephen473 03-21-2021 09:58

Re: !wp command once per round
 
create a global bool for maxplayers then set it true or false on command action

PHP Code:

bool g_bUsed[MAXPLAYERS+1



All times are GMT -4. The time now is 05:19.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.