Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
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...
Mensajes: 1,450
Temas: 59
Registro en: Feb 2015
Reputación:
20
Exactamente que necesitas, saber que hace cada cosa, ejemplos prácticos?
https://dev-cs.ru/amxx/ham_const/inc
Mensajes: 1,933
Temas: 39
Registro en: Jul 2014
Reputación:
23
26/01/2019, 09:01 PM
(Última modificación: 26/01/2019, 09:02 PM por Sugisaki. Edited 2 times in total.)
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 }
Mensajes: 15
Temas: 0
Registro en: Jun 2018
Reputación:
0
26/01/2019, 10:14 PM
(Última modificación: 26/01/2019, 10:16 PM por HyperstacK. Edited 1 time in total.)
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_Damage[ MAX_USERS ][ MAX_USERS ]
public plugin_init( ) { register_plugin( PLUGIN, VERSION, AUTHOR ) register_clcmd( "say /damage", "clcmd__SayDamage" ); RegisterHam( Ham_TakeDamage, "player", "ham__PlayerTakeDamagePre", 0 ); }
public ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttacker, Float:flDamage, const iDamageByte ) { // blablabla con los returns necesarios que quieras aplicar g_Damage[ iVictim ][ iAttacker ] += floatround( flDamage ); }
public clcmd__SayDamage( const iId ) { new i; for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ iId ][ i ] ) client_print( iId, print_console, "%n te hizo %d de daño", i, g_Damage[ iId ][ i ] );
for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ i ][ iId ] ) client_print( iId, print_console, "Le hiciste %d de daño a %n", g_Damage[ i ][ iId ], i ); }
Mensajes: 220
Temas: 8
Registro en: Nov 2018
Reputación:
7
27/01/2019, 08:24 AM
(Última modificación: 27/01/2019, 08:25 AM por w0w. Edited 1 time in total.)
(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).
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
(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_Damage[ MAX_USERS ][ MAX_USERS ]
public plugin_init( ) { register_plugin( PLUGIN, VERSION, AUTHOR ) register_clcmd( "say /damage", "clcmd__SayDamage" ); RegisterHam( Ham_TakeDamage, "player", "ham__PlayerTakeDamagePre", 0 ); }
public ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttacker, Float:flDamage, const iDamageByte ) { // blablabla con los returns necesarios que quieras aplicar g_Damage[ iVictim ][ iAttacker ] += floatround( flDamage ); }
public clcmd__SayDamage( const iId ) { new i; for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ iId ][ i ] ) client_print( iId, print_console, "%n te hizo %d de daño", i, g_Damage[ iId ][ i ] );
for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ i ][ iId ] ) client_print( iId, print_console, "Le hiciste %d de daño a %n", g_Damage[ i ][ iId ], i ); }
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
Mensajes: 15
Temas: 0
Registro en: Jun 2018
Reputación:
0
(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_Damage[ MAX_USERS ][ MAX_USERS ]
public plugin_init( ) { register_plugin( PLUGIN, VERSION, AUTHOR ) register_clcmd( "say /damage", "clcmd__SayDamage" ); RegisterHam( Ham_TakeDamage, "player", "ham__PlayerTakeDamagePre", 0 ); }
public ham__PlayerTakeDamagePre( const iVictim, const iInflictor, const iAttacker, Float:flDamage, const iDamageByte ) { // blablabla con los returns necesarios que quieras aplicar g_Damage[ iVictim ][ iAttacker ] += floatround( flDamage ); }
public clcmd__SayDamage( const iId ) { new i; for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ iId ][ i ] ) client_print( iId, print_console, "%n te hizo %d de daño", i, g_Damage[ iId ][ i ] );
for( i = 1; i <= MaxUsers; ++i ) if( is_user_connected( i ) ) if( i != iId && g_Damage[ i ][ iId ] ) client_print( iId, print_console, "Le hiciste %d de daño a %n", g_Damage[ i ][ iId ], i ); }
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
|