Block DAMAGE y hacer algo al mismo tiempo
#1
Hola en esto que estuve renegando necesitaba lograr bloquear el damage entre players del mismo team y sacarle vida al que esta lastimando a su mismo team... si alguien pudiese ayudarme les estaria muy agradecido.

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

new CvarDmg;

public 
plugin_init() 
{
    
register_plugin("[ZP] ZClass: Mirror Zombie""1.8""007")
    
CvarDmg register_cvar("Cvar_Dmg","5.0")
    
register_event("Damage""mirror_dmg""b""2!0""3=0""4!0")


public 
mirror_dmg(id)
{
    new 
damage read_data(2// Get damage
    
new victim read_data(0// Victim(Thats you!)
    
new attacker get_user_attacker(victim// Attacker(Your enemy)
    
new teamattackerteamvictim;
    
teamattacker get_user_team(attacker);
    
teamvictim get_user_team(victim);
    
    
//Son del mismo team?
    
if(teamattacker != teamvictim)
        return 
PLUGIN_HANDLED;
        
    
// Not alive
    
if(!is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
if(victim != attacker// The victim cannot be himself
    
{
        
        new 
HP get_user_health(attacker) - get_pcvar_float(CvarDmg)
        new 
HPv get_user_health(victim) + get_pcvar_float(CvarDmg)
        
        if(
HP 0)
        {
            
set_user_health(attacker,(HP));
            if(
get_user_health(victim) < 100)
            {
                
set_user_health(victim, (HPv));
            }
        }
        else 
        {
            
user_kill(attacker)
            if(
get_user_health(victim) < 100)
            {
                
set_user_health(victim, (HPv));
            }
        }
    }
    return 
PLUGIN_HANDLED

[Imagen: Cop_pelvisthrusts.gif]
Responder
#2
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

public plugin_init()
{
    
register_plugin"No team damage""1.0"":whatever:" );
    
    
RegisterHamHam_TakeDamage"player""Ham_PlayerTakeDamage" );
}

public 
Ham_PlayerTakeDamage(victiminflictorattackerFloat:damageiDamageBits)
{
    if( !
is_user_connected(victim) || !is_user_connected(attacker) )
    {
        return 
HAM_IGNORED;
    }
    
    if( 
get_user_team(victim) == get_user_team(attacker) )
    {
        
set_user_health(attackerget_user_health(attacker)-damage);
        
client_print(attackerprint_center"Recibiste danio por atacar a tu team");
        
        return 
HAM_IGNORED;
    }
    
    return 
HAM_IGNORED;    

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

/* =================================================
*         [ Initiation & Global stuff ]
* ================================================== */

#define GetPlayerBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) )
#define SetPlayerBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) )
#define ClearPlayerBit(%1,%2) ( %1 &= ~( 1 << ( %2 & 31 ) ) )

#define isPlayerValid(%0) ( 1 <= %0 <= 32 )
#define isPlayerTeammate(%0,%1) ( get_user_team(%0) == get_user_team(%1) )

new g_iConnectedg_pCvarFriendlyFireHamHook:g_pTakeDamage;

public 
plugin_init( )
{
    
register_plugin"Self-damage""1.0""Manu" );
    
    
register_logevent"ev_RoundStart"2"1=Round_Start" );
    
    
g_pTakeDamage RegisterHamHam_TakeDamage"player""fw_PlayerTakeDamage_Pre"false );
    
    
g_pCvarFriendlyFire    get_cvar_pointer"mp_friendlyfire" );
}

public 
plugin_cfg( )
{
    if( 
is_plugin_loaded"Pause Plugins" ) != -)
        
server_cmd"amx_pausecfg add ^"Self-damage^"" );
}

public 
fw_PlayerTakeDamage_PreiVictimiInflictoriAttackerFloat:fDamageiDamageBits )
{
    if( 
isPlayerValidiAttacker ) && ( iVictim != iAttacker ) && GetPlayerBitg_iConnectediAttacker ) && isPlayerTeammateiAttackeriVictim ) )
    {
        
ExecuteHamBHam_TakeDamageiAttackeriInflictoriAttackerfDamage 3.0DMG_GENERIC );
        
        return 
HAM_SUPERCEDE;
    }
    
    return 
HAM_IGNORED;
}

public 
ev_RoundStart( )
{
    ( 
get_pcvar_numg_pCvarFriendlyFire ) > ) ? EnableHamForwardg_pTakeDamage ) : DisableHamForwardg_pTakeDamage );
}    

public 
client_putinserveriId SetPlayerBitg_iConnectediId );
public 
client_disconnectiId ClearPlayerBitg_iConnectediId ); 
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes
.
Responder
#4
Código PHP:
#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "Simple Mirror Damage"
#define VERSION "1.0"
#define AUTOR "Pancho.-'+hud;Erater"

#define is_user_valid_connected(%1) (1 <= %1 <= MaxPlayers && is_user_connected(%1))

new MaxPlayers;

public 
plugin_init()
{
    
register_pluginPLUGINVERSIONAUTOR );
    
    
RegisterHam(Ham_TakeDamage"player""Ham_PlayerTakeDamage");
    
    
MaxPlayers get_maxplayers();
}

public 
Ham_PlayerTakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if( 
victim != attacker && is_user_valid_connected(attacker) )
    {
        if( 
get_user_team(attacker) == get_user_team(victim) )
        {
            
SetHamParamEntity(1attacker);
            
SetHamParamEntity(3victim);
        }
    }
    
    return 
HAM_IGNORED;

Responder
#5
Una pregunta, que los parametros de takedamage, no son, Victim, Inflictor y Attacker? No me acuerdo, pero pienso y me sale victim inflictor y attacker o como es pre son diferentes? Ya ni me acuerdo
Responder
#6
(01/12/2015, 11:21 PM)Matians escribió: Una pregunta, que los parametros de takedamage, no son, Victim, Inflictor y Attacker? No me acuerdo, pero pienso y me sale victim inflictor y attacker o como es pre son diferentes? Ya ni me acuerdo

[ +Info ]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)