PHP Code:
#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <hamsandwich>
#if !defined MAX_PLAYERS
const MAX_PLAYERS = 32
#endif
enum _:ModelInfo
{
Name[32],
CsTeams:Team,
Sex
}
enum {
Male,
Female
}
new const g_eModels[][ModelInfo] =
{
{ "Special_CT", CS_TEAM_CT, Male },
{ "Special_CT2", CS_TEAM_CT, Female },
{ "Special_T", CS_TEAM_T, Female },
{ "Special_T2", CS_TEAM_T, Male }
}
const INVALID_SKIN = -1
const MENU_ACCESS_FLAG = ADMIN_LEVEL_H
const Float:CONNECT_MSG_DELAY = 5.0
new g_iModel[MAX_PLAYERS + 1][CsTeams]
public plugin_init()
{
register_plugin("Models Menu", "1.0", "OciXCrom")
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
register_clcmd("say /vip", "Cmd_VipSkin")
register_clcmd("say_team /vip", "Cmd_VipSkin")
CC_SetPrefix("&x04[Prefix]")
}
public plugin_precache()
{
for(new i; i < sizeof(g_eModels); i++)
{
precache_player_model(g_eModels[i][Name])
}
}
public client_putinserver(id)
{
for(new CsTeams:iTeam = CS_TEAM_UNASSIGNED; iTeam <= CS_TEAM_SPECTATOR; iTeam++)
{
g_iModel[id][iTeam] = INVALID_SKIN
}
set_task(CONNECT_MSG_DELAY, "DisplayMessage", id)
}
public DisplayMessage(id)
{
if(is_user_connected(id) && has_menu_access(id))
{
CC_SendMessage(id, "Type &x03/vipskin &x01to open the &x04VIP Skin Menu")
}
}
public OnPlayerSpawn(id)
{
if(!is_user_alive(id))
{
return
}
new iModel = g_iModel[id][cs_get_user_team(id)]
if(iModel == INVALID_SKIN)
{
return
}
cs_set_user_model(id, g_eModels[iModel][Name])
}
public Cmd_VipSkin(id)
{
if(!has_menu_access(id))
{
CC_SendMessage(id, "Only vips can open this menu, sorry!")
return PLUGIN_HANDLED
}
new iMenu = menu_create("Select Your Skin", "VipSkin_Handler")
static i, CsTeams:iTeam, szNum[5],szMenu[62];
iTeam = cs_get_user_team(id);
for(i = 0; i < sizeof g_eModels; i++)
{
//Team
if(g_eModels[i][Team] != iTeam)
continue;
formatex(szMenu, charsmax(szMenu), "%s \y[%s]", g_eModels[i][Name], g_eModels[i][Sex] != Female ? "Male" : "Female");
num_to_str(i, szNum, charsmax(szNum));
menu_additem(iMenu, szMenu, szNum);
}
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public VipSkin_Handler(id, iMenu, iItem)
{
if(!has_menu_access(id))
{
goto @destroy
}
static _unused[1]
new szModelId[5]
menu_item_getinfo(iMenu, iItem, _unused[0], szModelId, charsmax(szModelId), _unused, charsmax(_unused), _unused[0])
new iModel = str_to_num(szModelId)
new CsTeams:iTeam = cs_get_user_team(id)
if(g_eModels[iModel][Team] != iTeam)
{
goto @destroy
}
g_iModel[id][iTeam] = iModel
CC_SendMessage(id, "You have selected the skin &x04%s", g_eModels[iModel][Name])
if(is_user_alive(id))
{
cs_set_user_model(id, g_eModels[iModel][Name])
}
@destroy:
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
bool:has_menu_access(id)
{
return (get_user_flags(id) & MENU_ACCESS_FLAG) != 0
}
precache_player_model(const szModel[], &id = 0)
{
new model[128]
formatex(model, charsmax(model), "models/player/%s/%sT.mdl", szModel, szModel)
if(file_exists(model))
id = precache_generic(model)
static const extension[] = "T.mdl"
#pragma unused extension
copy(model[strlen(model) - charsmax(extension)], charsmax(model), ".mdl")
return precache_model(model)
}