Mensajes: 843
Temas: 303
Registro en: Oct 2013
Reputación:
2
Hola todos, bueno tengo este código que hace que escoge un CT al azar y le empieza a bajar vida cada segundo, lo que quiero hacer es que si este jugador acuchilla a otro jugador le pase el daño, es decir que el jugador que acuchillo reciba el daño (que recibe cada segundo) y el que lo ataco ya no reciba daño y así sucesivamente, solo quiero pasar el daño con el cuchillo. Alguien me podría dar un ejemplo de como hacer esto por favor? ... gracias antemano
Código PHP: #include <amxmodx> #include <amxmisc> #include <fun>
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
const TASK_REDUCE = 445523
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("HLTV","HLTV", "a","1=0", "2=0") }
public HLTV() { new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1)
set_task(1.0, "reducehealth", iPlayers[iRandomCT]+TASK_REDUCE, _, _, "b") }
public reducehealth(id) { new player = id - TASK_REDUCE if(!is_user_alive(player)) return if(get_user_health(player) > 1) { set_user_health(player, get_user_health(player) - 1) } else { user_kill(player, 1) } }
Mensajes: 3,077
Temas: 33
Registro en: May 2017
Reputación:
34
18/02/2020, 02:17 AM
(Última modificación: 18/02/2020, 02:18 AM por Valentina.. Edited 1 time in total.)
No lo probe, pero debería funcionar bien..
Código PHP: #include < amxmodx > #include < fun > #include < fakemeta > #include < hamsandwich >
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) ( 1 <= %1 <= get_maxplayers( ) ) #define HasKnife(%1) ( IsPlayer( %1 ) && get_user_weapon( %1 ) == CSW_KNIFE ) #define DMG_KNIFE ( DMG_NEVERGIB | DMG_BULLET )
const TASK_REDUCE = 445523
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, AUTHOR );
register_event( "HLTV","HLTV", "a","1=0", "2=0" ); RegisterHam( Ham_TakeDamage, "player", "OnPlayer_TakeDamage" ); }
public HLTV( ) {
new iPlayers[ 32 ], iNum, iRandomCT; get_players( iPlayers, iNum, "ae", "CT" ); iRandomCT = random_num( 0, iNum - 1 );
set_task( 1.0, "reducehealth", iPlayers[ iRandomCT ] + TASK_REDUCE, _, _, "b" ); }
public reducehealth( id ) {
new player = id - TASK_REDUCE;
if( !is_user_alive( player ) ) return
if( get_user_health( player ) > 1 ) set_user_health( player, get_user_health( player ) - 1 ); else user_kill( player, 1 ); }
public OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits ) {
if( HasKnife( iAttacker ) && ( iDamageBits & DMG_KNIFE ) ) {
remove_task( iAttacker + TASK_REDUCE ); set_task( 1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b" ); } }
Mensajes: 6,664
Temas: 81
Registro en: Jan 2014
Reputación:
68
(18/02/2020, 02:17 AM)Chema escribió: No lo probe, pero debería funcionar bien..
Código PHP: #include < amxmodx > #include < fun > #include < fakemeta > #include < hamsandwich >
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) ( 1 <= %1 <= get_maxplayers( ) ) #define HasKnife(%1) ( IsPlayer( %1 ) && get_user_weapon( %1 ) == CSW_KNIFE ) #define DMG_KNIFE ( DMG_NEVERGIB | DMG_BULLET )
const TASK_REDUCE = 445523
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, AUTHOR );
register_event( "HLTV","HLTV", "a","1=0", "2=0" ); RegisterHam( Ham_TakeDamage, "player", "OnPlayer_TakeDamage" ); }
public HLTV( ) {
new iPlayers[ 32 ], iNum, iRandomCT; get_players( iPlayers, iNum, "ae", "CT" ); iRandomCT = random_num( 0, iNum - 1 );
set_task( 1.0, "reducehealth", iPlayers[ iRandomCT ] + TASK_REDUCE, _, _, "b" ); }
public reducehealth( id ) {
new player = id - TASK_REDUCE;
if( !is_user_alive( player ) ) return
if( get_user_health( player ) > 1 ) set_user_health( player, get_user_health( player ) - 1 ); else user_kill( player, 1 ); }
public OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits ) {
if( HasKnife( iAttacker ) && ( iDamageBits & DMG_KNIFE ) && task_exists(iAttacker+TASK_REDUCE) {
remove_task( iAttacker + TASK_REDUCE ); set_task( 1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b" ); } }
Nunca verificas si el atacante es el que estaba recibiendo el daño, ahi deberia de funcionar
► NO DOY AYUDA VIA MENSAJE PRIVADO ◄
* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Mensajes: 3,077
Temas: 33
Registro en: May 2017
Reputación:
34
(18/02/2020, 10:26 AM)kikizon2 escribió: (18/02/2020, 02:17 AM)Chema escribió: No lo probe, pero debería funcionar bien..
Código PHP: #include < amxmodx > #include < fun > #include < fakemeta > #include < hamsandwich >
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) ( 1 <= %1 <= get_maxplayers( ) ) #define HasKnife(%1) ( IsPlayer( %1 ) && get_user_weapon( %1 ) == CSW_KNIFE ) #define DMG_KNIFE ( DMG_NEVERGIB | DMG_BULLET )
const TASK_REDUCE = 445523
public plugin_init( ) {
register_plugin( PLUGIN, VERSION, AUTHOR );
register_event( "HLTV","HLTV", "a","1=0", "2=0" ); RegisterHam( Ham_TakeDamage, "player", "OnPlayer_TakeDamage" ); }
public HLTV( ) {
new iPlayers[ 32 ], iNum, iRandomCT; get_players( iPlayers, iNum, "ae", "CT" ); iRandomCT = random_num( 0, iNum - 1 );
set_task( 1.0, "reducehealth", iPlayers[ iRandomCT ] + TASK_REDUCE, _, _, "b" ); }
public reducehealth( id ) {
new player = id - TASK_REDUCE;
if( !is_user_alive( player ) ) return
if( get_user_health( player ) > 1 ) set_user_health( player, get_user_health( player ) - 1 ); else user_kill( player, 1 ); }
public OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits ) {
if( HasKnife( iAttacker ) && ( iDamageBits & DMG_KNIFE ) && task_exists(iAttacker+TASK_REDUCE) {
remove_task( iAttacker + TASK_REDUCE ); set_task( 1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b" ); } }
Nunca verificas si el atacante es el que estaba recibiendo el daño, ahi deberia de funcionar
Bueno ojo
Mensajes: 843
Temas: 303
Registro en: Oct 2013
Reputación:
2
Gracias otra pregunta le agregue al jugador que pierde la vida un modelo de murciélago que lo va siguiendo, cuando el jugador que pierde vida acuchilla a otro jugador me gustaría también pasarle el modelo de murciélago, también quisiera que si el jugador que pierde la vida se muere o se desconecta del servidor escoja un jugador al azar y le de el modelo y el task de vida y así sucesivamente, hice esto pero no puedo testear en este momento me podrían decir si esta bien?
Código PHP: #include <amxmodx> #include <fun> #include <fakemeta> #include <engine> #include <hamsandwich>
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) (1 <= %1 <= get_maxplayers()) #define HasKnife(%1) (IsPlayer(%1) && get_user_weapon(%1) == CSW_KNIFE) #define DMG_KNIFE (DMG_NEVERGIB | DMG_BULLET)
static const bat_model[] = "models/stukabat.mdl" static const bat_idle = 13 static const bat_run = 13 static const Float:bat_idle_speed = 0.5 static const Float:bat_run_speed = 13.0
new g_bat[33] new g_have_bat[33] new g_MaxPlayers
const TASK_REDUCE = 445523
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV","HLTV", "a","1=0", "2=0") RegisterHam(Ham_TakeDamage, "player", "OnPlayer_TakeDamage") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") register_forward(FM_Think, "FM_Think_hook") g_MaxPlayers = get_maxplayers() }
public plugin_precache() { precache_model(bat_model) }
public HLTV() { new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1)
set_task(1.0, "reducehealth", iPlayers[iRandomCT] + TASK_REDUCE, _, _, "b") create_bat(iPlayers[iRandomCT]) }
public client_disconnect(id) { if(g_have_bat[id]) { remove_bat(id) remove_task(id+TASK_REDUCE) new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1) create_bat(iPlayers[iRandomCT]) } }
public OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits) { if(HasKnife(iAttacker) && (iDamageBits & DMG_KNIFE) && task_exists(iAttacker + TASK_REDUCE)) { remove_task(iAttacker + TASK_REDUCE) remove_bat(iAttacker) create_bat(iVictim) set_task(1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b") } }
public fw_PlayerKilled(victim, attacker, shouldgib) { if(g_have_bat[victim]) { remove_bat(victim) remove_task(victim+TASK_REDUCE) new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1) create_bat(iPlayers[iRandomCT]) } } public reducehealth(id) { new player = id - TASK_REDUCE;
if(!is_user_alive(player)) return
if(get_user_health(player) > 1) set_user_health(player, get_user_health(player) - 1) else user_kill(player, 1) }
public create_bat(id) { if(g_have_bat[id]) return g_bat[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) set_pev(g_bat[id], pev_classname, "zp_bat") engfunc(EngFunc_SetModel, g_bat[id], bat_model) new Float:origin[3] pev(id, pev_origin, origin) set_pev(g_bat[id], pev_origin, origin) set_pev(g_bat[id], pev_solid, SOLID_NOT) set_pev(g_bat[id], pev_movetype, MOVETYPE_FLY) set_pev(g_bat[id], pev_owner, 33) set_pev(g_bat[id], pev_nextthink, 1.0) set_pev(g_bat[id], pev_sequence, 0) set_pev(g_bat[id], pev_gaitsequence, 0) set_pev(g_bat[id], pev_framerate, 1.0) }
public remove_bat(ent) { if(pev_valid(ent)) { remove_entity(ent) } }
stock fm_get_speed(entity) { static Float:velocity[3] pev(entity, pev_velocity, velocity) return floatround(vector_length(velocity)) }
stock get_offset_origin_body(ent, const Float:offset[3], Float:origin[3]) { if(!pev_valid(ent)) return 0 new Float:angle[3] pev(ent, pev_angles, angle) pev(ent, pev_origin, origin) origin[0] += floatcos(angle[1], degrees) * offset[0] origin[1] += floatsin(angle[1], degrees) * offset[0] origin[1] += floatcos(angle[1], degrees) * offset[1] origin[0] += floatsin(angle[1], degrees) * offset[1] return 1 }
stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:speed, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= num new_velocity[1] *= num new_velocity[2] *= num return 1 }
stock entity_set_aim(ent, const Float:origin2[3], bone=0) { if(!pev_valid(ent)) return 0 static Float:origin[3] origin[0] = origin2[0] origin[1] = origin2[1] origin[2] = origin2[2] static Float:ent_origin[3], Float:angles[3] if(bone) engfunc(EngFunc_GetBonePosition, ent, bone, ent_origin, angles) else pev(ent, pev_origin, ent_origin) origin[0] -= ent_origin[0] origin[1] -= ent_origin[1] origin[2] -= ent_origin[2] static Float:v_length v_length = vector_length(origin) static Float:aim_vector[3] aim_vector[0] = origin[0] / v_length aim_vector[1] = origin[1] / v_length aim_vector[2] = origin[2] / v_length static Float:new_angles[3] vector_to_angle(aim_vector, new_angles) new_angles[0] *= -1 if(new_angles[1]>180.0) new_angles[1] -= 360 if(new_angles[1]<-180.0) new_angles[1] += 360 if(new_angles[1]==180.0 || new_angles[1]==-180.0) new_angles[1]=-179.999999 set_pev(ent, pev_angles, new_angles) set_pev(ent, pev_fixangle, 1) return 1 }
public FM_Think_hook(ent) { for(new i = 0; i <= g_MaxPlayers; i++) { if(ent == g_bat[i]) { static Float:origin[3] static Float:origin2[3] static Float:velocity[3] pev(ent, pev_origin, origin2) get_offset_origin_body(i, Float:{50.0,0.0,0.0}, origin) if(get_distance_f(origin, origin2) > 300.0) { set_pev(ent, pev_origin, origin) } else if(get_distance_f(origin, origin2) > 80.0) { get_speed_vector(origin2, origin, 250.0, velocity) set_pev(ent, pev_velocity, velocity) if(pev(ent, pev_sequence) != bat_run || pev(ent, pev_framerate) != bat_run_speed) { set_pev(ent, pev_sequence, bat_run) set_pev(ent, pev_gaitsequence, bat_run) set_pev(ent, pev_framerate, bat_run_speed) } } else if(get_distance_f(origin, origin2) < 75.0) { if(pev(ent, pev_sequence) != bat_idle || pev(ent, pev_framerate) != bat_idle_speed) { set_pev(ent, pev_sequence, bat_idle) set_pev(ent, pev_gaitsequence, bat_idle) set_pev(ent, pev_framerate, bat_idle_speed) } set_pev(ent, pev_velocity, Float:{0.0,0.0,0.0}) } pev(i, pev_origin, origin) origin[2] = origin2[2] entity_set_aim(ent, origin) set_pev(ent, pev_nextthink, 1.0) break } } }
Mensajes: 843
Temas: 303
Registro en: Oct 2013
Reputación:
2
30/07/2020, 09:26 PM
(Última modificación: 30/07/2020, 09:29 PM por wicho. Edited 1 time in total.)
Perdón por revivir pero tengo una pregunta, como puedo hacer para que los jugadores que les están bajando la vida no se lo pasen entre ellos? o sea si un jugador se le esta bajando la vida y ataca a otro jugador que también se le esta bajando la vida se le quita al que lo acuchillo, lo que quiero hacer es prevenir eso, es decir, si un jugador que se le esta bajando la vida ataca a otro que también se le esta bajando la vida no se lo quita y sigue igual, solo lo va pasar a otro jugador que no se le este bajando la vida, como puedo hacer eso?
Código PHP: #include <amxmodx> #include <fun> #include <fakemeta> #include <hamsandwich>
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) (1 <= %1 <= get_maxplayers()) #define HasKnife(%1) (IsPlayer(%1) && get_user_weapon(%1) == CSW_KNIFE) #define DMG_KNIFE (DMG_NEVERGIB | DMG_BULLET)
const TASK_REDUCE = 445523
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV","HLTV", "a","1=0", "2=0") RegisterHam(Ham_TakeDamage, "player", "OnPlayer_TakeDamage") }
public HLTV() { new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1)
set_task(1.0, "reducehealth", iPlayers[iRandomCT] + TASK_REDUCE, _, _, "b") }
public reducehealth(id) { new player = id - TASK_REDUCE
if(!is_user_alive(player)) return
if(get_user_health(player) > 1) set_user_health(player, get_user_health(player) - 1) else user_kill(player, 1) }
public OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits) { if(HasKnife(iAttacker) && (iDamageBits & DMG_KNIFE) && task_exists(iAttacker+TASK_REDUCE) { remove_task(iAttacker + TASK_REDUCE) set_task(1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b") } }
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
Cuando se le este bajando la vida Asignale una variable true, entonces para pasar lo que baja la vida chequeas que la variable sea falsa y cuando lo fake se vuelve verdadera y la tuya falsa
Mensajes: 843
Temas: 303
Registro en: Oct 2013
Reputación:
2
Asi estaria bien?
Código PHP: #include <amxmodx> #include <fun> #include <fakemeta> #include <hamsandwich>
#define PLUGIN "Reduce HP" #define VERSION "1.0" #define AUTHOR "kha"
#define IsPlayer(%1) (1 <= %1 <= get_maxplayers()) #define HasKnife(%1) (IsPlayer(%1) && get_user_weapon(%1) == CSW_KNIFE) #define DMG_KNIFE (DMG_NEVERGIB | DMG_BULLET)
const TASK_REDUCE = 445523
new g_pasardamage[33]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV","HLTV", "a","1=0", "2=0") RegisterHam(Ham_TakeDamage, "player", "OnPlayer_TakeDamage") }
public HLTV() { new iPlayers[32], iNum, iRandomCT get_players(iPlayers, iNum, "ae", "CT") iRandomCT = random_num(0, iNum - 1)
set_task(1.0, "reducehealth", iPlayers[iRandomCT] + TASK_REDUCE, _, _, "b") }
public reducehealth(id) { new player = id - TASK_REDUCE
if(!is_user_alive(player)) return g_pasardamage[player] = true
if(get_user_health(player) > 1) set_user_health(player, get_user_health(player) - 1) else user_kill(player, 1) }
public OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttacker, Float:fDamage, const iDamageBits) { if(HasKnife(iAttacker) && (iDamageBits & DMG_KNIFE) && task_exists(iAttacker+TASK_REDUCE) && g_pasardamage[iAttacker]) { g_pasardamage[iAttacker] = true g_pasardamage[iVictim] = false remove_task(iAttacker + TASK_REDUCE) set_task(1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b") } }
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
30/07/2020, 11:29 PM
(Última modificación: 30/07/2020, 11:30 PM por Hinami.)
Código PHP: if(HasKnife(iAttacker) && (iDamageBits & DMG_KNIFE) && task_exists(iAttacker+TASK_REDUCE) && !g_pasardamage[iVictim])
Código PHP: if(HasKnife(iAttacker) && (iDamageBits & DMG_KNIFE) && task_exists(iAttacker+TASK_REDUCE) && !g_pasardamage[iVictim]) { g_pasardamage[iAttacker] = false remove_task(iAttacker + TASK_REDUCE) set_task(1.0, "reducehealth", iVictim + TASK_REDUCE, _, _, "b") }
|