Lucrand la pluginul de zombie am trecut prin niste constatari foarte neplacute. In primul rand, dupa cum bine stiti, in momentul in care setati rendering-ul unui zombie pe alpha, se suprapun modelul original cu cel de zombie.

Cercetand mai atent sursa de la biohazard am descoperit cauza: In functia set_zombie_attributes
PHP Code:
set_pev(indexpev_rendermodekRenderTransTexture)
    
    
fm_set_user_armortype(indexCS_ARMOR_NONE)
    
fm_set_user_nvg(index)
    
    if(
get_pcvar_num(cvar_autonvg)) 
        
engclient_cmd(index"nightvision")
    
    if(!
pev_valid(g_modelent[index]))
    {
        static 
ent
        ent 
engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
        if(
pev_valid(ent))
        {
            
engfunc(EngFunc_SetModelentg_class_pmodel[g_player_class[index]])
            
set_pev(entpev_classnameMODEL_CLASSNAME)
            
set_pev(entpev_movetypeMOVETYPE_FOLLOW)
            
set_pev(entpev_aimentindex)
            
set_pev(entpev_ownerindex)
                
            
g_modelent[index] = ent
        
}
        
    }
    else
    {
        
engfunc(EngFunc_SetModelg_modelent[index], g_class_pmodel[g_player_class[index]])
        
fm_set_entity_visibility(g_modelent[index], 1)
    } 
Dupa cum vedeti, modelul original este setat ca TransTexture. Mai mult, modelul de zombie nu e chiar model. Se creeaza o entitate cu modelul dorit care se lipest de jucator. Mai exact, acelasi principiu ca pluginul de Hats. Practic, in loc sa schimbe modelul juatorului, doar "il acopera cu o haina". De asta, in momentul in care crestem vizibilitatea modelului original, se suprapune peste "haina". Ce avem de facut sa facem un zombie invizibil: Pai in principiu sa corectam aceasta tampenie.

Ii scoatem haina, corectam modul de randare, setam modelul zombie si modificam vizibilitatea.
Scoaterea "hainei" e destul de complicata, deoarece e nevoie de o stergere de entitate. "Haina" pentru fiecare jucator e pastrata intr-un vector in pluginul biohazard: g_modelent. Nu putem apela din alt plugin acest vector.

Solutia construita de mine consta in:
Crearea unei functii in interiorul biohazard.sma:

PHP Code:
public deleteCover(index)
{
    if(
pev_valid(g_modelent[index]))
        
fm_set_entity_visibility(g_modelent[index], 0)

Aceasta functie urmeaza sa fie apelata din pluginul nostru prin:
PHP Code:
   callfunc_begin("deleteCover","biohazard.amxx");
   
callfunc_push_int(id);
   
callfunc_end(); 
In acest moment, am sters "cover-ul"

Urmeaza restul:

PHP Code:
   fm_set_rendering(idkRenderFxGlowShell000kRenderTransAlpha,get_cvar_num("invzm_alpha"));
    
cs_set_user_model(id,MODEL); 
Problema in urma acestui cod: Resetarea modelului omului este facuta de biohazard prin simpla stergere a acelei "haine". In momentul in care schimbam modelul zombie-ului efectiv, si mai apoi acel jucator este respawnat(runda noua,antidot) ramane cu modelul de zombie. Asta s-a intamplat in poza postata de Dark. Deci trebuie sa schimbam inapoi in om. Modificam functia "reset_user_model" din biohazard in
PHP Code:
stock reset_user_model(index)
{
    
set_pev(indexpev_rendermodekRenderNormal)
    
set_pev(indexpev_renderamt0.0)

    
cs_set_user_model(index,HUMAN_MODEL);
    
    if(
pev_valid(g_modelent[index]))
        
fm_set_entity_visibility(g_modelent[index], 0)

Observati realocarea modelului. Si gata. Avem tot ce ne trebuie pentru a face un zombie invizibil fara erori de randare.