Allied Modders en español
Ganar ammopacks con granada de fuego ZP - Versión para impresión

+- Allied Modders en español (https://amxmodx-es.com)
+-- Foro: AMX Mod X - Scripting (https://amxmodx-es.com/Forum-AMX-Mod-X-Scripting)
+--- Foro: Scripting (https://amxmodx-es.com/Forum-Scripting)
+--- Tema: Ganar ammopacks con granada de fuego ZP (/Thread-Ganar-ammopacks-con-granada-de-fuego-ZP)



Ganar ammopacks con granada de fuego ZP - Pawnsito - 06/12/2018

Alguien me podria decir como hacer para que la granada de fuego del zp me de ammopacks cada cierto daño? Y como escalar el daño de esta segun la habilidad de daño del humano?


RE: Ganar ammopacks con granada de fuego ZP - cLAANS - 06/12/2018

Okey, es mas simple de lo que te puedes imaginar ..

Primero que nada vas a buscar el evento Ham_Think, el mismo seguramente vas a tener justamente el think de todas las grandas.

Busca el de la granada de fuego

[Imagen: 3G4UBnS.png]

Desde ahi te diriges en mi caso hacia la funcion "fire_explode", en el si buscas vas a encontrar que lo mas probable es que hagas un task cada x segundos hacia otra funcion.

En esa otra funcion veras que es donde ejerce el daño, y ahi mismo puedes sumar ammopacks al atacante.

Saludos,
cLAANS.-


RE: Ganar ammopacks con granada de fuego ZP - Pawnsito - 06/12/2018

Ok listo, ya consegui esa parte y efectivamente hace un task cada 0.2 segundos para llamar a la misma funcion tipo "loop" si aun la granada esta haciendo daño, la cosa es como le aumento el daño a la granada segun el daño del humano? porque tiene una cvar para subir el daño de la misma, pero es un daño para todos


RE: Ganar ammopacks con granada de fuego ZP - cLAANS - 08/12/2018

(06/12/2018, 05:31 PM)Pawnsito escribió: Ok listo, ya consegui esa parte y efectivamente hace un task cada 0.2 segundos para llamar a la misma funcion tipo "loop" si aun la granada esta haciendo daño, la cosa es como le aumento el daño a la granada segun el daño del humano? porque tiene una cvar para subir el daño de la misma, pero es un daño para todos

Mostrame codigo

Saludos,
cLAANS.-


RE: Ganar ammopacks con granada de fuego ZP - Pawnsito - 10/12/2018

Código PHP:
// Fire Grenade Explosion
fire_explode(ent)
{
    
// Get origin
    
static Float:originF[3]
    
pev(entpev_originoriginF)
    
    
// Make the explosion
    
create_blast2(originF)
    
    
// Fire nade explode sound
    
engfunc(EngFunc_EmitSoundentCHAN_WEAPONgrenade_fire[random_num(0sizeof grenade_fire 1)], 1.0ATTN_NORM0PITCH_NORM)
    
    
// Collisions
    
static victim
    victim 
= -1
    
    
while ((victim engfunc(EngFunc_FindEntityInSpherevictimoriginFNADE_EXPLOSION_RADIUS)) != 0)
    {
        
// Only effect alive zombies
        
if (!is_user_alive(victim) || !g_zombie[victim] || g_nodamage[victim])
            continue;
        
        
// Heat icon?
        
if (get_pcvar_num(cvar_hudicons))
        {
            
message_begin(MSG_ONE_UNRELIABLEg_msgDamage_victim)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_BURN// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()
        }
        
        
// Our task params
        
static params[1]
        
        if (
g_nemesis[victim]) // fire duration (nemesis takes less)
            
params[0] = get_pcvar_num(cvar_fireduration)
        else
            
params[0] = get_pcvar_num(cvar_fireduration)*5
        
        
// Set burning task on victim
        
set_task(0.1"burning_flame"victim+TASK_BLOODparamssizeof params)
    }
    
    
// Get rid of the grenade
    
engfunc(EngFunc_RemoveEntityent)


y el task burning_flame es

Código PHP:
// Burning Flames
public burning_flame(args[1], taskid)
{
    
// Get player origin and flags
    
static Float:originF[3], flags
    pev
(ID_BLOODpev_originoriginF)
    
flags pev(ID_BLOODpev_flags)
    
    
// Madness mode - in water - burning stopped
    
if (g_nodamage[ID_BLOOD] || (flags FL_INWATER) || FLAME_DURATION 1)
    {
        
// Smoke sprite
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
        
write_byte(TE_SMOKE// TE id
        
engfunc(EngFunc_WriteCoordoriginF[0]) // x
        
engfunc(EngFunc_WriteCoordoriginF[1]) // y
        
engfunc(EngFunc_WriteCoordoriginF[2]-50.0// z
        
write_short(g_smokeSpr// sprite
        
write_byte(random_num(1520)) // scale
        
write_byte(random_num(1020)) // framerate
        
message_end()
        
        return;
    }
    
    
// Randomly play burning zombie scream sounds (not for nemesis)
    
if (!random_num(020) && !g_nemesis[ID_BLOOD])
        
engfunc(EngFunc_EmitSoundID_BLOODCHAN_VOICEgrenade_fire_player[random_num(0sizeof grenade_fire_player 1)], 1.0ATTN_NORM0PITCH_NORM)
    
    
// Get fire slow down setting
    
static Float:slowdown
    slowdown 
get_pcvar_float(cvar_fireslowdown)
    
    
// Fire slow down, unless nemesis
    
if (slowdown 0.0 && !g_nemesis[ID_BLOOD] && (flags FL_ONGROUND))
    {
        static 
Float:velocity[3]
        
pev(ID_BLOODpev_velocityvelocity)
        
xs_vec_mul_scalar(velocityslowdownvelocity)
        
set_pev(ID_BLOODpev_velocityvelocity)
    }
    
    
// Get health and fire damage setting
    
static healthfiredamage
    health 
pev(ID_BLOODpev_health)
    
firedamage get_pcvar_num(cvar_firedamage)
    
    
// Take damage from the fire
    
if (health firedamage)
        
fm_set_user_health(ID_BLOODhealth firedamage)
    
    
// Flame sprite
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_SPRITE// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]+random_float(-5.05.0)) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]+random_float(-5.05.0)) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]+random_float(-10.010.0)) // z
    
write_short(g_flameSpr// sprite
    
write_byte(random_num(510)) // scale
    
write_byte(200// brightness
    
message_end()
    
    
// Decrease task cycle counter
    
FLAME_DURATION -= 1;
    
    
// Keep sending flame messaegs
    
set_task(0.2"burning_flame"taskidargssizeof args)


Aqui en este ultimo es donde le saca la vida al zombie pero no se como hacer para sumarle los ammopacks al atacante segun el daño que le haga, puesto que no se como obtener el "Index" del atacante


RE: Ganar ammopacks con granada de fuego ZP - cLAANS - 11/12/2018

Vale ...

Vamos a dejar codigo en bandeja, solo por esta ocacion.

Primero que nada, no podemos obtener el index atacante en ninguno de los dos codigos que me pasaste. Esto se debe "pasar" anteriormente, para esto nos dirigimos al think de grenade.

Código PHP:
case NADE_TYPE_NAPALM: {
            static 
owner
            owner 
get_pdata_cbase(entity414)

            
fire_explode(entityowner);
            return 
HAM_SUPERCEDE;
        } 

Hecho esto, ya es mas simple, en fire_explode obviamente cambiamos los parametros para poder recibir el id del atacante.

Luego de esto, vamos a cambiar un poquito el asunto del task, y vamos a pasar un parametro mas ... Justamente el id del atacante.

Código PHP:
// Our task params
        
static params];
        
        if( 
g_nemesisvictim ] ) // fire duration (nemesis takes less)
            
params] = get_pcvar_numcvar_fireduration );
        else
            
params] = get_pcvar_numcvar_fireduration ) * 5;

        
params] = idAtacante;
        
        
// Set burning task on victim
        
set_task(0.1"burning_flame"victim+TASK_BLOODparamssizeof params

Finalmente obtenemos el parametro en el task ...

Código PHP:
public burning_flameargs], taskid )
{
    static 
idAtacante args];

    
// code code

    
g_ammopacksidAtacante ]++;


Saludos,
cLAANS.-


RE: Ganar ammopacks con granada de fuego ZP - Pawnsito - 11/12/2018

Muchas gracias por la ayuda amigo, tan pronto como este en la pc lo testeo y te digo como resulto.

Pd, si no estas muy ocupado quiza podrias echarle un ojo al thread que hice sobre ponerle un sprite a los miembros del party, talvez me puedas ayudar te lo agradeceria