Raised This Month: $32 Target: $400
 8% 

[Manque un petit truc] Impossible de se prendre des HS pour certains joueurs


  
 
 
Thread Tools Display Modes
Author Message
micapat
Veteran Member
Join Date: Feb 2010
Location: Nyuu, nyuu (France).
Old 06-19-2010 , 16:18   [Manque un petit truc] Impossible de se prendre des HS pour certains joueurs
#1

Bonjour !

Je cherche le moyen de bloquer les HS pour certains joueurs, selon la valeur d'une variable.

J'ai tenté ceci :

PHP Code:
/* ---------------------------------------------------- */
/*                  No HS Avec Casque                   */
 
public Gestion_HS(Float:v1[3], Float:v2[3], fNoMonsterspentToSkipptr)
{
    static 
iHitEntiHitEnt get_tr2(ptrTR_pHit)
    
    if(
<= iHitEnt <= Nbre_Joueurs)
    {
        if(
get_tr2(ptrTR_iHitgroup) == HIT_HEAD)
        {
            if(
Pos_Casque[ ? ]) // Comment récupérer l'ID de la victime ? :|
                
iHitEnt HIT_SHIELD
            
else
                
iHitEnt HIT_GENERIC
            
            set_tr2
(ptrTR_iHitgroupiHitEnt)
        }
    }

Merci d'avance =)

Last edited by micapat; 07-11-2010 at 07:07.
micapat is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 06-19-2010 , 16:41   Re: Impossible de se prendre des HS pour certains joueurs
#2

Ne hook pas TraceLine, hook Ham_TraceAttack c'est bien plus efficace.

http://forums.alliedmods.net/showthr...058#post726058
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
micapat
Veteran Member
Join Date: Feb 2010
Location: Nyuu, nyuu (France).
Old 06-21-2010 , 16:09   Re: Impossible de se prendre des HS pour certains joueurs
#3

Ca marche Merci =)
micapat is offline
micapat
Veteran Member
Join Date: Feb 2010
Location: Nyuu, nyuu (France).
Old 07-11-2010 , 07:01   Re: [Résolu] Impossible de se prendre des HS pour certains joueurs
#4

Je UP le sujet pour juste un petit truc ...

La fonction fonctionne : le joueur ne se prends pas de HS, mais on voit quand même le sang gicler. N'est-il pas possible de faire "l'effet bouclier" plutot ?

PHP Code:
public Player_TraceAttack(ididattackerFloat:damageFloat:fDirection[3], ptrdamagebits)
{
    if(
get_tr2(ptrTR_iHitgroup) == HIT_HEAD)
    {
        if(
Pos_Casque[id])
         {
               
set_tr2(ptrTR_iHitgroupHIT_SHIELD// HIT_SHIELD -> 8
         
}
         else
         {
               
set_tr2(ptrTR_iHitgroupHIT_GENERIC)
         }
    }

Merci =)
micapat is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-11-2010 , 07:07   Re: [Résolu] Impossible de se prendre des HS pour certains joueurs
#5

C'est possible, mais le truc c'est que tu ne bloques pas l'exécution de la fonction par HAM_SUPERCEDE, c'est pour ça que SpawnBlood et TraceBlood sont appelés.

Voir le HLSDK pour mieux comprendre :

player.cpp
Code:
//=========================================================
// TraceAttack
//=========================================================
void CBasePlayer :: TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType)
{
	if ( pev->takedamage )
	{
		m_LastHitGroup = ptr->iHitgroup;

		switch ( ptr->iHitgroup )
		{
		case HITGROUP_GENERIC:
			break;
		case HITGROUP_HEAD:
			flDamage *= gSkillData.plrHead;
			break;
		case HITGROUP_CHEST:
			flDamage *= gSkillData.plrChest;
			break;
		case HITGROUP_STOMACH:
			flDamage *= gSkillData.plrStomach;
			break;
		case HITGROUP_LEFTARM:
		case HITGROUP_RIGHTARM:
			flDamage *= gSkillData.plrArm;
			break;
		case HITGROUP_LEFTLEG:
		case HITGROUP_RIGHTLEG:
			flDamage *= gSkillData.plrLeg;
			break;
		default:
			break;
		}

		SpawnBlood(ptr->vecEndPos, BloodColor(), flDamage);// a little surface blood.
		TraceBleed( flDamage, vecDir, ptr, bitsDamageType );
		AddMultiDamage( pevAttacker, this, flDamage, bitsDamageType );
	}
}
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 07-11-2010 , 08:03   Re: [Manque un petit truc] Impossible de se prendre des HS pour certains joueurs
#6

TraceAttack dans CS

PHP Code:
void CBasePlayer::TraceAttackentvars_t *pevAttackerfloat flDamageVector vecDirTraceResult *ptrint bitsDamageType )
{
    
BOOL bShouldBleed true;
    
BOOL bShouldSpark false;
    
BOOL bHitShield   IsHittingShieldvecDirptr );

    
CBaseEntity *pAttacker CBaseEntity::InstancepevAttacker );

    if ( 
m_iTeam == pAttacker->m_iTeam && GET_CVAR_FLOAT"mp_friendlyfire" ) )
    {
        
bShouldBleed false;
    }

    if ( !
pev->takedamage )
    {
        return;
    }

    
m_LastHitGroup ptr->iHitgroup;

    if ( 
bHitShield )
    {
        
flDamage 0.0;
        
bShouldBleed false;

        if ( 
RANDOM_LONG0) )
            
EMIT_SOUND_DYNENTpev ), CHAN_VOICE"weapons/ric_metal-1.wav"1.0ATTN_NORM0PITCH_NORM );
        else
            
EMIT_SOUND_DYNENTpev ), CHAN_VOICE"weapons/ric_metal-2.wav"1.0ATTN_NORM0PITCH_NORM );

        
UTIL_Sparksptr->vecEndPos );

        
pev->punchAngle.flDamage RANDOM_FLOAT( -0.150.15 );
        
pev->punchAngle.flDamage RANDOM_FLOAT( -0.150.15 );

        if ( 
pev->punchAngle.)
        {
            
pev->punchAngle.= -4;
        }

        if ( 
pev->punchAngle.< -)
        {
            
pev->punchAngle.= -5;
        }
        else if ( 
pev->punchAngle.)
        {
            
pev->punchAngle.5;
        }
    }
    else
    {
        switch ( 
ptr->iHitgroup )
        {
            case 
HITGROUP_HEAD :
            {
                if ( 
m_iKevlar == )
                {
                    
bShouldBleed false;
                    
bShouldSpark true;
                }
                 
                
flDamage *= 4;

                if ( 
bShouldBleed )
                {
                    
pev->punchAngle.flDamage * -0.5;
             
                    if ( 
pev->punchAngle.< -12 )
                    {
                        
pev->punchAngle.= -12;
                    }
             
                    
pev->punchAngle.flDamage RANDOM_FLOAT( -1.01.0 );
             
                    if ( 
pev->punchAngle.< -)
                    {
                        
pev->punchAngle.= -9;
                    }
                    else if ( 
pev->punchAngle.)
                    {
                        
pev->punchAngle.9;
                    }
                }
            }
            case 
HITGROUP_CHEST :
            {
                if ( 
m_iKevlar )
                {
                    
bShouldBleed false;
                }

                if ( 
bShouldBleed )
                {
                    
pev->punchAngle.flDamage * -0.1;
                     
                    if ( 
pev->punchAngle.< -)
                    {
                       
pev->punchAngle.= -4;
                    }
                }
            }
            case 
HITGROUP_STOMACH :
            {
                if ( 
m_iKevlar )
                {
                    
bShouldBleed false;
                }

                
flDamage *= 1.25;

                if ( 
bShouldBleed )
                {
                    
pev->punchAngle.flDamage * -0.1;
                     
                    if ( 
pev->punchAngle.< -)
                    {
                       
pev->punchAngle.= -4;
                    }
                }
            }
            case 
HITGROUP_LEFTARM  :
            case 
HITGROUP_RIGHTARM :
            {
                if ( 
m_iKevlar )
                {
                    
bShouldBleed false;
                }
            }
            case 
HITGROUP_LEFTLEG  :
            case 
HITGROUP_RIGHTLEG :
            {
                
flDamage *= 0.75;
            }
        }
    }

    if ( 
bShouldBleed )
    {
        
BloodSplatptr->vecEndPosvecDirptr->iHitgroupflDamage );
        
SpawnBloodptr->vecEndPosBloodColor(), flDamage );
        
TraceBleedflDamagevecDirptrbitsDamageType );
    }
    else
    {
        if ( 
ptr->iHitgroup == HITGROUP_HEAD && bShouldSpark == true )
        {
            
MESSAGE_BEGINMSG_PVSSVC_TEMPENTITYptr->vecEndPos );
                
WRITE_BYTETE_STREAK_SPLASH );
                
WRITE_COORDptr->vecEndPos.);
                
WRITE_COORDptr->vecEndPos.);
                
WRITE_COORDptr->vecEndPos.);
                
WRITE_COORDptr->vecPlaneNormal.);
                
WRITE_COORDptr->vecPlaneNormal.);
                
WRITE_COORDptr->flPlaneDist );
                
WRITE_BYTE);
                
WRITE_SHORT22 );
                
WRITE_SHORT25 );
                
WRITE_SHORT65 );
            
MESSAGE_END();
        }
    }

    
AddMultiDamagepevAttackerthisflDamagebitsDamageType );

__________________
Arkshine is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-11-2010 , 09:13   Re: [Manque un petit truc] Impossible de se prendre des HS pour certains joueurs
#7

Ah je savais pas que tu l'avais fait en entier.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 07-11-2010 , 09:33   Re: [Manque un petit truc] Impossible de se prendre des HS pour certains joueurs
#8

Meuh si, je t'avais même montré. T'as dû t'en foutre.
__________________
Arkshine is offline
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 22:37.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode