Veteran Member
Join Date: May 2015
Location: SP, Brazil
|
08-30-2021
, 09:03
Re: Modify Models Menu
|
#10
|
This will show a message once a player spawn if he has changed teams
Untested
By the way, the 1-2 second delay you noticed is happening because of cs_player_models_api, this is to prevent the server from crashing but I didn't really test, not sure if that is still needed. You can decrease the delays by editing the following variables
Code:
// Delay between model changes (increase if getting SVC_BAD kicks)
new Float:g_ModelChangeDelay = 0.2
// Delay after roundstart (increase if getting kicks at round start)
new Float:g_RoundStartDelay = 2.0
Code:
#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <cs_player_models_api>
#include <hamsandwich>
#if !defined MAX_PLAYERS
const MAX_PLAYERS = 32
#endif
enum _:ModelInfo
{
Name[32],
CsTeams:Team,
}
new const g_eModels[][ModelInfo] =
{
{ "Special_CT", CS_TEAM_CT },
{ "Special_CT2", CS_TEAM_CT },
{ "Special_T", CS_TEAM_T },
{ "Special_T2", CS_TEAM_T }
}
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]
new CsTeams:g_iOldTeam[MAX_PLAYERS+1] = { CS_TEAM_UNASSIGNED, ... }
public plugin_init()
{
register_plugin("Models Menu", "1.0", "OciXCrom")
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
register_clcmd("say /vipskin", "Cmd_VipSkin")
register_clcmd("say_team /vipskin", "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
}
g_iOldTeam[id] = CS_TEAM_UNASSIGNED
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)
{
new CsTeams:team = cs_get_user_team(id)
if(!is_user_alive(id) || !(CS_TEAM_T <= team <= CS_TEAM_CT))
{
return
}
new iModel = g_iModel[id][team]
if(iModel == INVALID_SKIN)
{
ResetPlayerModel(id)
if (g_iOldTeam[id] != CS_TEAM_UNASSIGNED && g_iOldTeam[id] != team)
CC_SendMessage(id, "You have changed teams, please select your model again.")
}
else
{
cs_set_player_model(id, g_eModels[iModel][Name])
}
g_iOldTeam[id] = team
}
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")
for(new CsTeams:iTeam = cs_get_user_team(id), szNum[5], i; i < sizeof(g_eModels); i++)
{
if(g_eModels[i][Team] == iTeam)
{
num_to_str(i, szNum, charsmax(szNum))
menu_additem(iMenu, g_eModels[i][Name], 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_player_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_generic(model)
}
ResetPlayerModel(id)
{
new buffer[32], model
new CsTeams:team = cs_get_user_team(id, model)
switch (team)
{
case CS_TEAM_T:
{
switch (model)
{
case CS_T_TERROR: copy(buffer, charsmax(buffer), "terror")
case CS_T_LEET: copy(buffer, charsmax(buffer), "leet")
case CS_T_ARCTIC: copy(buffer, charsmax(buffer), "arctic")
case CS_T_GUERILLA: copy(buffer, charsmax(buffer), "guerilla")
case CZ_T_MILITIA: copy(buffer, charsmax(buffer), "militia")
default: copy(buffer, charsmax(buffer), "terror")
}
}
case CS_TEAM_CT:
{
switch (model)
{
case CS_CT_URBAN: copy(buffer, charsmax(buffer), "urban")
case CS_CT_GSG9: copy(buffer, charsmax(buffer), "gsg9")
case CS_CT_GIGN: copy(buffer, charsmax(buffer), "gign")
case CS_CT_SAS: copy(buffer, charsmax(buffer), "sas")
case CS_CT_VIP: copy(buffer, charsmax(buffer), "vip")
case CZ_CT_SPETSNAZ: copy(buffer, charsmax(buffer), "spetsnaz")
default: copy(buffer, charsmax(buffer), "urban")
}
}
}
cs_set_player_model(id, buffer)
}
__________________
Last edited by CrazY.; 08-30-2021 at 09:12.
|
|