Вот этот способ не предлагать, вызывает Reliable chanel overflow
[pawn]
- cs_set_user_model(id, "****")
Так же вот этот способ не подходит, конфликтует с многими плагинами на сервере!
Модельки налаживаются друг на друга!
[pawn]
- [pawn]#include < amxmodx >
- #include < fakemeta >
- #define PLUGIN "Shooce models"
- #define VERSION "0.1"
- #define AUTHOR "Bos93"
- enum
- {
- FM_CS_TEAM_UNASSIGNED = 0,
- FM_CS_TEAM_T,
- FM_CS_TEAM_CT,
- FM_CS_TEAM_SPECTATOR
- }
- const OFFSET_LINUX = 5
- const OFFSET_CSTEAMS = 114
- #define MAXPLAYERS 32
- #define IsValidPrivateData(%0) ( pev_valid( %0 ) == 2 )
- #define IsConnected(%0) ( 1 <= %0 <= g_iMaxPlayers && ( g_bsIsConnected & ( 1 << %0 ) ) )
- #define PLAYERMODEL_CLASSNAME "ent_playermodel"
- #define MODELS_T "viplostsanta"
- new g_player_model[ MAXPLAYERS + 1 ] [ MAXPLAYERS ]
- new g_ent_playermodel[ MAXPLAYERS + 1 ]
- new g_iMaxPlayers
- new g_bsIsConnected
- public plugin_init ( )
- {
- register_plugin(PLUGIN,VERSION,AUTHOR);
- register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
- register_logevent("logevent_round_end", 2, "1=Round_End");
- g_iMaxPlayers = get_maxplayers( );
- }
- public plugin_precache()
- {
- new modelpath_T[100]
- formatex(modelpath_T, sizeof modelpath_T - 1, "models/player/%s/%s.mdl", MODELS_T, MODELS_T)
- engfunc(EngFunc_PrecacheModel, modelpath_T)
- }
- public client_putinserver( Player )
- g_bsIsConnected |= ( 1 << Player );
- public client_disconnect( Player )
- g_bsIsConnected &= ~( 1 << Player );
- public event_round_start ( )
- {
- for(new i = 1; i <= g_iMaxPlayers; i++)
- {
- if(!IsConnected(i))
- continue
- if (fm_cs_get_user_team(i) == FM_CS_TEAM_CT)
- continue
- copy(g_player_model[i], sizeof g_player_model[] - 1, MODELS_T)
- fm_set_playermodel_ent(i, g_player_model[i])
- }
- }
- public logevent_round_end ( )
- {
- for(new i = 1; i <= g_iMaxPlayers; i++)
- {
- if(!IsConnected(i))
- continue
- fm_remove_model_ents(i)
- }
- }
- stock fm_set_playermodel_ent(id, const modelname[])
- {
- // Make original player entity invisible
- set_pev(id, pev_rendermode, kRenderTransTexture)
- // This is not 0 because it would hide some effects when firing weapons
- set_pev(id, pev_renderamt, 1.0)
- // Since we're passing the short model name to the function
- // we need to make the full path out of it
- static modelpath[100]
- formatex(modelpath, sizeof modelpath - 1, "models/player/%s/%s.mdl", modelname, modelname)
- // Check if the entity assigned to this player exists
- if (!pev_valid(g_ent_playermodel[id]))
- {
- // If it doesn't, proceed to create a new one
- g_ent_playermodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
- // If it failed to create for some reason, at least this will prevent further "Invalid entity" errors...
- if (!pev_valid(g_ent_playermodel[id])) return;
- // Set its classname
- set_pev(g_ent_playermodel[id], pev_classname, PLAYERMODEL_CLASSNAME)
- // Make it follow the player
- set_pev(g_ent_playermodel[id], pev_movetype, MOVETYPE_FOLLOW)
- set_pev(g_ent_playermodel[id], pev_aiment, id)
- set_pev(g_ent_playermodel[id], pev_owner, id)
- }
- // Entity exists now, set its model
- engfunc(EngFunc_SetModel, g_ent_playermodel[id], modelpath)
- }
- stock fm_remove_model_ents(id)
- {
- // Make the player visible again
- set_pev(id, pev_rendermode, kRenderNormal)
- // Remove "playermodel" ent if present
- if (pev_valid(g_ent_playermodel[id]))
- {
- engfunc(EngFunc_RemoveEntity, g_ent_playermodel[id])
- g_ent_playermodel[id] = 0
- }
- }
- stock fm_cs_get_user_team(id)
- {
- if( !IsValidPrivateData( id ) )
- return FM_CS_TEAM_UNASSIGNED;
- return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
- }