AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Grenade think 2 calls (https://forums.alliedmods.net/showthread.php?t=251737)

avril-lavigne 11-18-2014 11:52

Grenade think 2 calls
 
PHP Code:


public fw_think(ent)

    static 
Float:dmgtime
         pev
(entpev_dmgtimedmgtime)     
    if (
dmgtime get_gametime()) return HAM_IGNORED
    
          
    
if(is_he(ent))
    {      
           
server_print("HE THINK")
      
heowner get_pdata_int(ent414
      static 
Float:or[3]
      
pev(ent,pev_origin,or)
      new 
target = -1
      
static  Float:flDistanceFloat:flDamage
      
while(( target find_ent_in_sphere(target, or, grenadelvl[heowner]*50.0) ))  
           {  
                     if(!
alive(target)) continue            
             
            
flDistance entity_range(enttarget );
                    
flDamage UTIL_FloatRadius100.0grenadelvl[heowner]*50.0flDistance );            
            
ExecuteHamB(Ham_TakeDamagetargetentheowner flDamage /* flDamage/protectlvl[target] */ DMG_GRENADE
            
server_print("radius %.2f damage %.2f"grenadelvl[heowner]*50.0flDamage)            
            }
        
        }
       


Debug says it called 2 times. how call it once at grenade explosion moment

meTaLiCroSS 11-18-2014 18:25

Re: Grenade think 2 calls
 
¿What?

Jhob94 11-19-2014 04:33

Re: Grenade think 2 calls
 
Full plugin? Or maybe is the same problem as you had with damage and you must name the entity to something else.

avril-lavigne 11-19-2014 16:09

Re: Grenade think 2 calls
 
just part

PHP Code:

RegisterHam(Ham_TakeDamage"player""fw_takedamage_pre",0)
RegisterHam(Ham_Think"grenade""fw_think")
register_forward(FM_SetModel,"fw_setmodel",1);


public 
fw_takedamage_previc iInflictor att Float:DamagebitsDamageType )
if( 
bitsDamageType DMG_GRENADE )  SetHamParamFloat(40.0)   // we have our custom dmg 

public fw_setmodel(ent,model[])
{       
    if(
equal(model"models/w_hegrenade.mdl"))
    
set_pdata_int(ent41pev(entpev_owner), 4)
    
    return 
FMRES_SUPERCEDE
}


public 
fw_think(ent)

    static 
Float:dmgtime
        pev
(entpev_dmgtimedmgtime
    
    if (
dmgtime get_gametime()) return HAM_IGNORED    
    
    
if(is_flash(ent))        
    
flashowner get_pdata_int(ent414) , flash ent    
      
    
if(is_he(ent))
    {
             
server_print("HE THINK")      
         
heowner get_pdata_int(ent414
         static 
Float:or[3]
         
pev(ent,pev_origin,or)
         new 
target = -1
         
static  Float:flDistanceFloat:flDamage
         
while(( target find_ent_in_sphere(target, or, grenadelvl[heowner]*50.0) ))  
             {  
                   if(!
alive(target)) continue       
             
           
flDistance entity_range(enttarget );
                   
flDamage UTIL_FloatRadius100.0grenadelvl[heowner]*50.0flDistance );            
           
ExecuteHamB(Ham_TakeDamagetargetentheowner ,  flDamage DMG_CLUB)
 
           
server_print("radius %.2f damage %.2f"grenadelvl[heowner]*50.0flDamage)            
             }        
         }
        return 
HAM_IGNORED    
}

public 
bool:is_he(ent)
{
    static 
model[32]
    
pev(entpev_modelmodel31)
    return 
bool:(containi(model"w_hegrenade.mdl") != -1)


In a moment of HE explosion I want to make damage once. I dont know why after throwing HE grenade right in explosion moment I see
debug message server_print("HE THINK") two times ....Therefore I suppose my radius damage also calculates two times

also I ask someone fix UTIL_FloatRadius because it calculates wrong radius damage im sure 100% .

baneado 11-19-2014 17:01

Re: Grenade think 2 calls
 
after execute the damage(out of the loop), set whatever value to non-used entity constants like EV_ENT_euser1

entity_set_edict(ent, EV_ENT_euser1, 521)

and before execute it, make an easy check
if(is_he(ent) && entity_get_edict(ent, EV_ENT_euser1) =! 521)

avril-lavigne 11-21-2014 15:08

Re: Grenade think 2 calls
 
I solved it to set he owner to 0 after loop

PHP Code:



if(is_he(ent) && heowner 0)

    
//  than



  
while(( target find_ent_in_sphere(target, or, grenadelvl[heowner]*50.0) ))  
  {  
   
  }              
       
set_pev(ent,pev_owner0)  // here 


baneado 11-22-2014 09:24

Re: Grenade think 2 calls
 
doing that maybe you can have problems with others plugins. think about it


All times are GMT -4. The time now is 17:32.

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