Raised This Month: $32 Target: $400
 8% 

[Guía] Setear modelos con Player Models API


  
 
 
Thread Tools Display Modes
Author Message
DJHD!
Veteran Member
Join Date: Dec 2009
Location: Santiago, Chile
Old 12-29-2012 , 21:32   [Guía] Setear modelos con Player Models API
#1

Últimamente he visto varia gente que no sabe como setear los modelos de una forma mas optimizada o como quieran llamarle o que nos les tire el famoso SVC_BAD bueno hoy les enseñare o guiaré a como hacerlo.

Bueno primero que todo para que esta guía les funcione tienen que bajarse el API de MeRcyLeZZ
Link: http://forums.alliedmods.net/showthread.php?t=161255

Luego de descargarlo poner cada archivo donde tiene que ir

cs_player_models_api.inc : en la carpeta includes
cs_player_models_api.sma : Obviamente hay que compilarlo al momento de compilarlo lo agregan a plugins-zplague.ini de la siguiente manera

Code:
; - Quick tips -
; * Rename this file to disabled-zplague.ini to turn the mod off
; * Rename it back to plugins-zplague.ini to turn it on
; * Put a semi-colon in front of a plugin to disable it
; * Remove a semi-colon to re-enable a plugin
; * Add the word debug after a plugin to place it in debug mode

; Main plugin
cs_player_models_api.amxx ; Lo agregan antes del zombie_plague40.amxx o como lo tengan puesto...
zombie_plague40.amxx

; Add sub-plugins, custom zombie classes, and extra items here
zp_zclasses40.amxx
Luego de esto añaden el include dentro del ZP : #include <cs_player_models_api>

Si lo hacen en un Plugin que no sea ZP hacen lo mismo pero siempre el plugin principal que usen lo dejan abajo del API.

Lo primero que deben hacer es eliminar la forma que setea los models el ZP:

Primero buscan: stock fm_cs_set_user_model_index

Y eliminan todo ese stock hasta el otro stock que se llama fm_set_playermodel_ent luego de eso bajan un poco y esta
el stock fm_set_weaponmodel_ent lo eliminan tambien y siguen eliminando hasta el stock fm_user_model_update

Se me olvidaba despues de eso vayan al public fw_ClientDisconnect y mas abajo borran esto:

PHP Code:
    if (g_handle_models_on_separate_ent)
    {
        
// Remove custom model entities
        
fm_remove_model_ents(id)
    } 
Despues van al public de la forward fw_ClientUserInfoChanged y lo dejan así:

PHP Code:
// Forward Client User Info Changed -prevent players from changing models-
public fw_ClientUserInfoChanged(id)
    
get_user_name(idg_playername[id], charsmax(g_playername[])) 
Luego van // CS Player PData Offsets (win32)
que esta casi en el principio del plugin y eliminan el offset const OFFSET_MODELINDEX = 491 // Orangutanz
no creo que sea muy importante eliminarlo pero para que no tengan cosas al pedo lo hacen xDD

Despues buscan el variable g_ent_playermodel y lo eliminan tambien buscan g_models_targettime y g_modelchange_delay
y las eliminan tambien eliminan new const MODEL_ENT_CLASSNAME[] = "player_model" y Float:g_modelchange_delay, g_set_modelindex_offset, g_handle_models_on_separate_ent, g_ent_playermodel[33], Float:g_models_targettime

tambien eliminan if (!g_handle_models_on_separate_ent) register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
obviamente su public tambien lo eliminan

luego de eso buscan if (g_handle_models_on_separate_ent) register_message(get_user_msgid("ClCorpse"), "message_clcorpse")
tambien lo borran y luego van a su publica y tambien lo borran xD

Ahora van al case SECTION_SVC_BAD: y lo eliminan.

Luego se van al public frost_explode bajan hasta
PHP Code:
        // Light blue glow while frozen
        
if (g_handle_models_on_separate_ent)
            
fm_set_rendering(g_ent_playermodel[victim], kRenderFxGlowShell0100200kRenderNormal25)
        else
            
fm_set_rendering(victimkRenderFxGlowShell0100200kRenderNormal25
y lo dejan así
PHP Code:
        // Light blue glow while frozen
        
fm_set_rendering(victimkRenderFxGlowShell0100200kRenderNormal25
Despues van a remove_freeze(id)

y cambian:
PHP Code:
    // Restore rendering
    
if (g_handle_models_on_separate_ent)
    {
        
// Nemesis or Survivor glow / remove glow on player model entity
        
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow))
            
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell25500kRenderNormal25)
        else if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
            
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell00255kRenderNormal25)
        else
            
fm_set_rendering(g_ent_playermodel[id])
    }
    else
    {
        
// Nemesis or Survivor glow / remove glow
        
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow))
            
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
        else if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
            
fm_set_rendering(idkRenderFxGlowShell00255kRenderNormal25)
        else
            
fm_set_rendering(id)
    } 
Por esto:
PHP Code:
    // Nemesis or Survivor glow / remove glow
    
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow))
        
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
    else if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
        
fm_set_rendering(idkRenderFxGlowShell00255kRenderNormal25)
    else
        
fm_set_rendering(id
Ahora van a replace_weapon_models(id, weaponid)

y Bajan hasta el ultimo y lo dejan así
PHP Code:
    // Update model on weaponmodel ent
    
fm_set_weaponmodel_ent(id
Luego de eso se van a fw_PlayerSpawn_Post

bajan un poco y encontraran // Custom models stuff
borran todo lo que esta debajo y lo dejan así

PHP Code:
    // Custom models stuff
    
static Rand
            
    
// Set the right model, after checking that we don't already have it
    
if (get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
    {
        
iRand random_num(0ArraySize(model_admin_human) - 1)
        
ArrayGetString(model_admin_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        
iRand random_num(0ArraySize(model_human) - 1)
        
ArrayGetString(model_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
        
    
// Remove glow
    
fm_set_rendering(id
Lo siguiente que tienen que hacer es ir a humanme(id, survivor, silentmode)

en el public bajan un poco y veran la parte que dice Custom model stuff cambian esto:

PHP Code:
    // Custom models stuff
    
static currentmodel[32], tempmodel[32], already_has_modeliiRandsize
    already_has_model 
false
    
    
if (g_handle_models_on_separate_ent)
    {
        
// Set the right model
        
if (g_survivor[id])
        {
            
iRand random_num(0ArraySize(model_survivor) - 1)
            
ArrayGetString(model_survivoriRandg_playermodel[id], charsmax(g_playermodel[]))
            if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_survivoriRand))
        }
        else
        {
            if (
get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
            {
                
iRand random_num(0ArraySize(model_admin_human) - 1)
                
ArrayGetString(model_admin_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_admin_humaniRand))
            }
            else
            {
                
iRand random_num(0ArraySize(model_human) - 1)
                
ArrayGetString(model_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_humaniRand))
            }
        }
        
        
// Set model on player model entity
        
fm_set_playermodel_ent(id)
        
        
// Set survivor glow / remove glow on player model entity, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
                
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell00255kRenderNormal25)
            else
                
fm_set_rendering(g_ent_playermodel[id])
        }
    }
    else
    {
        
// Get current model for comparing it with the current one
        
fm_cs_get_user_model(idcurrentmodelcharsmax(currentmodel))
        
        
// Set the right model, after checking that we don't already have it
        
if (g_survivor[id])
        {
            
size ArraySize(model_survivor)
            for (
0sizei++)
            {
                
ArrayGetString(model_survivoritempmodelcharsmax(tempmodel))
                if (
equal(currentmodeltempmodel)) already_has_model true
            
}
            
            if (!
already_has_model)
            {
                
iRand random_num(0size 1)
                
ArrayGetString(model_survivoriRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_survivoriRand))
            }
        }
        else
        {
            if (
get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
            {
                
size ArraySize(model_admin_human)
                for (
0sizei++)
                {
                    
ArrayGetString(model_admin_humanitempmodelcharsmax(tempmodel))
                    if (
equal(currentmodeltempmodel)) already_has_model true
                
}
                
                if (!
already_has_model)
                {
                    
iRand random_num(0size 1)
                    
ArrayGetString(model_admin_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
                    if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_admin_humaniRand))
                }
            }
            else
            {
                
size ArraySize(model_human)
                for (
0sizei++)
                {
                    
ArrayGetString(model_humanitempmodelcharsmax(tempmodel))
                    if (
equal(currentmodeltempmodel)) already_has_model true
                
}
                
                if (!
already_has_model)
                {
                    
iRand random_num(0size 1)
                    
ArrayGetString(model_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
                    if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_humaniRand))
                }
            }
        }
        
        
// Need to change the model?
        
if (!already_has_model)
        {
            
// An additional delay is offset at round start
            // since SVC_BAD is more likely to be triggered there
            
if (g_newround)
                
set_task(5.0 g_modelchange_delay"fm_user_model_update"id+TASK_MODEL)
            else
                
fm_user_model_update(id+TASK_MODEL)
        }
        
        
// Set survivor glow / remove glow, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
                
fm_set_rendering(idkRenderFxGlowShell00255kRenderNormal25)
            else
                
fm_set_rendering(id)
        }
    } 
Lo cambian por esto:
PHP Code:
    // Custom models stuff
    
static iRand
    
    
if (g_survivor[id])
    {        
        
iRand random_num(0ArraySize(model_survivor) - 1)
        
ArrayGetString(model_survivoriRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelshuman) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {            
            
iRand random_num(0ArraySize(model_admin_human) - 1)
            
ArrayGetString(model_admin_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(0ArraySize(model_human) - 1)
            
ArrayGetString(model_humaniRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
    }
    
    
// Set survivor glow / remove glow, unless frozen
    
if (!g_frozen[id])
    {
        if (
g_survivor[id] && get_pcvar_num(cvar_survglow))
            
fm_set_rendering(idkRenderFxGlowShell00255kRenderNormal25)
        else
            
fm_set_rendering(id)
    } 
Ahora les enseñaré a setear los modelos de los Zombies:

Buscan zombieme(id, infector, nemesis, silentmode, rewards) y bajan hasta donde dice

Y cambian todo esto :
PHP Code:
    // Custom models stuff
    
static currentmodel[32], tempmodel[32], already_has_modeliiRandsize
    already_has_model 
false
    
    
if (g_handle_models_on_separate_ent)
    {
        
// Set the right model
        
if (g_nemesis[id])
        {
            
iRand random_num(0ArraySize(model_nemesis) - 1)
            
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
            if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_nemesisiRand))
        }
        else
        {
            if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
            {
                
iRand random_num(0ArraySize(model_admin_zombie) - 1)
                
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_admin_zombieiRand))
            }
            else
            {
                
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
                
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_zclass_modelindexiRand))
            }
        }
        
        
// Set model on player model entity
        
fm_set_playermodel_ent(id)
        
        
// Nemesis glow / remove glow on player model entity, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
                
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell25500kRenderNormal25)
            else
                
fm_set_rendering(g_ent_playermodel[id])
        }
    }
    else
    {
        
// Get current model for comparing it with the current one
        
fm_cs_get_user_model(idcurrentmodelcharsmax(currentmodel))
        
        
// Set the right model, after checking that we don't already have it
        
if (g_nemesis[id])
        {
            
size ArraySize(model_nemesis)
            for (
0sizei++)
            {
                
ArrayGetString(model_nemesisitempmodelcharsmax(tempmodel))
                if (
equal(currentmodeltempmodel)) already_has_model true
            
}
            
            if (!
already_has_model)
            {
                
iRand random_num(0size 1)
                
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
                if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_nemesisiRand))
            }
        }
        else
        {
            if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
            {
                
size ArraySize(model_admin_zombie)
                for (
0sizei++)
                {
                    
ArrayGetString(model_admin_zombieitempmodelcharsmax(tempmodel))
                    if (
equal(currentmodeltempmodel)) already_has_model true
                
}
                
                if (!
already_has_model)
                {
                    
iRand random_num(0size 1)
                    
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
                    if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_modelindex_admin_zombieiRand))
                }
            }
            else
            {
                for (
ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]); ArrayGetCell(g_zclass_modelsendg_zombieclass[id]); i++)
                {
                    
ArrayGetString(g_zclass_playermodelitempmodelcharsmax(tempmodel))
                    if (
equal(currentmodeltempmodel)) already_has_model true
                
}
                
                if (!
already_has_model)
                {
                    
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
                    
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
                    if (
g_set_modelindex_offsetfm_cs_set_user_model_index(idArrayGetCell(g_zclass_modelindexiRand))
                }
            }
        }
        
        
// Need to change the model?
        
if (!already_has_model)
        {
            
// An additional delay is offset at round start
            // since SVC_BAD is more likely to be triggered there
            
if (g_newround)
                
set_task(5.0 g_modelchange_delay"fm_user_model_update"id+TASK_MODEL)
            else
                
fm_user_model_update(id+TASK_MODEL)
        } 
Por este code:

PHP Code:
    // Custom models stuff
    
static iRand
    
    
// Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        
        
// Nemesis glow / remove glow, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
                
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
            else
                
fm_set_rendering(id)
        }
    } 
Si usan unas de las versiones fixs del zp tendran una native nueva, vayan a native_override_user_model(id, const newmodel[])
y cambian todo ese public por esto:
PHP Code:
public native_override_user_model(id, const newmodel[])
{
    
// ZP disabled
    
if (!g_pluginenabled)
        return 
false;
    
    if (!
is_user_valid_connected(id))
    {
        
log_error(AMX_ERR_NATIVE"[ZP] Invalid Player (%d)"id)
        return 
false;
    }
    
    
// Strings passed byref
    
param_convert(2)

    
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
    
cs_set_player_model(idg_playermodel[id])
    
    return 
true;

Y listo Cualquier duda o error no duden en decirmela Hasta la proxima
__________________
Quote:
Originally Posted by XINLEI View Post
Porque rocccos trata de ser el metalicross que nunca va a poder ser.

Last edited by DJHD!; 12-29-2012 at 21:37.
DJHD! is offline
Send a message via MSN to DJHD!
Roccoxx
AlliedModders Donor
Join Date: Jan 2012
Location: Argentina
Old 12-29-2012 , 22:19   Re: [Guía] Setear modelos con Player Models API
#2

agregado a la recopilacion de tutoriales, muy buen tut, cuando comienze con mi mod lo tendre en cuenta
__________________
Tutorials here (Spanish)

Like as another Pijudo said: "Tired and retired"
Roccoxx is offline
Send a message via MSN to Roccoxx
DJHD!
Veteran Member
Join Date: Dec 2009
Location: Santiago, Chile
Old 12-30-2012 , 01:46   Re: [Guía] Setear modelos con Player Models API
#3

Quote:
Originally Posted by Roccoxx View Post
agregado a la recopilacion de tutoriales, muy buen tut, cuando comienze con mi mod lo tendre en cuenta
Excelente, a media que pueda voy a poner mas ejemplos para el zp o modos aparte como hns o otros...
__________________
Quote:
Originally Posted by XINLEI View Post
Porque rocccos trata de ser el metalicross que nunca va a poder ser.
DJHD! is offline
Send a message via MSN to DJHD!
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 12-30-2012 , 12:25   Re: [Guía] Setear modelos con Player Models API
#4

Aparte de ahorrarte lineas de codigo en el zp tiene alguna ventaja mas?
baneado is offline
DJHD!
Veteran Member
Join Date: Dec 2009
Location: Santiago, Chile
Old 12-30-2012 , 14:23   Re: [Guía] Setear modelos con Player Models API
#5

Quote:
Originally Posted by baneado View Post
Aparte de ahorrarte lineas de codigo en el zp tiene alguna ventaja mas?
Te ahorras el svc al máximo...

y solo tienes que usar cs_set_player_models... y nada mas...
__________________
Quote:
Originally Posted by XINLEI View Post
Porque rocccos trata de ser el metalicross que nunca va a poder ser.
DJHD! is offline
Send a message via MSN to DJHD!
sasske
Senior Member
Join Date: Nov 2012
Old 01-04-2013 , 19:58   Re: [Guía] Setear modelos con Player Models API
#6

Muy buen tut, ahora no tengo tiempo pero despues en una hora maso lo leo, pero te dejo felicitaciones por el esfuerzo
sasske is offline
Send a message via MSN to sasske
Bler
Member
Join Date: Oct 2011
Old 01-21-2013 , 10:50   Re: [Guía] Setear modelos con Player Models API
#7

Primero que nada, muchas gracias por la guia, me sirvio de mucho.

Queria hacerte una pregunta: ¿esta forma es mas optimizada que la del zp? ¿ocupa menos recursos?


Creo que esta parte tiene un pequeño error:

PHP Code:
    // Custom models stuff
    
static iRand
    
    
// Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        
        
// Nemesis glow / remove glow, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
                
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
            else
                
fm_set_rendering(id)
        }
    } 
Deberia ser asi (creo):

PHP Code:
   // Custom models stuff
    
static iRand
    
    
// Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
    }
    
    
    
// Nemesis glow / remove glow, unless frozen
    
if (!g_frozen[id])
    {
        if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
            
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
        else
            
fm_set_rendering(id)
    } 
Me olvidaba de esta parte:

PHP Code:
    // Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
    } 
¿Se puede cambiar de esta forma?

PHP Code:
    // Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
//cs_set_player_model(id, g_playermodel[id])
    
}
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
//cs_set_player_model(id, g_playermodel[id])
        
}
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
//cs_set_player_model(id, g_playermodel[id])
        
}
    }
    
cs_set_player_model(idg_playermodel[id]) 
Para evitar llamar tantas veces a cs_set_player_model

Last edited by Bler; 01-21-2013 at 10:56.
Bler is offline
DJHD!
Veteran Member
Join Date: Dec 2009
Location: Santiago, Chile
Old 01-21-2013 , 11:02   Re: [Guía] Setear modelos con Player Models API
#8

Quote:
Originally Posted by Bler View Post
Primero que nada, muchas gracias por la guia, me sirvio de mucho.

Queria hacerte una pregunta: ¿esta forma es mas optimizada que la del zp? ¿ocupa menos recursos?


Creo que esta parte tiene un pequeño error:

PHP Code:
    // Custom models stuff
    
static iRand
    
    
// Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        
        
// Nemesis glow / remove glow, unless frozen
        
if (!g_frozen[id])
        {
            if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
                
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
            else
                
fm_set_rendering(id)
        }
    } 
Deberia ser asi (creo):

PHP Code:
   // Custom models stuff
    
static iRand
    
    
// Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
    }
    
    
    
// Nemesis glow / remove glow, unless frozen
    
if (!g_frozen[id])
    {
        if (
g_nemesis[id] && get_pcvar_num(cvar_nemglow))
            
fm_set_rendering(idkRenderFxGlowShell25500kRenderNormal25)
        else
            
fm_set_rendering(id)
    } 
Me olvidaba de esta parte:

PHP Code:
    // Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
cs_set_player_model(idg_playermodel[id])
    }
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
cs_set_player_model(idg_playermodel[id])
        }
    } 
¿Se puede cambiar de esta forma?

PHP Code:
    // Set the right model, after checking that we don't already have it
    
if (g_nemesis[id])
    {        
        
iRand random_num(0ArraySize(model_nemesis) - 1)
        
ArrayGetString(model_nemesisiRandg_playermodel[id], charsmax(g_playermodel[]))
        
//cs_set_player_model(id, g_playermodel[id])
    
}
    else
    {
        if (
get_pcvar_num(cvar_adminmodelszombie) && (get_user_flags(id) & g_access_flag[ACCESS_ADMIN_MODELS]))
        {
            
iRand random_num(0ArraySize(model_admin_zombie) - 1)
            
ArrayGetString(model_admin_zombieiRandg_playermodel[id], charsmax(g_playermodel[]))
            
//cs_set_player_model(id, g_playermodel[id])
        
}
        else
        {
            
iRand random_num(ArrayGetCell(g_zclass_modelsstartg_zombieclass[id]), ArrayGetCell(g_zclass_modelsendg_zombieclass[id]) - 1)
            
ArrayGetString(g_zclass_playermodeliRandg_playermodel[id], charsmax(g_playermodel[]))
            
//cs_set_player_model(id, g_playermodel[id])
        
}
    }
    
cs_set_player_model(idg_playermodel[id]) 
Para evitar llamar tantas veces a cs_set_player_model
No, por qué cada uno le setea una información diferente.

Si quieres ahorrarte lineas y llamados loopealo y hazlo dentro del zp para no usar arrays.
__________________
Quote:
Originally Posted by XINLEI View Post
Porque rocccos trata de ser el metalicross que nunca va a poder ser.

Last edited by DJHD!; 01-21-2013 at 11:03.
DJHD! is offline
Send a message via MSN to DJHD!
Bler
Member
Join Date: Oct 2011
Old 01-21-2013 , 11:20   Re: [Guía] Setear modelos con Player Models API
#9

Mmm acabo de probar (cosa que debi hacer antes ) y es lo mismo.

¿Esta mas optimizada usando cs_player_models_api que la forma de setear models del zp?


Last edited by Bler; 01-21-2013 at 11:21.
Bler is offline
Destro-
Veteran Member
Join Date: Jun 2010
Location: $me->location();
Old 01-21-2013 , 11:58   Re: [Guía] Setear modelos con Player Models API
#10

Quote:
Originally Posted by Bler View Post
Mmm acabo de probar (cosa que debi hacer antes ) y es lo mismo.

¿Esta mas optimizada usando cs_player_models_api que la forma de setear models del zp?

Si es para zp 4.3||> el metodo es el mismo y el rendimiento puede ser asta peor que usando lo default del zp.


pd: MercyLezz creo la api usando el code de su zp.
__________________

Last edited by Destro-; 01-21-2013 at 12:02.
Destro- is offline
 


Thread Tools
Display Modes

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 23:11.


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