Admin Models

Created Diff never expires
9 Entfernungen
Zeilen
Gesamt
Entfernt
Wörter
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
118 Zeilen
19 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Wörter
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
123 Zeilen
// Copyright © 2016 Vaqtincha
// Copyright © 2016 Vaqtincha


#include <amxmodx>
#include <amxmodx>
#include <reapi>
#include <reapi>


enum player_models { szTTModel[64], szCTModel[64], iFlag }
enum player_models { szTTModel[64], szCTModel[64], iFlag }




/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/


#define SET_MODELINDEX
#define SET_MODELINDEX
#define MAX_MODEL_PATH_LEN 128
#define MAX_MODEL_PATH_LEN 128


/// FORMAT: "Terrorist Model" "Counter-Terrorist Model" "Access Flag"
/// FORMAT: "Terrorist Model" "Counter-Terrorist Model" "Access Flag"


new const g_eModelsData[][player_models] =
new const g_eModelsData[][player_models] =
{
{
{ "snowleet", "lolgign", ADMIN_LEVEL_B },
{ "vip_t_server500", "vip_ct_server500", ADMIN_LEVEL_H },
{ "viptt", "vipct", ADMIN_LEVEL_H },
//{ "new_year_t", "new_year_ct", ADMIN_LEVEL_H },
{ "bomjtt", "bomjct", ADMIN_ALL },
// { "viptt", "vipct", ADMIN_LEVEL_H },
// { "bomjtt", "bomjct", ADMIN_ALL },


/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/


{"", "", -1} // don't touch it!!
{"", "", -1} // don't touch it!!
}
}


#define IsValidArrayIndex(%1) (0 <= %1 <= sizeof(g_eModelsData)-1)
#define IsValidArrayIndex(%1) (0 <= %1 <= sizeof(g_eModelsData)-1)


#if defined SET_MODELINDEX
#if defined SET_MODELINDEX
new g_iTTModelIndex[sizeof(g_eModelsData)], g_iCTModelIndex[sizeof(g_eModelsData)]
new g_iTTModelIndex[sizeof(g_eModelsData)], g_iCTModelIndex[sizeof(g_eModelsData)]
#endif
#endif




public plugin_precache()
public plugin_precache()
{
{
if(g_eModelsData[0][iFlag] == -1)
if(g_eModelsData[0][iFlag] == -1)
{
{
set_fail_state("Array g_eModelsData are empty!")
set_fail_state("Array g_eModelsData are empty!")
return
return
}
}


for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
{
{
#if defined SET_MODELINDEX
#if defined SET_MODELINDEX
g_iTTModelIndex = precache_player_model(g_eModelsData[szTTModel])
g_iTTModelIndex[i] = precache_player_model(g_eModelsData[i][szTTModel])
g_iCTModelIndex = precache_player_model(g_eModelsData[szCTModel])
g_iCTModelIndex[i] = precache_player_model(g_eModelsData[i][szCTModel])
#else
#else
precache_player_model(g_eModelsData[szTTModel])
precache_player_model(g_eModelsData[i][szTTModel])
precache_player_model(g_eModelsData[szCTModel])
precache_player_model(g_eModelsData[i][szCTModel])
#endif
#endif
}
}
}
}


public plugin_init()
public plugin_init()
{
{
register_plugin("[ReAPI] Admin Models", "0.0.2", "Vaqtincha")
register_plugin("[ReAPI] Admin Models", "0.0.2", "Vaqtincha")


RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "SetClientUserInfoModel", .post = false)
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "SetClientUserInfoModel", .post = false)
}
}




public SetClientUserInfoModel(const pPlayer, infobuffer[], szNewModel[])
public SetClientUserInfoModel(const pPlayer, infobuffer[], szNewModel[])
{
{
new iArrayIndex = get_user_model_by_flag(get_user_flags(pPlayer))
new iArrayIndex = get_user_model_by_flag(get_user_flags(pPlayer))


if(!IsValidArrayIndex(iArrayIndex))
if(!IsValidArrayIndex(iArrayIndex))
return HC_CONTINUE
return HC_CONTINUE
switch(get_member(pPlayer, m_iTeam))
switch(get_member(pPlayer, m_iTeam))
{
{
case TEAM_TERRORIST: {
case TEAM_TERRORIST: {
#if defined SET_MODELINDEX
#if defined SET_MODELINDEX
set_member(pPlayer, m_modelIndexPlayer, g_iTTModelIndex[iArrayIndex])
set_member(pPlayer, m_modelIndexPlayer, g_iTTModelIndex[iArrayIndex])
#endif
#endif
SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szTTModel])
SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szTTModel])
}
}
case TEAM_CT: {
case TEAM_CT: {
#if defined SET_MODELINDEX
#if defined SET_MODELINDEX
set_member(pPlayer, m_modelIndexPlayer, g_iCTModelIndex[iArrayIndex])
set_member(pPlayer, m_modelIndexPlayer, g_iCTModelIndex[iArrayIndex])
#endif
#endif
SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szCTModel])
SetHookChainArg(3, ATYPE_STRING, g_eModelsData[iArrayIndex][szCTModel])
}
}
default: return HC_CONTINUE
default: return HC_CONTINUE
}
}


return HC_CONTINUE
return HC_CONTINUE
}
}




get_user_model_by_flag(const iUserFlags)
get_user_model_by_flag(const iUserFlags)
{
{
const INVALID_INDEX = -1
const INVALID_INDEX = -1


if(iUserFlags & (1<<29)) {
return INVALID_INDEX
}

for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
for(new i = 0; i < sizeof(g_eModelsData)-1; i++)
{
{
if(iUserFlags & g_eModelsData[iFlag] || g_eModelsData[iFlag] == ADMIN_ALL)
if(iUserFlags & g_eModelsData[i][iFlag] || g_eModelsData[i][iFlag] == ADMIN_ALL)
return i
return i
}
}


return INVALID_INDEX // non admin player
return INVALID_INDEX // non admin player
}
}


precache_player_model(const szModel[])
precache_player_model(const szModel[])
{
{
new szFileToPrecache[MAX_MODEL_PATH_LEN], szErrMsg[MAX_MODEL_PATH_LEN + 64]
new szFileToPrecache[MAX_MODEL_PATH_LEN], szErrMsg[MAX_MODEL_PATH_LEN + 64]


formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel)
formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel)


if(!file_exists(szFileToPrecache))
if(!file_exists(szFileToPrecache))
{
{
formatex(szErrMsg, charsmax(szErrMsg), "[Admin Models] ERROR: Model ^"%s^" not found!", szFileToPrecache)
formatex(szErrMsg, charsmax(szErrMsg), "[Admin Models] ERROR: Model ^"%s^" not found!", szFileToPrecache)
set_fail_state(szErrMsg)
set_fail_state(szErrMsg)
return 0
return 0
}
}


return precache_model(szFileToPrecache)
return precache_model(szFileToPrecache)
}
}