Raised This Month: $ Target: $400
 0% 

Change models in AddToFullPack - CSDM FFA


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
joaquimandrade
Veteran Member
Join Date: Dec 2008
Location: Portugal
Old 11-24-2009 , 19:48   Re: Change models in AddToFullPack
Reply With Quote #9

Based on Exolent's idea of creating extra entities, here goes a solution: (Didn't have to update player animations but, had to create an extra entity for the weapon carried)

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <cstrike>

enum EntityPart
{
    
Body,
    
Weapon
}

new 
EntitiesOwner

new CsInternalModel:InternalModelChangeTable[CsInternalModel] = 
{
    
_:CS_DONTCHANGE
    
_:CS_T_ARCTIC,//CS_CT_URBAN
    
_:CS_CT_GSG9,//CS_T_TERROR
    
_:CS_CT_GIGN,//CS_T_LEET
    
_:CS_CT_URBAN,//CS_T_ARCTIC
    
_:CS_T_TERROR,//CS_CT_GSG9
    
_:CS_T_LEET,//CS_CT_GIGN
    
_:CS_T_GUERILLA,//CS_CT_SAS
    
_:CS_CT_SAS,//CS_T_GUERILLA
    
_:CS_CT_VIP
    
_:CZ_CT_SPETSNAZ,//CZ_T_MILITIA
    
_:CZ_T_MILITIA,//CZ_CT_SPETSNAZ
}

new 
CsTeams:InternalModelChangeTableTeam[CsInternalModel] = 
{
    
_:CS_TEAM_UNASSIGNED
    
_:CS_TEAM_CT,//CS_CT_URBAN
    
_:CS_TEAM_T,//CS_T_TERROR
    
_:CS_TEAM_T,//CS_T_LEET
    
_:CS_TEAM_T,//CS_T_ARCTIC
    
_:CS_TEAM_CT,//CS_CT_GSG9
    
_:CS_TEAM_CT,//CS_CT_GIGN
    
_:CS_TEAM_CT,//CS_CT_SAS
    
_:CS_TEAM_T,//CS_T_GUERILLA
    
_:CS_TEAM_CT
    
_:CS_TEAM_T,//CZ_T_MILITIA
    
_:CS_TEAM_CT,//CZ_CT_SPETSNAZ
}

new 
CsInternalModel:TeamsDefaultInternalModel[CsTeams] =
{
    
0,
    
_:CS_T_GUERILLA,
    
_:CS_CT_SAS,
    
0
}

new 
InternalModelModels[CsInternalModel][] = 
{
    
"",
    
"urban",
    
"terror",
    
"leet",
    
"arctic",
    
"gsg9",
    
"gign",
    
"sas",
    
"guerilla",
    
"vip",
    
"militia",
    
"spetsnaz"
}

new 
InternalModelModelIDs[CsInternalModel

const 
OffsetInternalModel 126

new Trie:ModelToCsInternalModel

new CsTeams:TeamsSum CS_TEAM_T CS_TEAM_CT

public plugin_precache()
{
    
ModelToCsInternalModel TrieCreate()
    
    new 
model[50]
    
    for(new 
CsInternalModel:CS_CT_URBAN;i<CsInternalModel;i++)
    {
        
format(model,charsmax(model),"models/player/%s/%s.mdl",InternalModelModels[i],InternalModelModels[i])
        
        
TrieSetCell(ModelToCsInternalModel,model,i)
    }
    
    
register_forward(FM_PrecacheModel,"PrecacheModel",1)
}

public 
PrecacheModel(model[])
{
    static 
CsInternalModel:internalModel 
    
    
if(TrieGetCell(ModelToCsInternalModel,model,internalModel))
    {
        
InternalModelModelIDs[internalModel] = get_orig_retval()
    }
}

public 
plugin_init()
{
    
register_forward(FM_AddToFullPack,"AddToFullPackPre",0);
    
register_forward(FM_AddToFullPack,"AddToFullPackPost",1);
    
    
set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
}

public 
plugin_cfg()
{
    
EntitiesOwner create_entity("info_target")
    
    for(new 
EntityPart:i=Body;i<EntityPart;i++)
    {
        for(new 
j=1;j<=get_maxplayers();j++)
        {
            new 
ent create_entity("info_target")
            
            
set_pev(ent,pev_owner,EntitiesOwner)
            
set_pev(ent,pev_aiment,j)
            
set_pev(ent,pev_movetype,MOVETYPE_FOLLOW)
            
set_pev(ent,pev_solid,SOLID_NOT)
            
            
entity_set_model(ent,"models/player/leet/leet.mdl");
                                
            
set_pev(ent,pev_iuser1,_:i)
        }
    }
}

public 
AddToFullPackPre(es,e,ent,host,hostflags,player,pSet)
{
    if(!
player)
    {
        if(
is_valid_ent(ent) && (pev(ent,pev_owner) == EntitiesOwner))
        {
            new 
aiment pev(ent,pev_aiment)
            
            if((
aiment == host) || !is_user_connected(aiment) || (pev(aiment,pev_effects) & EF_NODRAW) || (cs_get_user_team(host) != cs_get_user_team(aiment)) )
            {
                
forward_return(FMV_CELL,0)
                return 
FMRES_SUPERCEDE
            
}
        }
    }
    
    return 
FMRES_IGNORED
}
public 
AddToFullPackPost(es,e,ent,host,hostflags,player,pSet)
{
    if(!
player && get_orig_retval())
    {
        if(
is_valid_ent(ent) && (pev(ent,pev_owner) == EntitiesOwner))
        {
            new 
aiment pev(ent,pev_aiment)
            
            if(
pev(ent,pev_iuser1) == _:Weapon)
            {
                static 
weaponModel[50]
                
pev(aiment,pev_weaponmodel2,weaponModel,charsmax(weaponModel))
            
                if(
weaponModel[0])
                {
                    
set_es(es,ES_ModelIndex,engfunc(EngFunc_ModelIndex,weaponModel))
                    
set_es(es,ES_Sequence,pev(aiment,pev_weaponanim))
                }
                else
                {
                    
set_es(es,ES_Effects,EF_NODRAW)
                }        
            }
            else
            {
                new 
CsTeams:wantedTeam TeamsSum cs_get_user_team(host)
                
                new 
CsInternalModel:internalModel CsInternalModel:get_pdata_int(aiment,OffsetInternalModel)
                
                if(
internalModel)
                {
                    
internalModel InternalModelChangeTable[internalModel]
                    
                    if(
InternalModelChangeTableTeam[internalModel] != wantedTeam)
                    {
                        
internalModel TeamsDefaultInternalModel[wantedTeam]
                    }
                }
                else
                {
                    
internalModel TeamsDefaultInternalModel[wantedTeam]
                }
                
                
set_es(es,ES_ModelIndex,InternalModelModelIDs[internalModel])
            }
        }
    }
    else if(
is_user_connected(ent) && (ent != host) && (cs_get_user_team(host) == cs_get_user_team(ent)))
    {
        
set_es(es,ES_RenderMode,kRenderTransAlpha)
        
set_es(es,ES_RenderAmt,0)
    }

Don't know if it does affect performance on big servers. Maybe I'll post it on new plugin submissions after testing it in a real server. Optimizations accepted
joaquimandrade is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:43.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode