View Single Post
Paparazziv2
Senior Member
Join Date: Feb 2011
Location: Chile, La Serena
Old 10-14-2011 , 21:10   Re: [CS:S] Auto Skin
Reply With Quote #101

Support please!.

Code:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <clientprefs>

#define PLUGIN_VERSION "2.0.2"
#define PLUGIN_PREFIX "\x04Skins: \x03"

#define NUM_TIERS 6
#define NUM_PATHS 8

#define ACCESS_NO_ACCESS -1
#define ACCESS_TIER_ONE 0
#define ACCESS_TIER_TWO 1
#define ACCESS_TIER_THREE 2
#define ACCESS_TIER_FOUR 3
#define ACCESS_TIER_FIVE 4
#define ACCESS_TIER_NONE 5

#define TEAM_NONE 0
#define TEAM_SPEC 1
#define TEAM_RED 2
#define TEAM_BLUE 3

new Handle:g_hEnabled = INVALID_HANDLE;
new Handle:g_hDefault = INVALID_HANDLE;
new Handle:g_hBots = INVALID_HANDLE;
new Handle:g_hDelay = INVALID_HANDLE;
new Handle:g_hCommands = INVALID_HANDLE;
new Handle:g_hAllowed = INVALID_HANDLE;
new Handle:g_hFlag[NUM_TIERS] = { INVALID_HANDLE, ... };
new Handle:g_hPathT[NUM_TIERS] = { INVALID_HANDLE, ... };
new Handle:g_hPathCT[NUM_TIERS] = { INVALID_HANDLE, ... };
new Handle:g_hForced[NUM_TIERS] = { INVALID_HANDLE, ... };
new Handle:g_hCookie = INVALID_HANDLE;
new Handle:g_hTrie = INVALID_HANDLE;
new Handle:g_hTimer = INVALID_HANDLE;

new g_iTeam[MAXPLAYERS + 1];
new g_iTier[MAXPLAYERS + 1];
new bool:g_bAppear[MAXPLAYERS + 1];
new bool:g_bAlive[MAXPLAYERS + 1];
new bool:g_bLoaded[MAXPLAYERS + 1];

new bool:g_bLateLoad = true, bool:g_bEnabled = true, bool:g_bModel, bool:g_bDefault, bool:g_bForced[NUM_TIERS], bool:g_bRedAvailable[NUM_TIERS], bool:g_bBlueAvailable[NUM_TIERS], bool:g_bChangable = true;
new g_iBots, g_iAccess[NUM_TIERS], g_iRedTotal[NUM_TIERS], g_iBlueTotal[NUM_TIERS];
new Float:g_fDelay, Float:g_fAllowed;
new String:g_sRedPaths[NUM_TIERS][NUM_PATHS][256], String:g_sBluePaths[NUM_TIERS][NUM_PATHS][256], String:g_sCommands[8][32];

static const String:g_sBlueModels[4][] = 
{
    "models/player/ct_urban.mdl",
    "models/player/ct_gsg9.mdl",
    "models/player/ct_sas.mdl",
    "models/player/ct_gign.mdl"
};

static const String:g_sRedModels[4][] = 
{
    "models/player/t_phoenix.mdl",
    "models/player/t_leet.mdl",
    "models/player/t_arctic.mdl",
    "models/player/t_guerilla.mdl"
};

public Plugin:myinfo =
{
    name = "Auto Skin", 
    author = "Twisted|Panda", 
    description = "Provides simple functionality for applying skins to players automatically.", 
    version = PLUGIN_VERSION, 
    url = "http://ominousgaming.com"
}

public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
    g_bLateLoad = late;
    return APLRes_Success;
}

public OnPluginStart()
{
    LoadTranslations("common.phrases");
    LoadTranslations("sm_autoskin.phrases");

    CreateConVar("sm_autoskin_version", PLUGIN_VERSION, "Auto Skin Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    g_hEnabled = CreateConVar("sm_autoskin_enable", "1.0", "Enables/disables all features of the plugin.", FCVAR_NONE, true, 0.0, true, 1.0);
    g_hBots = CreateConVar("sm_autoskin_bots", "5.0", "Default access level for bots. 1 = Tier One, 5 = Tier None, 0 = No Access", FCVAR_NONE, true, 0.0, true, 5.0);
    g_hDefault = CreateConVar("sm_autoskin_default", "1.0", "Controls how data is assigned for new players. (0 = Skins start disabled, 1 = Skins start enabled)", FCVAR_NONE, true, 0.0, true, 1.0);
    g_hDelay = CreateConVar("sm_autoskin_delay", "0.1", "Controls how long after a player spawns that their skin is applied.", FCVAR_NONE, true, 0.0);
    g_hCommands = CreateConVar("sm_autoskin_commands", "!skins, /skins, !skin, /skin", "The commands that can be used to access Auto Skin's menu, separated by \", \", up to 8 commands allowed.", FCVAR_NONE);
    g_hAllowed = CreateConVar("sm_autoskin_allowed", "30.0", "The number of seconds after the round starts that they're subject to skin changes (be it via sm_autoskin_commands or player_spawn being fired)", FCVAR_NONE, true, 0.0);

    g_hFlag[0] = CreateConVar("sm_autoskin_tier_one", "-1", "Letter flag(s) required to access the tier one model. (\"-1\" Disables)", FCVAR_NONE);
    g_hPathT[0] = CreateConVar("sm_autoskin_tier_one_t", "", "Path to player model, access level == sm_autoskin_tier_one. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[0] = CreateConVar("sm_autoskin_tier_one_ct", "", "Path to player model, access level == sm_autoskin_tier_one. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[0] = CreateConVar("sm_autoskin_tier_one_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);

    g_hFlag[1] = CreateConVar("sm_autoskin_tier_two", "-1", "Letter flag(s) required to access the tier two model. (\"-1\" Disables)", FCVAR_NONE);
    g_hPathT[1] = CreateConVar("sm_autoskin_tier_two_t", "", "Path to player model, access level == sm_autoskin_tier_two. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[1] = CreateConVar("sm_autoskin_tier_two_ct", "", "Path to player model, access level == sm_autoskin_tier_two. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[1] = CreateConVar("sm_autoskin_tier_two_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);

    g_hFlag[2] = CreateConVar("sm_autoskin_tier_three", "-1", "Letter flag(s) required to access the tier three model. (\"-1\" Disables)", FCVAR_NONE);
    g_hPathT[2] = CreateConVar("sm_autoskin_tier_three_t", "", "Path to player model, access level == sm_autoskin_tier_three. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[2] = CreateConVar("sm_autoskin_tier_three_ct", "", "Path to player model, access level == sm_autoskin_tier_three. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[2] = CreateConVar("sm_autoskin_tier_three_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);

    g_hFlag[3] = CreateConVar("sm_autoskin_tier_four", "-1", "Letter flag(s) required to access the tier four model. (\"-1\" Disables)", FCVAR_NONE);
    g_hPathT[3] = CreateConVar("sm_autoskin_tier_four_t", "", "Path to player model, access level == sm_autoskin_tier_four. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[3] = CreateConVar("sm_autoskin_tier_four_ct", "", "Path to player model, access level == sm_autoskin_tier_four. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[3] = CreateConVar("sm_autoskin_tier_four_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);

    g_hFlag[4] = CreateConVar("sm_autoskin_tier_five", "-1", "Letter flag(s) required to access the tier five model. (\"-1\" Disables)", FCVAR_NONE);
    g_hPathT[4] = CreateConVar("sm_autoskin_tier_five_t", "", "Path to player model, access level == sm_autoskin_tier_five. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[4] = CreateConVar("sm_autoskin_tier_five_ct", "", "Path to player model, access level == sm_autoskin_tier_five. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[4] = CreateConVar("sm_autoskin_tier_five_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);

    g_hFlag[5] = CreateConVar("sm_autoskin_tier_none", "0", "If enabled, players without access to any other tier will be assigned tier none models.", FCVAR_NONE, true, 0.0, true, 1.0);
    g_hPathT[5] = CreateConVar("sm_autoskin_tier_none_t", "", "Path to player model, access level == none. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hPathCT[5] = CreateConVar("sm_autoskin_tier_none_ct", "", "Path to player model, access level == none. (\"\" Disables, separate multiple paths with \", \")", FCVAR_NONE);
    g_hForced[5] = CreateConVar("sm_autoskin_tier_none_forced", "0", "Controls whether or not this tier's skin will be forced upon clients with appropriate access.", FCVAR_NONE, true, 0.0, true, 1.0);
    AutoExecConfig(true, "sm_autoskin");

    HookConVarChange(g_hEnabled, Action_OnSettingsChange);
    HookConVarChange(g_hDelay, Action_OnSettingsChange);
    HookConVarChange(g_hBots, Action_OnSettingsChange);
    HookConVarChange(g_hDefault, Action_OnSettingsChange);
    HookConVarChange(g_hCommands, Action_OnSettingsChange);
    HookConVarChange(g_hAllowed, Action_OnSettingsChange);
    
    g_hTrie = CreateTrie();
    AddCommandListener(Command_Say, "say");
    AddCommandListener(Command_Say, "say_team");

    SetCookieMenuItem(Menu_Cookies, 0, "Skin Settings");
    g_hCookie = RegClientCookie("AutoSkin_Status", "Auto Skin: The client's skin status.", CookieAccess_Protected);
    HookEvent("player_spawn", Event_OnPlayerSpawn);
    HookEvent("player_death", Event_OnPlayerDeath);
    HookEvent("player_team", Event_OnPlayerTeam, EventHookMode_Pre);
    HookEvent("round_end", Event_OnRoundEnd);
    HookEvent("round_start", Event_OnRoundStart);
}

public OnPluginEnd()
{
    if(g_bEnabled)
    {
        ClearTrie(g_hTrie);
    }
}

public OnMapStart()
{
    Void_SetDefaults();

    if(g_bEnabled)
    {
        Void_ReadDownloads();

        for(new i = 0; i <= 3; i++)
        {
            PrecacheModel(g_sRedModels[i]);
            PrecacheModel(g_sBlueModels[i]);
        }
    }
}

public OnMapEnd()
{
    if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
    {
        g_hTimer = INVALID_HANDLE;
        g_bChangable = true;
    }
}

public OnConfigsExecuted()
{
    if(g_bEnabled)
    {
        Void_ReadModels();

        if(g_bLateLoad)
        {
            for(new i = 1; i <= MaxClients; i++)
            {
                if(IsClientInGame(i))
                {
                    g_iTeam[i] = GetClientTeam(i);
                    g_bAlive[i] = IsPlayerAlive(i) ? true : false;

                    if(!IsFakeClient(i))
                    {
                        g_iTier[i] = ACCESS_NO_ACCESS;
                        new _iFlags = GetUserFlagBits(i);
                        if(_iFlags > 0)
                        {
                            for(new j = ACCESS_TIER_ONE; j <= ACCESS_TIER_FIVE; j++)
                            {
                                if(g_iAccess[j] != ACCESS_NO_ACCESS && (_iFlags & g_iAccess[j]))
                                {
                                    g_iTier[i] = j;
                                    break;
                                }
                            }
                        }

                        if(g_iTier[i] == ACCESS_NO_ACCESS && g_iAccess[ACCESS_TIER_NONE])
                            g_iTier[i] = ACCESS_TIER_NONE;
                        
                        if(g_iTier[i] != ACCESS_NO_ACCESS && AreClientCookiesCached(i))
                        {
                            Void_LoadCookies(i);
                            if(g_bAppear[i] || g_bForced[g_iTier[i]])
                                CreateTimer(0.0, Timer_Apply, GetClientUserId(i), TIMER_FLAG_NO_MAPCHANGE);
                        }
                    }
                    else
                    {
                        g_iTier[i] = g_iBots;
                        g_bAppear[i] = true;
                        g_bLoaded[i] = true;
                        
                        if(g_iBots != ACCESS_NO_ACCESS)
                            CreateTimer(0.0, Timer_Apply, GetClientUserId(i), TIMER_FLAG_NO_MAPCHANGE);
                    }
                }
                else
                {
                    g_iTier[i] = ACCESS_NO_ACCESS;

                    g_iTeam[i] = 0;
                    g_bAlive[i] = false;
                }
            }
            
            g_bLateLoad = false;
        }
    }
}

public OnClientPostAdminCheck(client)
{
    if(g_bEnabled)
    {
        if(!IsFakeClient(client))
        {
            g_iTier[client] = ACCESS_NO_ACCESS;
            new _iFlags = GetUserFlagBits(client);
            if(_iFlags > 0)
            {
                for(new i = ACCESS_TIER_ONE; i <= ACCESS_TIER_FIVE; i++)
                {
                    if(g_iAccess[i] != ACCESS_NO_ACCESS && (_iFlags & g_iAccess[i]))
                    {
                        g_iTier[client] = i;
                        break;
                    }
                }
            }

            if(g_iTier[client] == ACCESS_NO_ACCESS && g_iAccess[ACCESS_TIER_NONE])
                g_iTier[client] = ACCESS_TIER_NONE;
            
            if(g_iTier[client] != ACCESS_NO_ACCESS && !g_bLoaded[client] && AreClientCookiesCached(client))
            {
                Void_LoadCookies(client);
                if(g_bAppear[client] || g_bForced[g_iTier[client]])
                    CreateTimer(0.0, Timer_Apply, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
            }
        }
        else
        {
            g_iTier[client] = g_iBots;
            g_bAppear[client] = true;
            g_bLoaded[client] = true;
        }
    }
}

public OnClientDisconnect(client)
{
    if(g_bEnabled)
    {
        g_iTeam[client] = 0;
        g_bAlive[client] = false;

        g_iTier[client] = ACCESS_NO_ACCESS;
        g_bAppear[client] = false;
        g_bLoaded[client] = false;
    }
}

public OnClientCookiesCached(client)
{
    if(!g_bLoaded[client] && g_iTier[client] != ACCESS_NO_ACCESS)
    {
        Void_LoadCookies(client);
        CreateTimer(0.0, Timer_Apply, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action:Command_Say(client, const String:command[], argc)
{
    if(g_bEnabled)
    {
        if(!client || !IsClientInGame(client) || g_iTier[client] == ACCESS_NO_ACCESS || g_bForced[g_iTier[client]])
            return Plugin_Continue;

        decl _iIndex, String:_sText[192];
        GetCmdArgString(_sText, sizeof(_sText));
        StripQuotes(_sText);

        if(GetTrieValue(g_hTrie, _sText, _iIndex))
        {
            Menu_Skins(client);
            return Plugin_Stop;
        }
    }

    return Plugin_Continue;
}

public Action:Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(g_bEnabled)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if(!client || !IsClientInGame(client) || g_iTeam[client] <= TEAM_SPEC)
            return Plugin_Continue;

        g_bAlive[client] = true;
        if(g_iTier[client] != ACCESS_NO_ACCESS && (g_bAppear[client] || g_bForced[g_iTier[client]]))
            CreateTimer(g_fDelay, Timer_Apply, GetClientUserId(client));
    }

    return Plugin_Continue;
}

public Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(g_bEnabled)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if(!client || !IsClientInGame(client))
            return Plugin_Continue;

        g_bAlive[client] = false;
    }

    return Plugin_Continue;
}

public Action:Event_OnPlayerTeam(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(g_bEnabled)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if(!client || !IsClientInGame(client))
            return Plugin_Continue;

        g_iTeam[client] = GetEventInt(event, "team");
        if(g_iTeam[client] == TEAM_SPEC)
            g_bAlive[client] = false;
        else if(g_iTier[client] != ACCESS_NO_ACCESS && (g_bAppear[client] || g_bForced[g_iTier[client]]))
            CreateTimer(g_fDelay, Timer_Apply, GetClientUserId(client));
    }
    
    return Plugin_Continue;
}

public Action:Event_OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(g_bEnabled)
    {
        g_bChangable = true;
        if(g_fAllowed > 0.0)
            g_hTimer = CreateTimer(g_fAllowed, Timer_Changable, _, TIMER_FLAG_NO_MAPCHANGE);
            
        for(new i = 1; i <= MaxClients; i++)
            if(IsClientInGame(i) && g_bAlive[i] && g_iTier[i] != ACCESS_NO_ACCESS && (g_bAppear[i] || g_bForced[g_iTier[i]]))
                CreateTimer(g_fDelay, Timer_Apply, GetClientUserId(i));
    }

    return Plugin_Continue;
}

public Action:Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(g_bEnabled)
    {
        g_bChangable = true;
        if(g_hTimer != INVALID_HANDLE && CloseHandle(g_hTimer))
            g_hTimer = INVALID_HANDLE;
    }

    return Plugin_Continue;
}

public Action:Timer_Apply(Handle:timer, any:userid)
{
    new client = GetClientOfUserId(userid);
    if(client && IsClientInGame(client) && g_bAlive[client])
    {
        switch(g_iTeam[client])
        {
            case TEAM_RED:
            {
                if(g_iRedTotal[g_iTier[client]] && g_bRedAvailable[g_iTier[client]])
                    SetEntityModel(client, g_sRedPaths[g_iTier[client]][GetRandomInt(0, (g_iRedTotal[g_iTier[client]] - 1))]);
            }
            case TEAM_BLUE:
            {
                if(g_iBlueTotal[g_iTier[client]] && g_bBlueAvailable[g_iTier[client]])
                    SetEntityModel(client, g_sBluePaths[g_iTier[client]][GetRandomInt(0, (g_iBlueTotal[g_iTier[client]] - 1))]);
            }
        }
    }

    return Plugin_Continue;
}

public Action:Timer_Changable(Handle:timer)
{
    g_hTimer = INVALID_HANDLE;
    g_bChangable = false;
}    

bool:Bool_Check(const String:_sTemp[])
{
    if(StrEqual(_sTemp, "") || !FileExists(_sTemp))
        return false;
        
    return true;
}

public Menu_Cookies(client, CookieMenuAction:action, any:info, String:buffer[], maxlen) 
{
    switch(action)
    {
        case CookieMenuAction_DisplayOption:
            Format(buffer, maxlen, "Skin Settings");
        case CookieMenuAction_SelectOption:
        {
            if(!g_bEnabled)
                PrintToChat(client, "%s%t", PLUGIN_PREFIX, "Phrase_Inactive");
            else if(g_iTier[client] == ACCESS_NO_ACCESS)
                PrintToChat(client, "%s%t", PLUGIN_PREFIX, "Phrase_Restricted");
            else if(client && IsClientInGame(client))
                Menu_Skins(client);
        }
    }
}

Menu_Skins(client)
{
    decl String:_sBuffer[128];
    new Handle:_hMenu = CreateMenu(MenuHandler_MenuSkins);
    Format(_sBuffer, sizeof(_sBuffer), "%T", "Menu_Title_Main", client);
    SetMenuTitle(_hMenu, _sBuffer);
    SetMenuPagination(_hMenu, MENU_NO_PAGINATION);
    SetMenuExitButton(_hMenu, true);

    if(g_bAppear[client])
        Format(_sBuffer, sizeof(_sBuffer), "%T", "Menu_Option_Disable", client);
    else
        Format(_sBuffer, sizeof(_sBuffer), "%T", "Menu_Option_Enable", client);
    AddMenuItem(_hMenu, "0", _sBuffer);
    
    DisplayMenu(_hMenu, client, MENU_TIME_FOREVER);
}

public MenuHandler_MenuSkins(Handle:menu, MenuAction:action, param1, param2)
{
    switch (action)
    {
        case MenuAction_End:
            CloseHandle(menu);
        case MenuAction_Select:
        {
            decl String:_sTemp[8];
            GetMenuItem(menu, param2, _sTemp, sizeof(_sTemp));

            switch(StringToInt(_sTemp))
            {
                case 0:
                {
                    if(!g_bAppear[param1])
                    {
                        g_bAppear[param1] = true;
                        PrintToChat(param1, "%s%t", PLUGIN_PREFIX, "Phrase_Enable");
                        SetClientCookie(param1, g_hCookie, "1");

                        if(g_bAlive[param1] && g_bChangable)
                            CreateTimer(0.0, Timer_Apply, GetClientUserId(param1), TIMER_FLAG_NO_MAPCHANGE);
                    }
                    else
                    {
                        g_bAppear[param1] = false;
                        PrintToChat(param1, "%s%t", PLUGIN_PREFIX, "Phrase_Disable");
                        SetClientCookie(param1, g_hCookie, "0");

                        if(g_bAlive[param1] && g_bChangable)
                        {
                            if(g_bForced[ACCESS_TIER_NONE] && g_iTier[param1] != ACCESS_TIER_NONE)
                            {
                                switch(g_iTeam[param1])
                                {
                                    case TEAM_RED:
                                        if(g_bRedAvailable[ACCESS_TIER_NONE])
                                            SetEntityModel(param1, g_sRedPaths[ACCESS_TIER_NONE][GetRandomInt(0, (g_iRedTotal[ACCESS_TIER_NONE] - 1))]);
                                    case TEAM_BLUE:
                                        if(g_bBlueAvailable[ACCESS_TIER_NONE])
                                            SetEntityModel(param1, g_sBluePaths[ACCESS_TIER_NONE][GetRandomInt(0, (g_iBlueTotal[ACCESS_TIER_NONE] - 1))]);
                                }
                            }
                            else
                            {
                                switch(g_iTeam[param1])
                                {
                                    case TEAM_RED:
                                        if(g_bRedAvailable[ACCESS_TIER_NONE])
                                            SetEntityModel(param1, g_sRedModels[GetRandomInt(0, 3)]);
                                    case TEAM_BLUE:
                                        if(g_bBlueAvailable[ACCESS_TIER_NONE])
                                            SetEntityModel(param1, g_sBlueModels[GetRandomInt(0, 3)]);
                                }
                            }
                        }
                    }

                    Menu_Skins(param1);
                }
            }
        }
    }
}

Void_LoadCookies(client)
{
    if(g_bForced[g_iTier[client]])
        g_bAppear[client] = true;
    else
    {
        decl String:g_sCookie[3];
        GetClientCookie(client, g_hCookie, g_sCookie, sizeof(g_sCookie));

        if(StrEqual(g_sCookie, ""))
        {
            SetClientCookie(client, g_hCookie, g_bDefault ? "1" : "0");
            g_bAppear[client] = g_bDefault;
        }
        else
            g_bAppear[client] = StringToInt(g_sCookie) ? true : false;
    }
        
    g_bLoaded[client] = true;
}

Void_SetDefaults()
{
    g_bEnabled = GetConVarInt(g_hEnabled) ? true : false;
    g_iBots = GetConVarInt(g_hBots);
    g_bDefault = GetConVarInt(g_hDefault) ? true : false;
    g_fDelay = GetConVarFloat(g_hDelay);
    g_fAllowed = GetConVarFloat(g_hAllowed);

    decl String:_sTemp[256];
    GetConVarString(g_hCommands, _sTemp, sizeof(_sTemp));
    ClearTrie(g_hTrie);
    new _iCount = ExplodeString(_sTemp, ", ", g_sCommands, 8, 32);
    for(new i = 0; i < _iCount; i++)
        SetTrieValue(g_hTrie, g_sCommands[i], _iCount);
}

Void_ReadModels()
{
    decl String:_sBuffer[1024];
    for(new i = ACCESS_TIER_ONE; i <= ACCESS_TIER_NONE; i++)
    {
        if(i == ACCESS_TIER_NONE)
            g_iAccess[ACCESS_TIER_NONE] = GetConVarInt(g_hFlag[i]);
        else
        {
            GetConVarString(g_hFlag[i], _sBuffer, sizeof(_sBuffer));
            new _iBuffer = ReadFlagString(_sBuffer);
            g_iAccess[i] = (_iBuffer > 0) ? _iBuffer : ACCESS_NO_ACCESS;
        }

        if((i == ACCESS_TIER_NONE && g_iAccess[ACCESS_TIER_NONE]) || g_iAccess[i] != ACCESS_NO_ACCESS)
        {
            GetConVarString(g_hPathT[i], _sBuffer, sizeof(_sBuffer));
            g_iRedTotal[i] = ExplodeString(_sBuffer, ", ", g_sRedPaths[i], NUM_PATHS, 256);
            g_bRedAvailable[i] = Bool_Check(g_sRedPaths[i][0]);
            
            GetConVarString(g_hPathCT[i], _sBuffer, sizeof(_sBuffer));
            g_iBlueTotal[i] = ExplodeString(_sBuffer, ", ", g_sBluePaths[i], NUM_PATHS, 256);
            g_bBlueAvailable[i] = Bool_Check(g_sBluePaths[i][0]);
        }
        else
        {
            g_iRedTotal[i] = 0;
            g_iBlueTotal[i] = 0;
            g_bRedAvailable[i] = false;
            g_bBlueAvailable[i] = false;
        }
    }
}

public Action_OnSettingsChange(Handle:cvar, const String:oldvalue[], const String:newvalue[])
{
    if(cvar == g_hEnabled)
        g_bEnabled = StringToInt(newvalue) ? true : false;
    else if(cvar == g_hBots)
        g_iBots = StringToInt(newvalue);
    else if(cvar == g_hDefault)
        g_bDefault = StringToInt(newvalue) ? true : false;
    else if(cvar == g_hDelay)
        g_fDelay = StringToFloat(newvalue);
    else if(cvar == g_hAllowed)
        g_fAllowed = StringToFloat(newvalue);
    else if(cvar == g_hCommands)
    {
        ClearTrie(g_hTrie);

        new _iCount = ExplodeString(newvalue, ", ", g_sCommands, 8, 32);
        for(new i = 0; i < _iCount; i++)
            SetTrieValue(g_hTrie, g_sCommands[i], _iCount);
    }
}

Void_ReadDownloads()
{
    new String:_sBuffer[256];
    BuildPath(Path_SM, _sBuffer, sizeof(_sBuffer), "configs/sm_autoskin.ini");
    new Handle:_hTemp = OpenFile(_sBuffer, "r");

    if(_hTemp != INVALID_HANDLE) 
    {
        new _iLength;
        while (ReadFileLine(_hTemp, _sBuffer, sizeof(_sBuffer)))
        {    
            _iLength = strlen(_sBuffer);
            if (_sBuffer[(_iLength - 1)] == '\n')
                _sBuffer[--_iLength] = '\0';

            TrimString(_sBuffer);
            if (!StrEqual(_sBuffer, "", false))
                Void_ReadFileFolder(_sBuffer);

            if (IsEndOfFile(_hTemp))
                break;
        }

        CloseHandle(_hTemp);
    }
}

Void_ReadFileFolder(String:_sPath[])
{
    new Handle:_hTemp = INVALID_HANDLE;
    new _iLength, FileType:_iFileType = FileType_Unknown;
    decl String:_sBuffer[256], String:_sLine[256];
    
    _iLength = strlen(_sPath);
    if (_sPath[_iLength-1] == '\n')
        _sPath[--_iLength] = '\0';

    TrimString(_sPath);
    if(DirExists(_sPath))
    {
        _hTemp = OpenDirectory(_sPath);
        while(ReadDirEntry(_hTemp, _sBuffer, sizeof(_sBuffer), _iFileType))
        {
            _iLength = strlen(_sBuffer);
            if (_sBuffer[_iLength-1] == '\n')
                _sBuffer[--_iLength] = '\0';
            TrimString(_sBuffer);

            if (!StrEqual(_sBuffer, "") && !StrEqual(_sBuffer, ".", false) && !StrEqual(_sBuffer,"..",false))
            {
                strcopy(_sLine, sizeof(_sLine), _sPath);
                StrCat(_sLine, sizeof(_sLine), "/");
                StrCat(_sLine, sizeof(_sLine), _sBuffer);

                if(_iFileType == FileType_File)
                    Void_ReadItem(_sLine);
                else
                    Void_ReadFileFolder(_sLine);
            }
        }
    }
    else
        Void_ReadItem(_sPath);

    if(_hTemp != INVALID_HANDLE)
        CloseHandle(_hTemp);
}

Void_ReadItem(String:_sBuffer[])
{
    decl String:_sTemp[3];
    new _iLength = strlen(_sBuffer);
    if (_sBuffer[_iLength-1] == '\n')
        _sBuffer[--_iLength] = '\0';
    TrimString(_sBuffer);

    strcopy(_sTemp, sizeof(_sTemp), _sBuffer);
    if(!StrEqual(_sBuffer, "", false) && StrContains(_sBuffer, "//", false) == -1)
    {
        g_bModel = (StrContains(_sBuffer, ".mdl", false) >= 0) ? true : false;
        if (FileExists(_sBuffer))
        {
            if(g_bModel)
                PrecacheModel(_sBuffer);

            AddFileToDownloadsTable(_sBuffer);
        }
        else
            LogError("Auto Skin: The file for %s doesn't exist!", _sBuffer);
    }
}
I compiled and now i test...
__________________
Sorry for the bad english please.


Last edited by Paparazziv2; 10-14-2011 at 21:25.
Paparazziv2 is offline
Send a message via MSN to Paparazziv2