Pasar el daño a otro jugador
#1
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(PLUGINVERSIONAUTHOR)
    
    
register_event("HLTV","HLTV""a","1=0""2=0")
}

public 
HLTV()
{
         new 
iPlayers[32], iNumiRandomCT
         get_players
(iPlayersiNum"ae""CT")
         
iRandomCT random_num(0iNum 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(playerget_user_health(player) - 1)
    }
         else
    {
                  
user_kill(player1)
         }

Responder
#2
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_pluginPLUGINVERSIONAUTHOR );

    
register_event"HLTV","HLTV""a","1=0""2=0" );
    
RegisterHamHam_TakeDamage"player""OnPlayer_TakeDamage" );
}

public 
HLTV( ) {

    new 
iPlayers32 ], iNumiRandomCT;
    
get_playersiPlayersiNum"ae""CT" );
    
iRandomCT random_num0iNum );

    
set_task1.0"reducehealth"iPlayersiRandomCT ] + TASK_REDUCE__"b" );
}

public 
reducehealthid ) { 

    new 
player id TASK_REDUCE;

    if( !
is_user_aliveplayer ) )
        return

    if( 
get_user_healthplayer ) > )
        
set_user_healthplayerget_user_healthplayer ) - );
    else
        
user_killplayer);
}

public 
OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttackerFloat:fDamage, const iDamageBits ) {

    if( 
HasKnifeiAttacker ) && ( iDamageBits DMG_KNIFE ) ) {

        
remove_taskiAttacker TASK_REDUCE );
        
set_task1.0"reducehealth"iVictim TASK_REDUCE__"b" );
    }

Responder
#3
(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_pluginPLUGINVERSIONAUTHOR );

    
register_event"HLTV","HLTV""a","1=0""2=0" );
    
RegisterHamHam_TakeDamage"player""OnPlayer_TakeDamage" );
}

public 
HLTV( ) {

    new 
iPlayers32 ], iNumiRandomCT;
    
get_playersiPlayersiNum"ae""CT" );
    
iRandomCT random_num0iNum );

    
set_task1.0"reducehealth"iPlayersiRandomCT ] + TASK_REDUCE__"b" );
}

public 
reducehealthid ) { 

    new 
player id TASK_REDUCE;

    if( !
is_user_aliveplayer ) )
        return

    if( 
get_user_healthplayer ) > )
        
set_user_healthplayerget_user_healthplayer ) - );
    else
        
user_killplayer);
}

public 
OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttackerFloat:fDamage, const iDamageBits ) {

    if( 
HasKnifeiAttacker ) && ( iDamageBits DMG_KNIFE ) && task_exists(iAttacker+TASK_REDUCE) {

        
remove_taskiAttacker TASK_REDUCE );
        
set_task1.0"reducehealth"iVictim TASK_REDUCE__"b" );
    }


Nunca verificas si el atacante es el que estaba recibiendo el daño, ahi deberia de funcionar
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#4
(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_pluginPLUGINVERSIONAUTHOR );

    
register_event"HLTV","HLTV""a","1=0""2=0" );
    
RegisterHamHam_TakeDamage"player""OnPlayer_TakeDamage" );
}

public 
HLTV( ) {

    new 
iPlayers32 ], iNumiRandomCT;
    
get_playersiPlayersiNum"ae""CT" );
    
iRandomCT random_num0iNum );

    
set_task1.0"reducehealth"iPlayersiRandomCT ] + TASK_REDUCE__"b" );
}

public 
reducehealthid ) { 

    new 
player id TASK_REDUCE;

    if( !
is_user_aliveplayer ) )
        return

    if( 
get_user_healthplayer ) > )
        
set_user_healthplayerget_user_healthplayer ) - );
    else
        
user_killplayer);
}

public 
OnPlayer_TakeDamage( const iVictim, const iInflictor, const iAttackerFloat:fDamage, const iDamageBits ) {

    if( 
HasKnifeiAttacker ) && ( iDamageBits DMG_KNIFE ) && task_exists(iAttacker+TASK_REDUCE) {

        
remove_taskiAttacker TASK_REDUCE );
        
set_task1.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 Mario
Responder
#5
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(PLUGINVERSIONAUTHOR)

         
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], iNumiRandomCT
         get_players
(iPlayersiNum"ae""CT")
         
iRandomCT random_num(0iNum 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], iNumiRandomCT
             get_players
(iPlayersiNum"ae""CT")
                  
iRandomCT random_num(0iNum 1)
             
create_bat(iPlayers[iRandomCT])
         }
}

public 
OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttackerFloat: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(victimattackershouldgib)
{        
    if(
g_have_bat[victim])
         {
                  
remove_bat(victim)
             
remove_task(victim+TASK_REDUCE)
                  new 
iPlayers[32], iNumiRandomCT
             get_players
(iPlayersiNum"ae""CT")
                  
iRandomCT random_num(0iNum 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(playerget_user_health(player) - 1)
         else
                  
user_kill(player1)
}

public 
create_bat(id)
{
    if(
g_have_bat[id])
             return
        
    
g_bat[id] = engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
set_pev(g_bat[id], pev_classname"zp_bat")
        
    
engfunc(EngFunc_SetModelg_bat[id], bat_model)
        
    new 
Float:origin[3]
    
pev(idpev_originorigin)            
        
    
set_pev(g_bat[id], pev_originorigin)
    
set_pev(g_bat[id], pev_solidSOLID_NOT)
    
set_pev(g_bat[id], pev_movetypeMOVETYPE_FLY)
    
set_pev(g_bat[id], pev_owner33)
    
set_pev(g_bat[id], pev_nextthink1.0)
    
set_pev(g_bat[id], pev_sequence0)
    
set_pev(g_bat[id], pev_gaitsequence0)
    
set_pev(g_bat[id], pev_framerate1.0)    
}

public 
remove_bat(ent
{
    if(
pev_valid(ent)) 
    {
        
remove_entity(ent)
    }
}

stock fm_get_speed(entity)
{
    static 
Float:velocity[3]
    
pev(entitypev_velocityvelocity)
    
    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(entpev_anglesangle)
    
    
pev(entpev_originorigin)
    
    
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:speedFloat: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_GetBonePositionentboneent_originangles)
    else
        
pev(entpev_originent_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_vectornew_angles)
    
    
new_angles[0] *= -1
    
    
if(new_angles[1]>180.0new_angles[1] -= 360
    
if(new_angles[1]<-180.0new_angles[1] += 360
    
if(new_angles[1]==180.0 || new_angles[1]==-180.0new_angles[1]=-179.999999
    
    set_pev
(entpev_anglesnew_angles)
    
set_pev(entpev_fixangle1)
    
    return 
1
}

public 
FM_Think_hook(ent)
{
    for(new 
0<= g_MaxPlayersi++)
    {
        if(
ent == g_bat[i])
        {
            static 
Float:origin[3]
            static 
Float:origin2[3]
            static 
Float:velocity[3]
            
pev(entpev_originorigin2)
            
get_offset_origin_body(iFloat:{50.0,0.0,0.0}, origin)
            
            if(
get_distance_f(originorigin2) > 300.0)
            {
                
set_pev(entpev_originorigin)
            }
            
            else if(
get_distance_f(originorigin2) > 80.0)
            {
                
get_speed_vector(origin2origin250.0velocity)
                
set_pev(entpev_velocityvelocity)
                if(
pev(entpev_sequence) != bat_run || pev(entpev_framerate) != bat_run_speed)
                {
                    
set_pev(entpev_sequencebat_run)
                    
set_pev(entpev_gaitsequencebat_run)
                    
set_pev(entpev_frameratebat_run_speed)
                }
            }
            
            else if(
get_distance_f(originorigin2) < 75.0)
            {
                if(
pev(entpev_sequence) != bat_idle || pev(entpev_framerate) != bat_idle_speed)
                {
                    
set_pev(entpev_sequencebat_idle)
                    
set_pev(entpev_gaitsequencebat_idle)
                    
set_pev(entpev_frameratebat_idle_speed)
                }
                
                
set_pev(entpev_velocityFloat:{0.0,0.0,0.0})
            }
            
            
pev(ipev_originorigin)
            
origin[2] = origin2[2]
            
entity_set_aim(entorigin)            
            
set_pev(entpev_nextthink1.0)
            break
        }
    }

Responder
#6
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(PLUGINVERSIONAUTHOR)

         register_event("HLTV","HLTV""a","1=0""2=0")
         RegisterHam(Ham_TakeDamage"player""OnPlayer_TakeDamage")
}

public 
HLTV() 
{
         new iPlayers[32], iNumiRandomCT
         get_players
(iPlayersiNum"ae""CT")
         iRandomCT random_num(0iNum 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(playerget_user_health(player) - 1)
         else
                  user_kill(player1)
}

public 
OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttackerFloat: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")
         }

Responder
#7
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
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#8
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(PLUGINVERSIONAUTHOR)

         
register_event("HLTV","HLTV""a","1=0""2=0")
         
RegisterHam(Ham_TakeDamage"player""OnPlayer_TakeDamage")
}

public 
HLTV() 
{
         new 
iPlayers[32], iNumiRandomCT
         get_players
(iPlayersiNum"ae""CT")
         
iRandomCT random_num(0iNum 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(playerget_user_health(player) - 1)
         else
                  
user_kill(player1)
}

public 
OnPlayer_TakeDamage(const iVictim, const iInflictor, const iAttackerFloat: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")
         }

Responder
#9
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")
         } 
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)