Ham_TakeDamage uso completo
#1
Buenas despues de tiempo estoy con una duda y estuve buscando mucho, seguro sea sencilla pero no me doy la mañana, aunque prefiero ampliar el horizonte y voy directo a la pregunta...

Estuve buscando un TUT sobre el uso completo del TakeDamage (por ej averiguar quien le hizo daño a quien y guardarlo) si no me equivoco no hay ninguno aca ¿no?

un ej de lo que quiero seria que al final de la ronda apareciera

[TU TAG] --- Recibiste daño de
Pablito - 12hp (vida que te sacó)
Mengano - 50hp

y asi sucesivamente...
Responder
#2
Exactamente que necesitas, saber que hace cada cosa, ejemplos prácticos?

https://dev-cs.ru/amxx/ham_const/inc
Responder
#3
Usa TakeDamage solo para modificar el daño o para hacer algo mas sofisticado

preferiria que usaras el evento "Damage"

Código PHP:
register_event("Damage""OnTakeDamage""b""2>0")
public 
OnTakeDamage(id)
{
   new 
attacker get_user_attacker(id)
   new 
damage read_data(2)
//id == Victima
// attacker  == atacante

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#4
Supongo que es esto lo que buscas, tendrías que retocarlo acorde a tu necesidad, creo que esta es la forma más fácil que hay para guardar quien le pegó a quien.

El nombre de los jugadores estan hechos con la versión 1.9 porque me dio paja, pero se entiende.

Código PHP:
#include < amxmodx >
#include < hamsandwich >

#define PLUGIN  "New Plug-In"
#define VERSION "1.0"
#define AUTHOR  "Author"

#define MAX_USERS 33

new g_DamageMAX_USERS ][ MAX_USERS ]

public 
plugin_init( )
{
    
register_pluginPLUGINVERSIONAUTHOR )
    
register_clcmd"say /damage""clcmd__SayDamage" );
    
RegisterHamHam_TakeDamage"player""ham__PlayerTakeDamagePre");
}

public 
ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttackerFloat:flDamage, const iDamageByte )
{
    
// blablabla con los returns necesarios que quieras aplicar
    
g_DamageiVictim ][ iAttacker ] += floatroundflDamage );
}

public 
clcmd__SayDamage( const iId )
{
    new 
i;
    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_DamageiId ][ ] )
                
client_printiIdprint_console"%n te hizo %d de daño"ig_DamageiId ][ ] );

    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_Damage][ iId ] )
                
client_printiIdprint_console"Le hiciste %d de daño a %n"g_Damage][ iId ], );    

Responder
#5
(26/01/2019, 09:01 PM)Sugisaki escribió: Usa TakeDamage solo para modificar el daño o para hacer algo mas sofisticado

preferiria que usaras el evento "Damage"

Código PHP:
register_event("Damage""OnTakeDamage""b""2>0")
public 
OnTakeDamage(id)
{
   new 
attacker get_user_attacker(id)
   new 
damage read_data(2)
//id == Victima
// attacker  == atacante


¿Alguna razón adecuada? Además, si usas esto, pues estaría bien menos hardcode, estoy hablando de read_data(2).
Plugins:
En GitHub
Responder
#6
(26/01/2019, 10:14 PM)HyperstacK escribió: Supongo que es esto lo que buscas, tendrías que retocarlo acorde a tu necesidad, creo que esta es la forma más fácil que hay para guardar quien le pegó a quien.

El nombre de los jugadores estan hechos con la versión 1.9 porque me dio paja, pero se entiende.

Código PHP:
#include < amxmodx >
#include < hamsandwich >

#define PLUGIN  "New Plug-In"
#define VERSION "1.0"
#define AUTHOR  "Author"

#define MAX_USERS 33

new g_DamageMAX_USERS ][ MAX_USERS ]

public 
plugin_init( )
{
    
register_pluginPLUGINVERSIONAUTHOR )
    
register_clcmd"say /damage""clcmd__SayDamage" );
    
RegisterHamHam_TakeDamage"player""ham__PlayerTakeDamagePre");
}

public 
ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttackerFloat:flDamage, const iDamageByte )
{
    
// blablabla con los returns necesarios que quieras aplicar
    
g_DamageiVictim ][ iAttacker ] += floatroundflDamage );
}

public 
clcmd__SayDamage( const iId )
{
    new 
i;
    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_DamageiId ][ ] )
                
client_printiIdprint_console"%n te hizo %d de daño"ig_DamageiId ][ ] );

    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_Damage][ iId ] )
                
client_printiIdprint_console"Le hiciste %d de daño a %n"g_Damage][ iId ], );    


Falta verificar el atacante en TakeDamage, sólo métete a un mapa donde alguna entidad de mapa te quite daño y verás el kilo de errores por index out of bounds
Responder
#7
(27/01/2019, 06:26 PM)meTaLiCroSS escribió:
(26/01/2019, 10:14 PM)HyperstacK escribió: Supongo que es esto lo que buscas, tendrías que retocarlo acorde a tu necesidad, creo que esta es la forma más fácil que hay para guardar quien le pegó a quien.

El nombre de los jugadores estan hechos con la versión 1.9 porque me dio paja, pero se entiende.

Código PHP:
#include < amxmodx >
#include < hamsandwich >

#define PLUGIN  "New Plug-In"
#define VERSION "1.0"
#define AUTHOR  "Author"

#define MAX_USERS 33

new g_DamageMAX_USERS ][ MAX_USERS ]

public 
plugin_init( )
{
    
register_pluginPLUGINVERSIONAUTHOR )
    
register_clcmd"say /damage""clcmd__SayDamage" );
    
RegisterHamHam_TakeDamage"player""ham__PlayerTakeDamagePre");
}

public 
ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttackerFloat:flDamage, const iDamageByte )
{
    
// blablabla con los returns necesarios que quieras aplicar
    
g_DamageiVictim ][ iAttacker ] += floatroundflDamage );
}

public 
clcmd__SayDamage( const iId )
{
    new 
i;
    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_DamageiId ][ ] )
                
client_printiIdprint_console"%n te hizo %d de daño"ig_DamageiId ][ ] );

    for( 
1<= MaxUsers; ++)
        if( 
is_user_connected) )
            if( 
!= iId && g_Damage][ iId ] )
                
client_printiIdprint_console"Le hiciste %d de daño a %n"g_Damage][ iId ], );    


Falta verificar el atacante en TakeDamage, sólo métete a un mapa donde alguna entidad de mapa te quite daño y verás el kilo de errores por index out of bounds

Por algo comente este mensaje
Código PHP:
// blablabla con los returns necesarios que quieras aplicar 

Debería el verificar todo eso, yo solo le di una idea de como lo podría hacer de una forma bastante fácil
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)