#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
Handle kvsteam;
char g_TModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
g_TArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
g_CTModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
g_CTArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH];
bool g_SetSkin[MAXPLAYERS+1];
public Plugin myinfo =
{
name = "Personal Skin",
author = "LeXuS",
description = "Personal skins for players.",
version = "1.0.2",
url = "http://hlmod.ru/forum/plaginy-dlya-sourcemod/27549-cs-go-personal-skin-v1-0-a.html"
};
public void OnPluginStart()
{
kvsteam = CreateKeyValues("SteamIDs");
if(!FileToKeyValues(kvsteam, "addons/sourcemod/configs/sm_personal_skin/steamids.ini"))
SetFailState("Failed to load addons/sourcemod/configs/sm_personal_skin/steamids.ini");
HookEvent("player_spawn", Player_Spawn);
}
public void OnMapStart()
{
Handle file = OpenFile("addons/sourcemod/configs/sm_personal_skin/downloads.txt", "r");
if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/sm_personal_skin/downloads.txt");
char path[PLATFORM_MAX_PATH];
while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
{
TrimString(path);
if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
}
CloseHandle(file);
}
public void OnClientPutInServer(client)
{
if(client)
{
g_TModelID[client][0] = 0;
g_TArmsID[client][0] = 0;
g_CTModelID[client][0] = 0;
g_CTArmsID[client][0] = 0;
if(IsFakeClient(client)) g_SetSkin[client] = false;
else
{
char authid[32];
GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));
KvRewind(kvsteam);
if((g_SetSkin[client] = KvJumpToKey(kvsteam, authid, false)))
{
KvGetString(kvsteam, "model_t", g_TModelID[client], PLATFORM_MAX_PATH);
KvGetString(kvsteam, "arms_t", g_TArmsID[client], PLATFORM_MAX_PATH);
KvGetString(kvsteam, "model_ct", g_CTModelID[client], PLATFORM_MAX_PATH);
KvGetString(kvsteam, "arms_ct", g_CTArmsID[client], PLATFORM_MAX_PATH);
if(g_TModelID[client][0]) PrecacheModel(g_TModelID[client], true);
if(g_TArmsID[client][0]) PrecacheModel(g_TArmsID[client], true);
if(g_CTModelID[client][0]) PrecacheModel(g_CTModelID[client], true);
if(g_CTArmsID[client][0]) PrecacheModel(g_CTArmsID[client], true);
}
}
}
}
public void OnClientDisconnect(client)
{
if(client)
{
g_TModelID[client][0] = 0;
g_TArmsID[client][0] = 0;
g_CTModelID[client][0] = 0;
g_CTArmsID[client][0] = 0;
}
}
public void Player_Spawn(Handle event, char[] name, bool dontBroadcast)
{
int userId = GetEventInt(event, "userid");
int client = GetClientOfUserId(userId);
if(g_SetSkin[client])
{
CreateTimer(2.0, TimerCallBack, userId, TIMER_FLAG_NO_MAPCHANGE);
}
}
public Action TimerCallBack(Handle hTimer, any userId)
{
int client = GetClientOfUserId(userId);
if(client != 0 && IsClientInGame(client) && IsPlayerAlive(client))
{
switch(GetClientTeam(client))
{
case 2:
{
if(g_TModelID[client][0]) SetEntityModel(client, g_TModelID[client]);
if(g_TArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_TArmsID[client]);
}
case 3:
{
if(g_CTModelID[client][0]) SetEntityModel(client, g_CTModelID[client]);
if(g_CTArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_CTArmsID[client]);
}
}
}
return Plugin_Stop;
}