Raised This Month: $ Target: $400
 0% 

AddToFullPack


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 05-09-2013 , 06:11   Re: AddToFullPack
Reply With Quote #1

You shouldn't use :

engfunc(EngFunc_SetOrigin, ent, origin)

in AddToFullPack.

Only alter es struct values (set_es)
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
meTaLiCroSS
Gaze Upon My Hat
Join Date: Feb 2009
Location: Viņa del Mar, Chile
Old 05-09-2013 , 17:59   Re: AddToFullPack
Reply With Quote #2

Quote:
Originally Posted by ConnorMcLeod View Post
You shouldn't use :

engfunc(EngFunc_SetOrigin, ent, origin)

in AddToFullPack.

Only alter es struct values (set_es)
._. I always thougth that you need to use SetOrigin on AddToFullPack + ES_Origin for showing correctly an sprite constantly on your screen, so it isn't needed?
__________________
Quote:
Originally Posted by joropito View Post
You're right Metalicross
meTaLiCroSS is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 05-09-2013 , 19:32   Re: AddToFullPack
Reply With Quote #3

If you set real origin, do that at another place, PostThink for example, then you don't even need to fake an origin in AddToFullPack because player gonna see it at the correct origin.
You may want to hide it from other players though, in that case, just supercede AddToFullPack for host == other players and ent == entity.

You could hook only AddToFullPack PRE (then no postThink at all), and do that :

PHP Code:
if( sprite[host] == ent )
{
    
engfunc(EngFunc_SetOriginent, ...)
    return 
FMRES_HANDLED
}
else
{
    
forward_return)
    return 
FMRES_SUPERCEDE

I don't know if a ZP server can support a well coded plugin, but if it does, you can try this :

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <xs>

#pragma semicolon 1

#define PLUGIN "[ZP] Addon: Infect-Effect"
#define VERSION "2.0.2"

new const INFECT_EFFECT_MODEL[] = "sprites/infect-effect.spr";

new const 
INFECT_EFFECT_CLASS[] = "env_infect_effect";

new const 
ENV_SPRITE_CLASS[] = "env_sprite"// don't change

#define MaskEnt(%0)    ( 1<<(%0 & 31) )

new g_bitSpriteEffectsEnts[64];
#define MarkSpriteEffect(%0)    g_bitSpriteEffectsEnts[%0>>5] |=  MaskEnt(%0)
#define ClearSpriteEffect(%0)    g_bitSpriteEffectsEnts[%0>>5] &= ~MaskEnt(%0)
#define IsSpriteEffect(%0)        ( g_bitSpriteEffectsEnts[%0>>5] &   MaskEnt(%0) )

new cvar_scalecvar_showtimecvar_lightlevel;

new 
g_iPlayerEntEffectIndex[33];
new 
g_iszEnvSpriteg_iszCustomClassg_iszModel;

public 
plugin_init()
{
    
register_plugin(PLUGINVERSION"ConnorMcLeod");

    
cvar_scale register_cvar("zp_in-ef_scale""0.035");
    
cvar_showtime register_cvar("zp_in-ef_showtime""2.0");
    
cvar_lightlevel register_cvar("zp_in-ef_lightlevel""100");

    
g_iszEnvSprite engfunc(EngFunc_AllocStringENV_SPRITE_CLASS);
    
g_iszCustomClass engfunc(EngFunc_AllocStringINFECT_EFFECT_CLASS);
    
g_iszModel engfunc(EngFunc_AllocStringINFECT_EFFECT_MODEL);
    
register_think(INFECT_EFFECT_CLASS"Think_InfectEffect");

    
RegisterHam(Ham_Spawn"player""OnCBasePlayer_Spawn_P"true);
    
register_forward(FM_AddToFullPack"OnAddToFullPack"false);
    
RegisterHam(Ham_CS_RestartENV_SPRITE_CLASS"OnCSprite_Restart"false);
}

public 
plugin_precache()
{
    
precache_model(INFECT_EFFECT_MODEL);
}

public 
OnCBasePlayer_Spawn_P(id)
{
    new 
ent g_iPlayerEntEffectIndex[id];
    if( 
ent )
    {
        if( 
pev_valid(ent) )
        {
            
remove_entity(ent);
            
ClearSpriteEffect(ent);
        }
        
g_iPlayerEntEffectIndex[id] = 0;
    }
}

public 
zp_user_infected_post(idattacker)
{
    if(
is_user_alive(attacker))
    {
        new 
ent engfunc(EngFunc_CreateNamedEntityg_iszEnvSprite);
        if( 
ent <= )
        {
            return;
        }

        
set_pev_string(entpev_modelg_iszModel);
        
entity_set_int(entEV_INT_spawnflagsSF_SPRITE_STARTON);

        if( 
DispatchSpawn(ent) == -)
        {
            
remove_entity(ent);
        }
        
        
entity_set_int(entEV_INT_rendermodekRenderTransAdd);
        
entity_set_float(entEV_FL_renderamt200.0);
        
entity_set_float(entEV_FL_scaleget_pcvar_float(cvar_scale));
        
entity_set_int(entEV_INT_light_levelget_pcvar_num(cvar_lightlevel));

        
set_pev_string(entpev_classnameg_iszCustomClass);
        
entity_set_float(entEV_FL_nextthinkget_gametime() + get_pcvar_float(cvar_showtime));

        
MarkSpriteEffect(ent);
        
g_iPlayerEntEffectIndex[id] = ent;
        
entity_set_edict(entEV_ENT_euser1id);
    }
}

public 
OnAddToFullPack(eseentidhostflagsplayerpSet)
{
    if( 
player || !IsSpriteEffect(ent) )
    {
        return 
FMRES_IGNORED;
    }

    if( 
g_iPlayerEntEffectIndex[id] != ent )
    {
        
forward_return(0);
        return 
FMRES_SUPERCEDE;
    }

    static 
Float:origin[3], Float:v_forward[3], Float:angles[3];

    
velocity_by_aim(id10v_forward);

    
entity_get_vector(idEV_VEC_originorigin);
    
origin[2] += entity_get_int(idEV_INT_flags) & FL_DUCKING 12.0 18.0;

    
xs_vec_add(originv_forwardorigin);
    
engfunc(EngFunc_SetOriginentorigin);

    
entity_get_vector(idEV_VEC_anglesangles);
    
entity_set_vector(entEV_VEC_anglesangles);

    return 
FMRES_HANDLED;
}

public 
OnCSprite_Restartent )
{
    if( 
IsSpriteEffect(ent) )
    {
        
Think_InfectEffectent );
    }
}

public 
Think_InfectEffectent )
{
    new 
id entity_get_edict(entEV_ENT_euser1);
    
g_iPlayerEntEffectIndex[id] = 0;
    
remove_entity(ent);
    
ClearSpriteEffect(ent);
    return 
PLUGIN_HANDLED;

__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 05-09-2013 at 20:39.
ConnorMcLeod is offline
Reply



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 10:53.


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