AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   CSO Costumes change currency (https://forums.alliedmods.net/showthread.php?t=327960)

nades 10-18-2020 16:25

CSO Costumes change currency
 
Code:

#include <amxmodx>
#include <amxmisc>
#include <cs_player_models_api>
#include <hamsandwich>
#include <fakemeta>
#include <nvault>
#include <sqlx>

#define PLUGIN "CSO Costumes"
#define VERSION "3.8"
#define AUTHOR "Smilex_Gamer"

//#define ZP_SUPPORT

#if defined ZP_SUPPORT
        #include <zombieplague>
#endif

#if !defined client_disconnected
        #define client_disconnected client_disconnect
#endif

#define PREFIX_CHAT "!g[CSO Costumes]!n"
#define PREFIX_MENU "\r[CSO Costumes]"

#define MAX_COSTUMES 257

#if defined ZP_SUPPORT
        new Total_Skin = 1
#else
        new Total_SkinCT = 1, Total_SkinTR = 1
#endif

new File[64], Total_Head = 1, Total_Back = 1, Total_Pelvis = 1
new Handle:g_SqlTuple, g_Error[512], g_Vault, g_szAuthID[33][35]

enum _:Configuration
{
        Cash_per_Kill,
        Saving_Method,
        Host[128],
        User[128],
        Pass[128],
        Db[128],
        Table[128],
        Vault[128],
        ZP43_Support
}

enum _:Vars
{
        g_name[128],
        g_price,
        g_model[128],
        g_anim,
        g_preview[128]
}

enum _:Vars2
{
#if defined ZP_SUPPORT
        g_skin,
        g_acquiredSkin[MAX_COSTUMES],
#else
        g_skinct,
        g_skintr,
        g_acquiredSkinCT[MAX_COSTUMES],
        g_acquiredSkinTR[MAX_COSTUMES],
#endif
        g_head,
        g_back,
        g_pelvis,
        g_cash,
        g_buying,
        g_costume,
        g_CostumeModelHead,
        g_CostumeModelBack,
        g_CostumeModelPelvis,
        g_acquiredHead[MAX_COSTUMES],
        g_acquiredBack[MAX_COSTUMES],
        g_acquiredPelvis[MAX_COSTUMES],
        bool:is_connected,
        bool:is_bot_or_hltv
}

#if defined ZP_SUPPORT
        new Costumes_Skin[MAX_COSTUMES][Vars]
#else
        new Costumes_SkinCT[MAX_COSTUMES][Vars], Costumes_SkinTR[MAX_COSTUMES][Vars]
#endif

new Costumes_Head[MAX_COSTUMES][Vars], Costumes_Back[MAX_COSTUMES][Vars], Costumes_Pelvis[MAX_COSTUMES][Vars], g_vars[33][Vars2], g_settings[Configuration]

#if defined ZP_SUPPORT
        const y = 1; const z = 3
#else
        const y = 2; const z = 4
#endif

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_cvar("CSOCostumes", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)

        register_dictionary("cso_costumes.txt")

        RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
        register_event("DeathMsg", "Event_DeathMsg", "a")

        register_clcmd("say /costumes", "clcmd_costumes")
        register_clcmd("say_team /costumes", "clcmd_costumes")
        register_clcmd("say /inventory", "clcmd_inventory")
        register_clcmd("say_team /inventory", "clcmd_inventory")
        register_clcmd("say /shop", "clcmd_shop")
        register_clcmd("say_team /shop", "clcmd_shop")
        register_clcmd("say /deactivate", "clcmd_deactivate")
        register_clcmd("say_team /deactivate", "clcmd_deactivate")
        register_clcmd("say /cash", "clcmd_cash")
        register_clcmd("say_team /cash", "clcmd_cash")
        register_concmd("costumes_give_cash", "Cmd_GiveCash", ADMIN_RCON, "<nick|#userid> <amount>")

        if(g_settings[Saving_Method] != 0)
        {
                register_event("TextMsg", "Save_Data", "a", "2=#Game_Commencing", "2=#Game_will_restart_in")
                register_event("SendAudio", "Save_Data", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw")
                register_forward(FM_Sys_Error, "Save_Data")
                register_forward(FM_GameShutdown, "Save_Data")
                register_forward(FM_ServerDeactivate, "Save_Data")

                switch(g_settings[Saving_Method])
                {
                        case 1: Nvault_Init()
                        case 2: MySql_Init()
                }
        }
}

public plugin_precache()
{
        new cfgDir[32]
        get_configsdir(cfgDir, charsmax(cfgDir))
        formatex(File, charsmax(File), "%s/costumes.ini", cfgDir)

        Load_Configuration(0)
        Load_Costumes()

#if defined ZP_SUPPORT
        for(new i = 1; i < Total_Skin; i++)
        {
                precache_player_model(Costumes_Skin[i][g_model])
        }
#else
        for(new i = 1; i < Total_SkinCT; i++)
        {
                precache_player_model(Costumes_SkinCT[i][g_model])
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                precache_player_model(Costumes_SkinTR[i][g_model])
        }
#endif

        for(new i = 1; i < Total_Head; i++)
        {
                precache_model(Costumes_Head[i][g_model])
        }

        for(new i = 1; i < Total_Back; i++)
        {
                precache_model(Costumes_Back[i][g_model])
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                precache_model(Costumes_Pelvis[i][g_model])
        }
}

public plugin_end()
{
        switch(g_settings[Saving_Method])
        {
                case 1: nvault_close(g_Vault)
                case 2: SQL_FreeHandle(g_SqlTuple)
        }
}

Load_Configuration(MySQL_to_Nvault)
{
        if(file_exists(File))
        {
                new sfLineData[256]
                new file = fopen(File, "rt")

                while(file && !feof(file))
                {
                        fgets(file, sfLineData, charsmax(sfLineData))

                        if(sfLineData[0] == ';' || strlen(sfLineData) <= 2 || (sfLineData[0] == '/' && sfLineData[1] == '/'))
                        {
                                continue
                        }

                        new Config[32], Value[128]
                        parse(sfLineData, Config, charsmax(Config), Value, charsmax(Value))
                        new value = str_to_num(Value)

                        if(MySQL_to_Nvault)
                        {
                                if(equal(Config, "VAULT"))
                                {
                                        if(!Value[0])
                                        {
                                                server_print("[CSO Costumes] No Vault name was defined! Continuing with the default setting: ^"cso_costumes^".")
                                                copy(g_settings[Vault], charsmax(g_settings[Vault]), "cso_costumes")
                                        }
                                        else
                                        {
                                                copy(g_settings[Vault], charsmax(g_settings[Vault]), Value)
                                        }

                                        Nvault_Init()
                                        break
                                }
                                else
                                {
                                        continue
                                }
                        }

                        if(equal(Config, "CASH_PER_KILL"))
                        {
                                if(value <= 0)
                                {
                                        server_print("[CSO Costumes] Cash per kill is less than or equal to 0! Continuing with the default setting: 5.")
                                        g_settings[Cash_per_Kill] = 5
                                }
                                else
                                {
                                        g_settings[Cash_per_Kill] = value
                                }

                                continue
                        }
                        else if(equal(Config, "SAVING_METHOD"))
                        {
                                switch(value)
                                {
                                        case 0..2: g_settings[Saving_Method] = value
                                        default:
                                        {
                                                server_print("[CSO Costumes] No valid saving system was defined! Continuing without saving system.")
                                                g_settings[Saving_Method] = 0
                                        }
                                }

                                continue
                        }
                        else if(equal(Config, "ZP43_SUPPORT"))
                        {
                        #if defined ZP_SUPPORT
                                switch(value)
                                {
                                        case 0,1: g_settings[ZP43_Support] = value
                                        default:
                                        {
                                                server_print("[CSO Costumes] No valid input was defined! Continuing without Zombie Plague 4.3 Support.")
                                                g_settings[ZP43_Support] = 0
                                        }
                                }
                        #else
                                if(value >= 1)
                                {
                                        server_print("[CSO Costumes] You need to edit the source code and uncomment ^"#define ZP_SUPPORT^" in order to support Zombie Plague 4.3 (line 13).")
                                }
                        #endif

                                continue
                        }

                        switch(g_settings[Saving_Method])
                        {
                                case 0: break
                                case 1:
                                {
                                        if(equal(Config, "VAULT"))
                                        {
                                                if(!Value[0])
                                                {
                                                        server_print("[CSO Costumes] No Vault name was defined! Continuing with the default setting: ^"cso_costumes^".")
                                                        copy(g_settings[Vault], charsmax(g_settings[Vault]), "cso_costumes")
                                                }
                                                else
                                                {
                                                        copy(g_settings[Vault], charsmax(g_settings[Vault]), Value)
                                                }

                                                break
                                        }
                                }
                                case 2:
                                {
                                        if(equal(Config, "HOST"))
                                        {
                                                if(!Value[0])
                                                {
                                                        server_print("[CSO Costumes] No Hostname was defined! Continuing with Nvault saving system.")
                                                        g_settings[Saving_Method] = 1
                                                }
                                                else
                                                {
                                                        copy(g_settings[Host], charsmax(g_settings[Host]), Value)
                                                }
                                        }
                                        else if(equal(Config, "USER"))
                                        {
                                                if(!Value[0])
                                                {
                                                        server_print("[CSO Costumes] No Username was defined! Continuing with Nvault saving system.")
                                                        g_settings[Saving_Method] = 1
                                                }
                                                else
                                                {
                                                        copy(g_settings[User], charsmax(g_settings[User]), Value)
                                                }
                                        }
                                        else if(equal(Config, "PASSWORD"))
                                        {
                                                copy(g_settings[Pass], charsmax(g_settings[Pass]), Value)
                                        }
                                        else if(equal(Config, "DATABASE"))
                                        {
                                                if(!Value[0])
                                                {
                                                        server_print("[CSO Costumes] No Database name was defined! Continuing with Nvault saving system.")
                                                        g_settings[Saving_Method] = 1
                                                }
                                                else
                                                {
                                                        copy(g_settings[Db], charsmax(g_settings[Db]), Value)
                                                }
                                        }
                                        else if(equal(Config, "TABLE"))
                                        {
                                                if(!Value[0])
                                                {
                                                        server_print("[CSO Costumes] No Table name was defined! Continuing with the default setting: ^"cso_costumes^".")
                                                        copy(g_settings[Table], charsmax(g_settings[Table]), "cso_costumes")
                                                }
                                                else
                                                {
                                                        copy(g_settings[Table], charsmax(g_settings[Table]), Value)
                                                }

                                                break
                                        }
                                }
                        }
                }

                if(file && !MySQL_to_Nvault)
                {
                        server_print("[CSO Costumes] Configuration loaded")
                        fclose(file)
                }
        }
        else
        {
                set_fail_state("File ^"costumes.ini^" is missing! Plugin stopped.")
        }
}

Load_Costumes()
{
        if(file_exists(File))
        {
                new sfLineData[256], TotalCostumes = 0
                new file = fopen(File, "rt")

                while(file && !feof(file))
                {
                        fgets(file, sfLineData, charsmax(sfLineData))

                        if(sfLineData[0] != '"')
                        {
                                continue
                        }

                        new Costume[10], CostumeName[128], CostumePrice[10], CostumeModel[128], CostumeAnim[10], CostumePreview[128]
                        parse(sfLineData, Costume, charsmax(Costume), CostumeName, charsmax(CostumeName), CostumePrice, charsmax(CostumePrice), CostumeModel, charsmax(CostumeModel), CostumeAnim, charsmax(CostumeAnim), CostumePreview, charsmax(CostumePreview))

                #if defined ZP_SUPPORT
                        if(equal(Costume, "SkinCT") || equal(Costume, "SkinTR"))
                        {
                                copy(Costumes_Skin[Total_Skin][g_name], charsmax(Costumes_Skin[][g_name]), CostumeName)
                                Costumes_Skin[Total_Skin][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_Skin[Total_Skin][g_model], charsmax(Costumes_Skin[][g_model]), CostumeModel)
                                copy(Costumes_Skin[Total_Skin][g_preview], charsmax(Costumes_Skin[][g_model]), CostumePreview)

                                Total_Skin += 1
                                TotalCostumes += 1
                        }
                #else
                        if(equal(Costume, "SkinCT"))
                        {
                                copy(Costumes_SkinCT[Total_SkinCT][g_name], charsmax(Costumes_SkinCT[][g_name]), CostumeName)
                                Costumes_SkinCT[Total_SkinCT][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_SkinCT[Total_SkinCT][g_model], charsmax(Costumes_SkinCT[][g_model]), CostumeModel)
                                copy(Costumes_SkinCT[Total_SkinCT][g_preview], charsmax(Costumes_SkinCT[][g_preview]), CostumePreview)

                                Total_SkinCT += 1
                                TotalCostumes += 1
                        }
                        else if(equal(Costume, "SkinTR"))
                        {
                                copy(Costumes_SkinTR[Total_SkinTR][g_name], charsmax(Costumes_SkinTR[][g_name]), CostumeName)
                                Costumes_SkinTR[Total_SkinTR][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_SkinTR[Total_SkinTR][g_model], charsmax(Costumes_SkinTR[][g_model]), CostumeModel)
                                copy(Costumes_SkinTR[Total_SkinTR][g_preview], charsmax(Costumes_SkinTR[][g_preview]), CostumePreview)

                                Total_SkinTR += 1
                                TotalCostumes += 1
                        }
                #endif
                        else if(equal(Costume, "Head"))
                        {
                                copy(Costumes_Head[Total_Head][g_name], charsmax(Costumes_Head[][g_name]), CostumeName)
                                Costumes_Head[Total_Head][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_Head[Total_Head][g_model], charsmax(Costumes_Head[][g_model]), CostumeModel)
                                Costumes_Head[Total_Head][g_anim] = str_to_num(CostumeAnim)
                                copy(Costumes_Head[Total_Head][g_preview], charsmax(Costumes_Head[][g_preview]), CostumePreview)

                                Total_Head += 1
                                TotalCostumes += 1
                        }
                        else if(equal(Costume, "Back"))
                        {
                                copy(Costumes_Back[Total_Back][g_name], charsmax(Costumes_Back[][g_name]), CostumeName)
                                Costumes_Back[Total_Back][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_Back[Total_Back][g_model], charsmax(Costumes_Back[][g_model]), CostumeModel)
                                Costumes_Back[Total_Back][g_anim] = str_to_num(CostumeAnim)
                                copy(Costumes_Back[Total_Back][g_preview], charsmax(Costumes_Back[][g_preview]), CostumePreview)

                                Total_Back += 1
                                TotalCostumes += 1
                        }
                        else if(equal(Costume, "Pelvis"))
                        {
                                copy(Costumes_Pelvis[Total_Pelvis][g_name], charsmax(Costumes_Pelvis[][g_name]), CostumeName)
                                Costumes_Pelvis[Total_Pelvis][g_price] = str_to_num(CostumePrice)
                                copy(Costumes_Pelvis[Total_Pelvis][g_model], charsmax(Costumes_Pelvis[][g_model]), CostumeModel)
                                Costumes_Pelvis[Total_Pelvis][g_anim] = str_to_num(CostumeAnim)
                                copy(Costumes_Pelvis[Total_Pelvis][g_preview], charsmax(Costumes_Pelvis[][g_preview]), CostumePreview)

                                Total_Pelvis += 1
                                TotalCostumes += 1
                        }

                        if(TotalCostumes >= MAX_COSTUMES-1)
                        {
                                server_print("[CSO Costumes] Costumes limit reached [%d]", MAX_COSTUMES-1)
                                break
                        }
                }

                if(file)
                {
                        server_print("[CSO Costumes] %d Costumes loaded", TotalCostumes)
                        fclose(file)
                }
        }
}

#if defined ZP_SUPPORT
public zp_user_infected_post(id)
{
        if(!g_vars[id][is_connected] || g_vars[id][is_bot_or_hltv])
        {
                return
        }

        if(g_settings[ZP43_Support])
        {
                cs_reset_player_model(id)
        }

        reset_costume(id, 1)
        reset_costume(id, 2)
        reset_costume(id, 3)
}

public zp_user_humanized_post(id, survivor)
{
        if(!g_vars[id][is_connected] || g_vars[id][is_bot_or_hltv])
        {
                return
        }

        if(survivor)
        {
                if(g_settings[ZP43_Support])
                {
                        cs_reset_player_model(id)
                }

                reset_costume(id, 1)
                reset_costume(id, 2)
                reset_costume(id, 3)
        }
        else
        {
                checkCostumes(id, 0)
                checkCostumes(id, 1)
                checkCostumes(id, 2)
                checkCostumes(id, 3)
        }
}

public ZP43_checkCostumes(id)
{
        checkCostumes(id, 0)
        checkCostumes(id, 1)
        checkCostumes(id, 2)
        checkCostumes(id, 3)
}
#endif

public Nvault_Init()
{
        g_Vault = nvault_open(g_settings[Vault])

        if(g_Vault == INVALID_HANDLE)
        {
                g_settings[Saving_Method] = 0
                server_print("[CSO Costumes] Failed to use Nvault saving system! Continuing without saving system.")
                nvault_close(g_Vault)
        }
}

public Load_Nvault(id)
{
        new szCash[64]; formatex(szCash, charsmax(szCash), "%sCash", g_szAuthID[id])

        g_vars[id][g_cash] = nvault_get(g_Vault, szCash)

#if defined ZP_SUPPORT
        new szSkin[64]; formatex(szSkin, charsmax(szSkin), "%sSkin", g_szAuthID[id])

        g_vars[id][g_skin] = nvault_get(g_Vault, szSkin)

        if(g_vars[id][g_skin] >= Total_Skin)
        {
                g_vars[id][g_skin] = 0
        }

        for(new i = 1; i < Total_Skin; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkin%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredSkin][i] = nvault_get(g_Vault, szKey)
        }
#else
        new szSkinCT[64]; formatex(szSkinCT, charsmax(szSkinCT), "%sSkinCT", g_szAuthID[id])
        new szSkinTR[64]; formatex(szSkinTR, charsmax(szSkinTR), "%sSkinTR", g_szAuthID[id])

        g_vars[id][g_skinct] = nvault_get(g_Vault, szSkinCT)
        g_vars[id][g_skintr] = nvault_get(g_Vault, szSkinTR)

        if(g_vars[id][g_skinct] >= Total_SkinCT)
        {
                g_vars[id][g_skinct] = 0
        }

        if(g_vars[id][g_skintr] >= Total_SkinTR)
        {
                g_vars[id][g_skintr] = 0
        }

        for(new i = 1; i < Total_SkinCT; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinCT%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredSkinCT][i] = nvault_get(g_Vault, szKey)
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinTR%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredSkinTR][i] = nvault_get(g_Vault, szKey)
        }
#endif

        new szHead[64]; formatex(szHead, charsmax(szHead), "%sHead", g_szAuthID[id])
        new szBack[64]; formatex(szBack, charsmax(szBack), "%sBack", g_szAuthID[id])
        new szPelvis[64]; formatex(szPelvis, charsmax(szPelvis), "%sPelvis", g_szAuthID[id])

        g_vars[id][g_head] = nvault_get(g_Vault, szHead)
        g_vars[id][g_back] = nvault_get(g_Vault, szBack)
        g_vars[id][g_pelvis] = nvault_get(g_Vault, szPelvis)

        if(g_vars[id][g_head] >= Total_Head)
        {
                g_vars[id][g_head] = 0
        }

        if(g_vars[id][g_back] >= Total_Back)
        {
                g_vars[id][g_back] = 0
        }

        if(g_vars[id][g_pelvis] >= Total_Pelvis)
        {
                g_vars[id][g_pelvis] = 0
        }

        for(new i = 1; i < Total_Head; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sHead%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredHead][i] = nvault_get(g_Vault, szKey)
        }

        for(new i = 1; i < Total_Back; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sBack%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredBack][i] = nvault_get(g_Vault, szKey)
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sPelvis%d", g_szAuthID[id], i)
                g_vars[id][g_acquiredPelvis][i] = nvault_get(g_Vault, szKey)
        }
}

public Save_Nvault(id)
{
        new szCash[64]; formatex(szCash, charsmax(szCash), "%sCash", g_szAuthID[id])
        new szCash1[11]; num_to_str(g_vars[id][g_cash], szCash1, charsmax(szCash1))

        nvault_pset(g_Vault, szCash, szCash1)

#if defined ZP_SUPPORT
        new szSkin[64]; formatex(szSkin, charsmax(szSkin), "%sSkin", g_szAuthID[id])
        new szSkin1[11]; num_to_str(g_vars[id][g_skin], szSkin1, charsmax(szSkin1))

        nvault_pset(g_Vault, szSkin, szSkin1)

        for(new i = 1; i < Total_Skin; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkin%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkin][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }
#else
        new szSkinCT[64]; formatex(szSkinCT, charsmax(szSkinCT), "%sSkinCT", g_szAuthID[id])
        new szSkinCT1[11]; num_to_str(g_vars[id][g_skinct], szSkinCT1, charsmax(szSkinCT1))

        new szSkinTR[64]; formatex(szSkinTR, charsmax(szSkinTR), "%sSkinTR", g_szAuthID[id])
        new szSkinTR1[11]; num_to_str(g_vars[id][g_skintr], szSkinTR1, charsmax(szSkinTR1))

        nvault_pset(g_Vault, szSkinCT, szSkinCT1)
        nvault_pset(g_Vault, szSkinTR, szSkinTR1)

        for(new i = 1; i < Total_SkinCT; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinCT%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkinCT][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sSkinTR%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredSkinTR][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }
#endif

        new szHead[64]; formatex(szHead, charsmax(szHead), "%sHead", g_szAuthID[id])
        new szHead1[11]; num_to_str(g_vars[id][g_head], szHead1, charsmax(szHead1))

        new szBack[64]; formatex(szBack, charsmax(szBack), "%sBack", g_szAuthID[id])
        new szBack1[11]; num_to_str(g_vars[id][g_back], szBack1, charsmax(szBack1))

        new szPelvis[64]; formatex(szPelvis, charsmax(szPelvis), "%sPelvis", g_szAuthID[id])
        new szPelvis1[11]; num_to_str(g_vars[id][g_pelvis], szPelvis1, charsmax(szPelvis1))

        nvault_pset(g_Vault, szHead, szHead1)
        nvault_pset(g_Vault, szBack, szBack1)
        nvault_pset(g_Vault, szPelvis, szPelvis1)

        for(new i = 1; i < Total_Head; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sHead%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredHead][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }

        for(new i = 1; i < Total_Back; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sBack%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredBack][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                new szKey[64]; formatex(szKey, charsmax(szKey), "%sPelvis%d", g_szAuthID[id], i)
                new szKey2[2]; num_to_str(g_vars[id][g_acquiredPelvis][i], szKey2, charsmax(szKey2))
                nvault_pset(g_Vault, szKey, szKey2)
        }
}

public MySql_Init()
{
        g_SqlTuple = SQL_MakeDbTuple(g_settings[Host], g_settings[User], g_settings[Pass], g_settings[Db])

        new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode, g_Error, charsmax(g_Error))
        if(SqlConnection == Empty_Handle)
        {
                log_amx(g_Error)
                g_settings[Saving_Method] = 1
                server_print("[CSO Costumes] Failed to use MySQL saving system! Continuing with Nvault saving system.")
                SQL_FreeHandle(g_SqlTuple)
                Load_Configuration(1)
                return
        }

        static len; len = 0
        static szTemp[8192]

#if defined ZP_SUPPORT
        len += formatex(szTemp[len], charsmax(szTemp), "CREATE TABLE IF NOT EXISTS `%s` (\
        `Id` INT(11) AUTO_INCREMENT PRIMARY KEY, `SteamID` varchar(35), `Cash` INT(11),\
        `Skin` INT(11), `Head` INT(11), `Back` INT(11), `Pelvis` INT(11)", g_settings[Table])

        for(new i = 1; i < Total_Skin; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Skin%d` INT(1)", i)
        }
#else
        len += formatex(szTemp[len], charsmax(szTemp), "CREATE TABLE IF NOT EXISTS `%s` (\
        `Id` INT(11) AUTO_INCREMENT PRIMARY KEY, `SteamID` varchar(35), `Cash` INT(11),\
        `SkinCT` INT(11), `SkinTR` INT(11), `Head` INT(11), `Back` INT(11), `Pelvis` INT(11)", g_settings[Table])

        for(new i = 1; i < Total_SkinCT; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`SkinCT%d` INT(1)", i)
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`SkinTR%d` INT(1)", i)
        }
#endif

        for(new i = 1; i < Total_Head; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Head%d` INT(1)", i)
        }

        for(new i = 1; i < Total_Back; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Back%d` INT(1)", i)
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Pelvis%d` INT(1)", i)
        }

        len += formatex(szTemp[len], charsmax(szTemp), ")")

        new Handle:Queries
        Queries = SQL_PrepareQuery(SqlConnection, szTemp)

        if(!SQL_Execute(Queries))
        {
                SQL_QueryError(Queries, g_Error, charsmax(g_Error))
                log_amx(g_Error)
                g_settings[Saving_Method] = 1
                server_print("[CSO Costumes] Failed to use MySQL saving system! Continuing with Nvault saving system.")
                SQL_FreeHandle(g_SqlTuple)
                Load_Configuration(1)
                return
        }

        SQL_FreeHandle(Queries)
        SQL_FreeHandle(SqlConnection)

        MySql_Init2()
}

public MySql_Init2()
{
        new szTemp[128], Data[1]; Data[0] = 1

        formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s`", g_settings[Table])
        SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)
}

public Load_MySql(id)
{
        new szTemp[256], Data[1]; Data[0] = id

        formatex(szTemp, charsmax(szTemp), "SELECT * FROM `%s` WHERE (`%s`.`SteamID` = '%s')", g_settings[Table], g_settings[Table], g_szAuthID[id])
        SQL_ThreadQuery(g_SqlTuple, "register_client", szTemp, Data, 1)
}

public register_client(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
        switch(FailState)
        {
                case TQUERY_CONNECT_FAILED: log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
                case TQUERY_QUERY_FAILED: log_amx("Load - Query failed. [%d] %s", Errcode, Error)
        }

        new id; id = Data[0]

        if(SQL_NumResults(Query) < 1)
        {
                if(equal(g_szAuthID[id], "ID_PENDING"))
                {
                        return
                }

                static len; len = 0
                new szTemp[128], Data[1]; Data[0] = 0

                len += formatex(szTemp[len], charsmax(szTemp), "INSERT INTO `%s` (`SteamID`) VALUES ('%s')", g_settings[Table], g_szAuthID[id])

                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)

                Save_MySql(id)
        }
        else
        {
                new query; query = 2

                g_vars[id][g_cash] = SQL_ReadResult(Query, query); query++

        #if defined ZP_SUPPORT
                g_vars[id][g_skin] = SQL_ReadResult(Query, query); query++

                if(g_vars[id][g_skin] >= Total_Skin)
                {
                        g_vars[id][g_skin] = 0
                }

                for(new i = 1; i < Total_Skin; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Skin%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredSkin][i] = SQL_ReadResult(Query, num)
                }
        #else
                g_vars[id][g_skinct] = SQL_ReadResult(Query, query); query++
                g_vars[id][g_skintr] = SQL_ReadResult(Query, query); query++

                if(g_vars[id][g_skinct] >= Total_SkinCT)
                {
                        g_vars[id][g_skinct] = 0
                }

                if(g_vars[id][g_skintr] >= Total_SkinTR)
                {
                        g_vars[id][g_skintr] = 0
                }

                for(new i = 1; i < Total_SkinCT; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "SkinCT%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredSkinCT][i] = SQL_ReadResult(Query, num)
                }

                for(new i = 1; i < Total_SkinTR; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "SkinTR%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredSkinTR][i] = SQL_ReadResult(Query, num)
                }
        #endif

                g_vars[id][g_head] = SQL_ReadResult(Query, query); query++
                g_vars[id][g_back] = SQL_ReadResult(Query, query); query++
                g_vars[id][g_pelvis] = SQL_ReadResult(Query, query); query++

                if(g_vars[id][g_head] >= Total_Head)
                {
                        g_vars[id][g_head] = 0
                }

                if(g_vars[id][g_back] >= Total_Back)
                {
                        g_vars[id][g_back] = 0
                }

                if(g_vars[id][g_pelvis] >= Total_Pelvis)
                {
                        g_vars[id][g_pelvis] = 0
                }

                for(new i = 1; i < Total_Head; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Head%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredHead][i] = SQL_ReadResult(Query, num)
                }

                for(new i = 1; i < Total_Back; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Back%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredBack][i] = SQL_ReadResult(Query, num)
                }

                for(new i = 1; i < Total_Pelvis; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Pelvis%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        g_vars[id][g_acquiredPelvis][i] = SQL_ReadResult(Query, num)
                }
        }
}

public Save_MySql(id)
{
        static szTemp[8192]
        new Data[1]; Data[0] = 0
        static len; len = 0

#if defined ZP_SUPPORT
        len += formatex(szTemp[len], charsmax(szTemp), "UPDATE `%s` SET `Cash` = '%i', `Skin` = '%i', `Head` = '%i',\
        `Back` = '%i', `Pelvis` = '%i'", g_settings[Table], g_vars[id][g_cash], g_vars[id][g_skin], g_vars[id][g_head], g_vars[id][g_back], g_vars[id][g_pelvis])

        for(new i = 1; i < Total_Skin; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Skin%d` = '%i'", i, g_vars[id][g_acquiredSkin][i])
        }
#else
        len += formatex(szTemp[len], charsmax(szTemp), "UPDATE `%s` SET `Cash` = '%i', `SkinCT` = '%i', `SkinTR` = '%i', `Head` = '%i', `Back` = '%i',\
        `Pelvis` = '%i'", g_settings[Table], g_vars[id][g_cash], g_vars[id][g_skinct], g_vars[id][g_skintr], g_vars[id][g_head], g_vars[id][g_back], g_vars[id][g_pelvis])

        for(new i = 1; i < Total_SkinCT; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`SkinCT%d` = '%i'", i, g_vars[id][g_acquiredSkinCT][i])
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`SkinTR%d` = '%i'", i, g_vars[id][g_acquiredSkinTR][i])
        }
#endif

        for(new i = 1; i < Total_Head; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Head%d` = '%i'", i, g_vars[id][g_acquiredHead][i])
        }

        for(new i = 1; i < Total_Back; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Back%d` = '%i'", i, g_vars[id][g_acquiredBack][i])
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                len += formatex(szTemp[len], charsmax(szTemp), ",`Pelvis%d` = '%i'", i, g_vars[id][g_acquiredPelvis][i])
        }

        formatex(szTemp[len], charsmax(szTemp), " WHERE `%s`.`SteamID` = '%s';", g_settings[Table], g_szAuthID[id])

        SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data, 1)
}

public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
        new VerifyCostumes; VerifyCostumes = Data[0]

        if(VerifyCostumes)
        {
                new Data1[1]; Data1[0] = 0

        #if defined ZP_SUPPORT
                for(new i = 1; i < Total_Skin; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Skin%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }
        #else
                for(new i = 1; i < Total_SkinCT; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "SkinCT%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }

                for(new i = 1; i < Total_SkinTR; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "SkinTR%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }
        #endif

                for(new i = 1; i < Total_Head; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Head%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }

                for(new i = 1; i < Total_Back; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Back%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }

                for(new i = 1; i < Total_Pelvis; i++)
                {
                        new szname[20]; formatex(szname, charsmax(szname), "Pelvis%d", i)
                        new num = SQL_FieldNameToNum(Query, szname)

                        if(num == -1)
                        {
                                new szTemp[128]; formatex(szTemp, charsmax(szTemp), "ALTER TABLE `%s` ADD COLUMN `%s` INT(1) NOT NULL", g_settings[Table], szname)
                                SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp, Data1, 1)
                        }
                }
        }

        SQL_FreeHandle(Query)
}

public Save_Data()
{
        if(g_settings[Saving_Method] != 0)
        {
                new players[32], num, player
                get_players(players, num, "ch")

                for(new i = 0; i < num; i++)
                {
                        player = players[i]

                        switch(g_settings[Saving_Method])
                        {
                                case 1: Save_Nvault(player)
                                case 2: Save_MySql(player)
                        }
                }
        }
}

public client_disconnected(id)
{
        g_vars[id][is_connected] = false

        if(g_vars[id][is_bot_or_hltv])
        {
                g_vars[id][is_bot_or_hltv] = false
                return
        }

        switch(g_settings[Saving_Method])
        {
                case 1: Save_Nvault(id)
                case 2: Save_MySql(id)
        }
}

public client_authorized(id)
{
        if(is_user_bot(id) || is_user_hltv(id))
        {
                g_vars[id][is_bot_or_hltv] = true
                return
        }

        reset_vars(id)

        if(g_settings[Saving_Method] != 0)
        {
                get_user_authid(id, g_szAuthID[id], charsmax(g_szAuthID[]))

                switch(g_settings[Saving_Method])
                {
                        case 1: Load_Nvault(id)
                        case 2: Load_MySql(id)
                }
        }
}

public client_putinserver(id)
{
        g_vars[id][is_connected] = true
}

public fw_PlayerSpawn_Post(id)
{
        if(is_user_alive(id) && !g_vars[id][is_bot_or_hltv])
        {
                if(g_settings[ZP43_Support])
                {
                        set_task(0.1, "ZP43_checkCostumes", id)
                }
                else
                {
                        checkCostumes(id, 0)
                        checkCostumes(id, 1)
                        checkCostumes(id, 2)
                        checkCostumes(id, 3)
                }
        }
}

public Event_DeathMsg()
{
        new attacker = read_data(1)
        new victim = read_data(2)

        if(attacker == victim || attacker == 0 || !g_vars[attacker][is_connected] || !g_vars[victim][is_connected] || g_vars[attacker][is_bot_or_hltv])
        {
                return
        }

        new victimname[32]
        get_user_name(victim, victimname, charsmax(victimname))

        ColorChat(attacker, "%L", attacker, "KILL_PLAYER", g_settings[Cash_per_Kill], victimname)
        g_vars[attacker][g_cash] += g_settings[Cash_per_Kill]
}

public clcmd_costumes(id)
{
        show_menu_costumes(id)

        return PLUGIN_HANDLED
}

public clcmd_inventory(id)
{
        show_menu_inventory(id)

        return PLUGIN_HANDLED
}

public clcmd_shop(id)
{
        show_menu_shop(id)

        return PLUGIN_HANDLED
}

public clcmd_deactivate(id)
{
#if defined ZP_SUPPORT
        g_vars[id][g_skin] = 0
#else
        g_vars[id][g_skinct] = 0
        g_vars[id][g_skintr] = 0
#endif

        g_vars[id][g_head] = 0
        g_vars[id][g_back] = 0
        g_vars[id][g_pelvis] = 0

        checkCostumes(id, 0)
        reset_costume(id, 1)
        reset_costume(id, 2)
        reset_costume(id, 3)

        ColorChat(id, "%L", id, "DEACTIVATED_COSTUMES")

        return PLUGIN_HANDLED
}

public clcmd_cash(id)
{
        ColorChat(id, "%L", id, "CASH", g_vars[id][g_cash])

        return PLUGIN_HANDLED
}

public Cmd_GiveCash(id, iLevel, iCid)
{
        if(!cmd_access(id, iLevel, iCid, 3))
        {
                return PLUGIN_HANDLED
        }

        new szPlayer[32]
        read_argv(1, szPlayer, charsmax(szPlayer))

        new iPlayer = cmd_target(id, szPlayer, 0)

        if(!iPlayer || g_vars[iPlayer][is_bot_or_hltv])
        {
                return PLUGIN_HANDLED
        }

        new szName[2][32], szAmount[10]
        read_argv(2, szAmount, charsmax(szAmount))
        get_user_name(id, szName[0], charsmax(szName[]))
        get_user_name(iPlayer, szName[1], charsmax(szName[]))

        new szKey[32], iCash = str_to_num(szAmount)
        g_vars[iPlayer][g_cash] += iCash

        if(g_vars[iPlayer][g_cash] < 0)
        {
                g_vars[iPlayer][g_cash] = 0
        }

        if(iCash >= 0)
        {
                copy(szKey, charsmax(szKey), "GIVE_CASH")
        }
        else
        {
                copy(szKey, charsmax(szKey), "TAKE_CASH")
                iCash *= -1
        }

        ColorChat(0, "%L", id, szKey, szName[0], iCash, szName[1])
        return PLUGIN_HANDLED
}

public menu_costumes(id, menu, item)
{
        switch(item)
        {
                case 0: show_menu_inventory(id)
                case 1: show_menu_shop(id)
        }

        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_costumes(id)
{
        new msgm[128], msg1[32], msg2[32], msgexit[32]
        formatex(msgm, charsmax(msgm), "%s \y%L", PREFIX_MENU, id, "COSTUMES")
        formatex(msg1, charsmax(msg1), "%L", id, "INVENTORY")
        formatex(msg2, charsmax(msg2), "%L", id, "SHOP")
        formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

        new menu = menu_create(msgm, "menu_costumes")

        menu_additem(menu, msg1, "0", 0)
        menu_additem(menu, msg2, "1", 0)

        menu_setprop(menu, MPROP_EXITNAME, msgexit)

        menu_display(id, menu, 0)
}

public menu_inventory(id, menu, item)
{
        switch(item)
        {
                case 0..z:
                {
                #if defined ZP_SUPPORT
                        if(Total_Skin == 1 && item == 0 || Total_Head == 1 && item == 1 || Total_Back == 1 && item == 2 || Total_Pelvis == 1 && item == 3)
                        {
                                ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
                                show_menu_inventory(id)
                        }
                #else
                        if(Total_SkinCT == 1 && item == 0 || Total_SkinTR == 1 && item == 1 || Total_Head == 1 && item == 2 || Total_Back == 1 && item == 3 || Total_Pelvis == 1 && item == 4)
                        {
                                ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? item > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
                                show_menu_inventory(id)
                        }
                #endif
                        else
                        {
                                g_vars[id][g_costume] = item
                                show_menu_costumeinv(id)
                        }
                }
                case z+1:
                {
                        clcmd_deactivate(id)
                        show_menu_inventory(id)
                }
                case MENU_EXIT:
                {
                        if(g_vars[id][is_connected])
                        {
                                show_menu_costumes(id)
                        }
                }
        }

        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_inventory(id)
{
        new msgm[128], msghead[32], msgback[32], msgpelvis[32], msg1[64], msgexit[32]
        formatex(msgm, charsmax(msgm), "%s \y%L", PREFIX_MENU, id, "INVENTORY")
        formatex(msghead, charsmax(msghead), "%L", id, "COSTUME_HEAD")
        formatex(msgback, charsmax(msgback), "%L", id, "COSTUME_BACK")
        formatex(msgpelvis, charsmax(msgpelvis), "%L", id, "COSTUME_PELVIS")
        formatex(msg1, charsmax(msg1), "%L", id, "DEACTIVATE_ALLCOSTUMES")
        formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

        new menu = menu_create(msgm, "menu_inventory")

#if defined ZP_SUPPORT
        new msgskin[32]; formatex(msgskin, charsmax(msgskin), "%L", id, "COSTUME_SKIN")

        menu_additem(menu, msgskin, "0", 0)
        menu_additem(menu, msghead, "1", 0)
        menu_additem(menu, msgback, "2", 0)
        menu_additem(menu, msgpelvis, "3", 0)
        menu_additem(menu, msg1, "4", 0)
#else
        new msgskinct[32], msgskintr[32]
        formatex(msgskinct, charsmax(msgskinct), "%L", id, "COSTUME_SKINCT")
        formatex(msgskintr, charsmax(msgskintr), "%L", id, "COSTUME_SKINTR")

        menu_additem(menu, msgskinct, "0", 0)
        menu_additem(menu, msgskintr, "1", 0)
        menu_additem(menu, msghead, "2", 0)
        menu_additem(menu, msgback, "3", 0)
        menu_additem(menu, msgpelvis, "4", 0)
        menu_additem(menu, msg1, "5", 0)
#endif

        menu_setprop(menu, MPROP_EXITNAME, msgexit)

        menu_display(id, menu, 0)
}

public menu_costumeinv(id, menu, item)
{
        if(item == MENU_EXIT)
        {
                if(g_vars[id][is_connected])
                {
                        show_menu_inventory(id)
                }

                menu_destroy(menu)
                return PLUGIN_HANDLED
        }

        if(item == 0)
        {
        #if defined ZP_SUPPORT
                if(!g_vars[id][g_skin] && g_vars[id][g_costume] == 0 || !g_vars[id][g_head] && g_vars[id][g_costume] == 1 || !g_vars[id][g_back] && g_vars[id][g_costume] == 2 || !g_vars[id][g_pelvis] && g_vars[id][g_costume] == 3)
                {
                        ColorChat(id, "%L", id, "ALREADY_DEACTIVATED")
                }
        #else
                if(!g_vars[id][g_skinct] && g_vars[id][g_costume] == 0 || !g_vars[id][g_skintr] && g_vars[id][g_costume] == 1 || !g_vars[id][g_head] && g_vars[id][g_costume] == 2 || !g_vars[id][g_back] && g_vars[id][g_costume] == 3 || !g_vars[id][g_pelvis] && g_vars[id][g_costume] == 4)
                {
                        ColorChat(id, "%L", id, "ALREADY_DEACTIVATED")
                }
        #endif
                else
                {
                        switch(g_vars[id][g_costume])
                        {
                        #if defined ZP_SUPPORT
                                case 0:
                                {
                                        g_vars[id][g_skin] = 0
                                        checkCostumes(id, 0)
                                }
                        #else
                                case 0:
                                {
                                        g_vars[id][g_skinct] = 0
                                        checkCostumes(id, 0)
                                }
                                case 1:
                                {
                                        g_vars[id][g_skintr] = 0
                                        checkCostumes(id, 0)
                                }
                        #endif
                                case y:
                                {
                                        g_vars[id][g_head] = 0
                                        reset_costume(id, 1)
                                }
                                case y+1:
                                {
                                        g_vars[id][g_back] = 0
                                        reset_costume(id, 2)
                                }
                                case y+2:
                                {
                                        g_vars[id][g_pelvis] = 0
                                        reset_costume(id, 3)
                                }
                        }

                        #if defined ZP_SUPPORT
                                ColorChat(id, "%L", id, "DEACTIVATE_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
                        #else
                                ColorChat(id, "%L", id, "DEACTIVATE_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
                        #endif
                }
        }
        else
        {
                new keyc = 1

                switch(g_vars[id][g_costume])
                {
                #if defined ZP_SUPPORT
                        case 0:
                        {
                                for(new i = 1; i < Total_Skin; i++)
                                {
                                        if(!g_vars[id][g_acquiredSkin][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_skin] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_skin] = i
                                                        checkCostumes(id, 0)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Skin[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                #else
                        case 0:
                        {
                                for(new i = 1; i < Total_SkinCT; i++)
                                {
                                        if(!g_vars[id][g_acquiredSkinCT][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_skinct] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_skinct] = i
                                                        checkCostumes(id, 0)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_SkinCT[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                        case 1:
                        {
                                for(new i = 1; i < Total_SkinTR; i++)
                                {
                                        if(!g_vars[id][g_acquiredSkinTR][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_skintr] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_skintr] = i
                                                        checkCostumes(id, 0)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_SkinTR[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                #endif
                        case y:
                        {
                                for(new i = 1; i < Total_Head; i++)
                                {
                                        if(!g_vars[id][g_acquiredHead][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_head] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_head] = i
                                                        checkCostumes(id, 1)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Head[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                        case y+1:
                        {
                                for(new i = 1; i < Total_Back; i++)
                                {
                                        if(!g_vars[id][g_acquiredBack][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_back] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_back] = i
                                                        checkCostumes(id, 2)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Back[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                        case y+2:
                        {
                                for(new i = 1; i < Total_Pelvis; i++)
                                {
                                        if(!g_vars[id][g_acquiredPelvis][i])
                                        {
                                                continue
                                        }

                                        if(keyc == item)
                                        {
                                                if(g_vars[id][g_pelvis] == i)
                                                {
                                                        ColorChat(id, "%L", id, "ALREADY_ACTIVATED")
                                                }
                                                else
                                                {
                                                        g_vars[id][g_pelvis] = i
                                                        checkCostumes(id, 3)
                                                        ColorChat(id, "%L", id, "ACTIVATE_COSTUME", Costumes_Pelvis[i][g_name])
                                                }

                                                break
                                        }

                                        keyc++
                                }
                        }
                }
        }

        show_menu_costumeinv(id)
        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_costumeinv(id)
{
        new msgm[128], msg[128], msg1[16], msgactivated[32], msgback[32], msgnext[32], msgexit[32], item = 1
#if defined ZP_SUPPORT
        formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\r", PREFIX_MENU, id, "INVENTORY", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
#else
        formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\r", PREFIX_MENU, id, "INVENTORY", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
#endif
        formatex(msgactivated, charsmax(msgactivated), " \r[%L]", id, "ACTIVATED")
        formatex(msgback, charsmax(msgback), "%L", id, "MENU_BACK")
        formatex(msgnext, charsmax(msgnext), "%L", id, "MENU_NEXT")
        formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

        new menu = menu_create(msgm, "menu_costumeinv")

        formatex(msg, charsmax(msg), "%L", id, "COSTUME_NONE")
        menu_additem(menu, msg, "0", 0)

        switch(g_vars[id][g_costume])
        {
        #if defined ZP_SUPPORT
                case 0:
                {
                        for(new i = 1; i < Total_Skin; i++)
                        {
                                if(!g_vars[id][g_acquiredSkin][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_Skin[i][g_name], g_vars[id][g_skin] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
        #else
                case 0:
                {
                        for(new i = 1; i < Total_SkinCT; i++)
                        {
                                if(!g_vars[id][g_acquiredSkinCT][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_SkinCT[i][g_name], g_vars[id][g_skinct] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
                case 1:
                {
                        for(new i = 1; i < Total_SkinTR; i++)
                        {
                                if(!g_vars[id][g_acquiredSkinTR][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_SkinTR[i][g_name], g_vars[id][g_skintr] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
        #endif
                case y:
                {
                        for(new i = 1; i < Total_Head; i++)
                        {
                                if(!g_vars[id][g_acquiredHead][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_Head[i][g_name], g_vars[id][g_head] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
                case y+1:
                {
                        for(new i = 1; i < Total_Back; i++)
                        {
                                if(!g_vars[id][g_acquiredBack][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_Back[i][g_name], g_vars[id][g_back] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
                case y+2:
                {
                        for(new i = 1; i < Total_Pelvis; i++)
                        {
                                if(!g_vars[id][g_acquiredPelvis][i])
                                {
                                        continue
                                }

                                formatex(msg, charsmax(msg), "%s%s", Costumes_Pelvis[i][g_name], g_vars[id][g_pelvis] == i ? msgactivated : "")
                                num_to_str(item, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)

                                item++
                        }
                }
        }

        if(item == 1)
        {
        #if defined ZP_SUPPORT
                ColorChat(id, "%L", id, "NO_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
        #else
                ColorChat(id, "%L", id, "NO_COSTUME", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
        #endif
                show_menu_inventory(id)
                menu_destroy(menu)
                return
        }

        menu_setprop(menu, MPROP_BACKNAME, msgback)
        menu_setprop(menu, MPROP_NEXTNAME, msgnext)
        menu_setprop(menu, MPROP_EXITNAME, msgexit)

        menu_display(id, menu, 0)
}

public menu_shop(id, menu, item)
{
        switch(item)
        {
                case 0..z:
                {
                #if defined ZP_SUPPORT
                        if(Total_Skin == 1 && item == 0 || Total_Head == 1 && item == 1 || Total_Back == 1 && item == 2 || Total_Pelvis == 1 && item == 3)
                        {
                                ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "")
                                show_menu_shop(id)
                        }
                #else
                        if(Total_SkinCT == 1 && item == 0 || Total_SkinTR == 1 && item == 1 || Total_Head == 1 && item == 2 || Total_Back == 1 && item == 3 || Total_Pelvis == 1 && item == 4)
                        {
                                ColorChat(id, "%L", id, "NOT_AVAILABLE", id, item > -1 ? item > 0 ? item > 1 ? item > 2 ? item > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "")
                                show_menu_shop(id)
                        }
                #endif
                        else
                        {
                                g_vars[id][g_costume] = item
                                show_menu_costumeshop(id)
                        }
                }
                case MENU_EXIT:
                {
                        if(g_vars[id][is_connected])
                        {
                                show_menu_costumes(id)
                        }
                }
        }

        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_shop(id)
{
        new msgm[128], msghead[32], msgback[32], msgpelvis[32], msgexit[32]
        formatex(msgm, charsmax(msgm), "%s \y%L^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "MENU_CASH", g_vars[id][g_cash])
        formatex(msghead, charsmax(msghead), "%L", id, "COSTUME_HEAD")
        formatex(msgback, charsmax(msgback), "%L", id, "COSTUME_BACK")
        formatex(msgpelvis, charsmax(msgpelvis), "%L", id, "COSTUME_PELVIS")
        formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

        new menu = menu_create(msgm, "menu_shop")

#if defined ZP_SUPPORT
        new msgskin[32]; formatex(msgskin, charsmax(msgskin), "%L", id, "COSTUME_SKIN")

        menu_additem(menu, msgskin, "0", 0)
        menu_additem(menu, msghead, "1", 0)
        menu_additem(menu, msgback, "2", 0)
        menu_additem(menu, msgpelvis, "3", 0)
#else
        new msgskinct[32], msgskintr[32]
        formatex(msgskinct, charsmax(msgskinct), "%L", id, "COSTUME_SKINCT")
        formatex(msgskintr, charsmax(msgskintr), "%L", id, "COSTUME_SKINTR")

        menu_additem(menu, msgskinct, "0", 0)
        menu_additem(menu, msgskintr, "1", 0)
        menu_additem(menu, msghead, "2", 0)
        menu_additem(menu, msgback, "3", 0)
        menu_additem(menu, msgpelvis, "4", 0)
#endif

        menu_setprop(menu, MPROP_EXITNAME, msgexit)

        menu_display(id, menu, 0)
}

public menu_costumeshop(id, menu, item)
{
        if(item == MENU_EXIT)
        {
                if(g_vars[id][is_connected])
                {
                        show_menu_shop(id)
                }

                menu_destroy(menu)
                return PLUGIN_HANDLED
        }

        new key = item+1

#if defined ZP_SUPPORT
        if(g_vars[id][g_costume] == 0 && g_vars[id][g_acquiredSkin][key] || g_vars[id][g_costume] == 1 && g_vars[id][g_acquiredHead][key] || g_vars[id][g_costume] == 2 && g_vars[id][g_acquiredBack][key] || g_vars[id][g_costume] == 3 && g_vars[id][g_acquiredPelvis][key])
        {
                ColorChat(id, "%L", id, "ALREADY_HAVECOSTUME")
                show_menu_costumeshop(id)
        }
#else
        if(g_vars[id][g_costume] == 0 && g_vars[id][g_acquiredSkinCT][key] || g_vars[id][g_costume] == 1 && g_vars[id][g_acquiredSkinTR][key] || g_vars[id][g_costume] == 2 && g_vars[id][g_acquiredHead][key] || g_vars[id][g_costume] == 3 && g_vars[id][g_acquiredBack][key] || g_vars[id][g_costume] == 4 && g_vars[id][g_acquiredPelvis][key])
        {
                ColorChat(id, "%L", id, "ALREADY_HAVECOSTUME")
                show_menu_costumeshop(id)
        }
#endif
        else
        {
                g_vars[id][g_buying] = key
                show_menu_buycostume(id)
        }

        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_costumeshop(id)
{
        new msgm[128], msg[128], msg1[16], msg2[64], msgacquired[32], msgback[32], msgnext[32], msgexit[32]
#if defined ZP_SUPPORT
        formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%d^n", PREFIX_MENU, id, "SHOP", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKIN" : "", id, "MENU_CASH", g_vars[id][g_cash])
#else
        formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%d^n", PREFIX_MENU, id, "SHOP", id, g_vars[id][g_costume] > -1 ? g_vars[id][g_costume] > 0 ? g_vars[id][g_costume] > 1 ? g_vars[id][g_costume] > 2 ? g_vars[id][g_costume] > 3 ? "COSTUME_PELVIS" : "COSTUME_BACK" : "COSTUME_HEAD" : "COSTUME_SKINTR" : "COSTUME_SKINCT" : "", id, "MENU_CASH", g_vars[id][g_cash])
#endif
        formatex(msgacquired, charsmax(msgacquired), "[%L]", id, "ACQUIRED")
        formatex(msgback, charsmax(msgback), "%L", id, "MENU_BACK")
        formatex(msgnext, charsmax(msgnext), "%L", id, "MENU_NEXT")
        formatex(msgexit, charsmax(msgexit), "%L", id, "MENU_EXIT")

        new menu = menu_create(msgm, "menu_costumeshop")

        switch(g_vars[id][g_costume])
        {
        #if defined ZP_SUPPORT
                case 0:
                {
                        for(new i = 1; i < Total_Skin; i++)
                        {
                                formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Skin[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkin][i] ? "\d" : "", Costumes_Skin[i][g_name], g_vars[id][g_acquiredSkin][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
        #else
                case 0:
                {
                        for(new i = 1; i < Total_SkinCT; i++)
                        {
                                formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_SkinCT[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkinCT][i] ? "\d" : "", Costumes_SkinCT[i][g_name], g_vars[id][g_acquiredSkinCT][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
                case 1:
                {
                        for(new i = 1; i < Total_SkinTR; i++)
                        {
                                formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_SkinTR[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredSkinTR][i] ? "\d" : "", Costumes_SkinTR[i][g_name], g_vars[id][g_acquiredSkinTR][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
        #endif
                case y:
                {
                        for(new i = 1; i < Total_Head; i++)
                        {
                                formatex(msg2, charsmax(msg1), "[%L: %d]", id, "PRICE", Costumes_Head[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredHead][i] ? "\d" : "", Costumes_Head[i][g_name], g_vars[id][g_acquiredHead][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
                case y+1:
                {
                        for(new i = 1; i < Total_Back; i++)
                        {
                                formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Back[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredBack][i] ? "\d" : "", Costumes_Back[i][g_name], g_vars[id][g_acquiredBack][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
                case y+2:
                {
                        for(new i = 1; i < Total_Pelvis; i++)
                        {
                                formatex(msg2, charsmax(msg2), "[%L: %d]", id, "PRICE", Costumes_Pelvis[i][g_price])
                                formatex(msg, charsmax(msg), "%s%s \r%s", g_vars[id][g_acquiredPelvis][i] ? "\d" : "", Costumes_Pelvis[i][g_name], g_vars[id][g_acquiredPelvis][i] ? msgacquired : msg2)
                                num_to_str(i-1, msg1, charsmax(msg1))
                                menu_additem(menu, msg, msg1, 0)
                        }
                }
        }

        menu_setprop(menu, MPROP_BACKNAME, msgback)
        menu_setprop(menu, MPROP_NEXTNAME, msgnext)
        menu_setprop(menu, MPROP_EXITNAME, msgexit)

        menu_display(id, menu, 0)
}

public menu_buycostume(id, menu, item)
{
        switch(item)
        {
                case 0:
                {
                        show_motd_costume(id)
                        show_menu_buycostume(id)
                }
                case 1:
                {
                        switch(g_vars[id][g_costume])
                        {
                        #if defined ZP_SUPPORT
                                case 0:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_Skin[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_Skin[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredSkin][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_skin] = g_vars[id][g_buying]
                                                checkCostumes(id, 0)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Skin[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                        #else
                                case 0:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_SkinCT[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_SkinCT[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredSkinCT][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_skinct] = g_vars[id][g_buying]
                                                checkCostumes(id, 0)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_SkinCT[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                                case 1:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_SkinTR[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_SkinTR[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredSkinTR][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_skintr] = g_vars[id][g_buying]
                                                checkCostumes(id, 0)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_SkinTR[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                        #endif
                                case y:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_Head[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_Head[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredHead][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_head] = g_vars[id][g_buying]
                                                checkCostumes(id, 1)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Head[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                                case y+1:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_Back[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_Back[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredBack][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_back] = g_vars[id][g_buying]
                                                checkCostumes(id, 2)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Back[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                                case y+2:
                                {
                                        if(g_vars[id][g_cash] >= Costumes_Pelvis[g_vars[id][g_buying]][g_price])
                                        {
                                                g_vars[id][g_cash] -= Costumes_Pelvis[g_vars[id][g_buying]][g_price]
                                                g_vars[id][g_acquiredPelvis][g_vars[id][g_buying]] = 1
                                                g_vars[id][g_pelvis] = g_vars[id][g_buying]
                                                checkCostumes(id, 3)

                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME", Costumes_Pelvis[g_vars[id][g_buying]][g_name])
                                                ColorChat(id, "%L", id, "BOUGHT_COSTUME2")
                                        }
                                        else
                                        {
                                                ColorChat(id, "%L", id, "NO_CASH")
                                        }
                                }
                        }

                        show_menu_costumeshop(id)
                }
                case MENU_EXIT:
                {
                        if(g_vars[id][is_connected])
                        {
                                show_menu_costumeshop(id)
                        }
                }
        }

        menu_destroy(menu)
        return PLUGIN_HANDLED
}

show_menu_buycostume(id)
{
        new msgm[256], msgpreview[32], msgbuy[32], msgcancel[32]
        formatex(msgpreview, charsmax(msgpreview), "%L", id, "PREVIEW")
        formatex(msgbuy, charsmax(msgbuy), "%L", id, "BUY")
        formatex(msgcancel, charsmax(msgcancel), "%L", id, "CANCEL_PURCHASE")

        switch(g_vars[id][g_costume])
        {
        #if defined ZP_SUPPORT
                case 0: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKIN", id, "COSTUME", Costumes_Skin[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Skin[g_vars[id][g_buying]][g_price])
        #else
                case 0: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKINCT", id, "COSTUME", Costumes_SkinCT[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_SkinCT[g_vars[id][g_buying]][g_price])
                case 1: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_SKINTR", id, "COSTUME", Costumes_SkinTR[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_SkinTR[g_vars[id][g_buying]][g_price])
        #endif
                case y: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_HEAD", id, "COSTUME", Costumes_Head[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Head[g_vars[id][g_buying]][g_price])
                case y+1: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_BACK", id, "COSTUME", Costumes_Back[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Back[g_vars[id][g_buying]][g_price])
                case y+2: formatex(msgm, charsmax(msgm), "%s \y%L: %L^n\w%L: \r%s^n\w%L: \r%d", PREFIX_MENU, id, "SHOP", id, "COSTUME_PELVIS", id, "COSTUME", Costumes_Pelvis[g_vars[id][g_buying]][g_name], id, "PRICE", Costumes_Pelvis[g_vars[id][g_buying]][g_price])
        }

        new menu = menu_create(msgm, "menu_buycostume")

        menu_additem(menu, msgpreview, "0", 0)
        menu_additem(menu, msgbuy, "1", 0)

        menu_setprop(menu, MPROP_EXITNAME, msgcancel)

        menu_display(id, menu, 0)
}

public show_motd_costume(id)
{
        new motd[512], motd_name[128]

        switch(g_vars[id][g_costume])
        {
        #if defined ZP_SUPPORT
                case 0:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Skin[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_Skin[g_vars[id][g_buying]][g_name])
                }
        #else
                case 0:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_SkinCT[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_SkinCT[g_vars[id][g_buying]][g_name])
                }
                case 1:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_SkinTR[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_SkinTR[g_vars[id][g_buying]][g_name])
                }
        #endif
                case y:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Head[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_Head[g_vars[id][g_buying]][g_name])
                }
                case y+1:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Back[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_Back[g_vars[id][g_buying]][g_name])
                }
                case y+2:
                {
                        formatex(motd, charsmax(motd), "<html><head><style>img{display:block;margin-top:125px;margin-left:auto;margin-right:auto;}</style></head><body style=^"margin:0px;background:#000000;^"><img src=^"%s^"></body></html>", Costumes_Pelvis[g_vars[id][g_buying]][g_preview])
                        formatex(motd_name, charsmax(motd_name), "%s", Costumes_Pelvis[g_vars[id][g_buying]][g_name])
                }
        }

        show_motd(id, motd, motd_name)
}

reset_vars(id)
{
        g_vars[id][g_cash] = 0

#if defined ZP_SUPPORT
        g_vars[id][g_skin] = 0

        for(new i = 1; i < Total_Skin; i++)
        {
                g_vars[id][g_acquiredSkin][i] = 0
        }
#else
        g_vars[id][g_skinct] = 0
        g_vars[id][g_skintr] = 0

        for(new i = 1; i < Total_SkinCT; i++)
        {
                g_vars[id][g_acquiredSkinCT][i] = 0
        }

        for(new i = 1; i < Total_SkinTR; i++)
        {
                g_vars[id][g_acquiredSkinTR][i] = 0
        }
#endif

        g_vars[id][g_head] = 0
        g_vars[id][g_back] = 0
        g_vars[id][g_pelvis] = 0

        for(new i = 1; i < Total_Head; i++)
        {
                g_vars[id][g_acquiredHead][i] = 0
        }

        for(new i = 1; i < Total_Back; i++)
        {
                g_vars[id][g_acquiredBack][i] = 0
        }

        for(new i = 1; i < Total_Pelvis; i++)
        {
                g_vars[id][g_acquiredPelvis][i] = 0
        }
}

checkCostumes(id, key)
{
        if(!is_user_alive(id))
        {
                return
        }

#if defined ZP_SUPPORT
        if(zp_get_user_survivor(id) || zp_get_user_zombie(id) || zp_get_user_nemesis(id))
        {
                return
        }
#endif

        switch(key)
        {
                case 0:
                {
                #if defined ZP_SUPPORT
                        if(g_vars[id][g_skin] == 0)
                        {
                                cs_reset_player_model(id)
                        }
                        else
                        {
                                cs_set_player_model(id, Costumes_Skin[g_vars[id][g_skin]][g_model])
                        }
                #else
                        switch(get_user_team(id))
                        {
                                case 1:
                                {
                                        if(g_vars[id][g_skintr] == 0)
                                        {
                                                cs_reset_player_model(id)
                                        }
                                        else
                                        {
                                                cs_set_player_model(id, Costumes_SkinTR[g_vars[id][g_skintr]][g_model])
                                        }
                                }
                                case 2:
                                {
                                        if(g_vars[id][g_skinct] == 0)
                                        {
                                                cs_reset_player_model(id)
                                        }
                                        else
                                        {
                                                cs_set_player_model(id, Costumes_SkinCT[g_vars[id][g_skinct]][g_model])
                                        }
                                }
                        }
                #endif
                }
                case 1:
                {
                        reset_costume(id, 1)

                        if(g_vars[id][g_head] != 0)
                        {
                                make_costume(id, Costumes_Head[g_vars[id][g_head]][g_model], 1, Costumes_Head[g_vars[id][g_head]][g_anim])
                        }
                }
                case 2:
                {
                        reset_costume(id, 2)

                        if(g_vars[id][g_back] != 0)
                        {
                                make_costume(id, Costumes_Back[g_vars[id][g_back]][g_model], 2, Costumes_Back[g_vars[id][g_back]][g_anim])
                        }
                }
                case 3:
                {
                        reset_costume(id, 3)

                        if(g_vars[id][g_pelvis] != 0)
                        {
                                make_costume(id, Costumes_Pelvis[g_vars[id][g_pelvis]][g_model], 3, Costumes_Pelvis[g_vars[id][g_pelvis]][g_anim])
                        }
                }
        }
}

make_costume(id, model[], part, anim)
{
        if(!is_user_alive(id))
        {
                return
        }

        switch(part)
        {
                case 1:
                {
                        g_vars[id][g_CostumeModelHead] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

                        set_pev(g_vars[id][g_CostumeModelHead], pev_movetype, MOVETYPE_FOLLOW)
                        set_pev(g_vars[id][g_CostumeModelHead], pev_aiment, id)
                        set_pev(g_vars[id][g_CostumeModelHead], pev_rendermode, kRenderNormal)
                        engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelHead], model)
                        set_pev(g_vars[id][g_CostumeModelHead], pev_body, anim)
                        set_pev(g_vars[id][g_CostumeModelHead], pev_sequence, anim)
                        set_pev(g_vars[id][g_CostumeModelHead], pev_animtime, get_gametime())
                        set_pev(g_vars[id][g_CostumeModelHead], pev_framerate, 1.0)
                }
                case 2:
                {
                        g_vars[id][g_CostumeModelBack] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

                        set_pev(g_vars[id][g_CostumeModelBack], pev_movetype, MOVETYPE_FOLLOW)
                        set_pev(g_vars[id][g_CostumeModelBack], pev_aiment, id)
                        set_pev(g_vars[id][g_CostumeModelBack], pev_rendermode, kRenderNormal)
                        engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelBack], model)
                        set_pev(g_vars[id][g_CostumeModelBack], pev_body, anim)
                        set_pev(g_vars[id][g_CostumeModelBack], pev_sequence, anim)
                        set_pev(g_vars[id][g_CostumeModelBack], pev_animtime, get_gametime())
                        set_pev(g_vars[id][g_CostumeModelBack], pev_framerate, 1.0)
                }
                case 3:
                {
                        g_vars[id][g_CostumeModelPelvis] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))

                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_movetype, MOVETYPE_FOLLOW)
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_aiment, id)
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_rendermode, kRenderNormal)
                        engfunc(EngFunc_SetModel, g_vars[id][g_CostumeModelPelvis], model)
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_body, anim)
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_sequence, anim)
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_animtime, get_gametime())
                        set_pev(g_vars[id][g_CostumeModelPelvis], pev_framerate, 1.0)
                }
        }
}

reset_costume(id, number)
{
        if(!is_user_alive(id))
        {
                return
        }

        switch(number)
        {
                case 1:
                {
                        fm_set_entity_visibility(g_vars[id][g_CostumeModelHead], 0)
                        g_vars[id][g_CostumeModelHead] = 0
                }
                case 2:
                {
                        fm_set_entity_visibility(g_vars[id][g_CostumeModelBack], 0)
                        g_vars[id][g_CostumeModelBack] = 0
                }
                case 3:
                {
                        fm_set_entity_visibility(g_vars[id][g_CostumeModelPelvis], 0)
                        g_vars[id][g_CostumeModelPelvis] = 0
                }
        }
}

stock ColorChat(const id, const szInput[], any:...)
{
        new iPlayers[32], iCount = 1
        static szMessage[191]
        vformat(szMessage, charsmax(szMessage), szInput, 3)
        format(szMessage[0], charsmax(szMessage), "%s %s", PREFIX_CHAT, szMessage)

        replace_all(szMessage, charsmax(szMessage), "!g", "^4")
        replace_all(szMessage, charsmax(szMessage), "!n", "^1")
        replace_all(szMessage, charsmax(szMessage), "!t", "^3")

        if(id)
        {
                iPlayers[0] = id
        }
        else
        {
                get_players(iPlayers, iCount, "ch")
        }

        for(new i, iPlayer; i < iCount; i++)
        {
                iPlayer = iPlayers[i]

                if(g_vars[iPlayer][is_connected])
                {
                        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayer)
                        write_byte(iPlayer)
                        write_string(szMessage)
                        message_end()
                }
        }
}

stock fm_set_entity_visibility(index, visible = 1)
{
        set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)

        return 1
}

stock precache_player_model(szModel[])
{
        static szFile[128]
        formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel)
        precache_model(szFile)
        replace(szFile, charsmax(szFile), ".mdl", "T.mdl")

        if(file_exists(szFile))
        {
                precache_model(szFile)
        }
}

i want to have currency with simple money cs, please help me.


All times are GMT -4. The time now is 12:23.

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