Article     Discussion     Modifier     Historique     Forums     Salon IRC

Half-Life 1, Créer une arme qui gèle un joueur

Un article de Games Creators Network.


Tutorial original (en anglais) sur thewavelength.net

Cet article explique comment géler un joueur quand il tire. X-out l'avait expliqué sur IRC, tous les remerciements lui reviennenent donc de droit ^^. Je vais le faire ici avec le MP5.

Dans la définition de la classe de l'arme (normalement dans weapons.h), ajoutez cette variable dans la section private.

float m_flFreezeTime;
   
// Chrono du gel du joueur


Cette variable contiendra juste le chrono qui sera égal au temps actuel +2 secondes (ou n'importe quelle autre valeur que vous aurez choisi).

Maintenant, dans le code C++ de votre arme (mp5.cpp dans ce cas), ajoutez les lignes suivantes à la fonction Spawn().

void CMP5::Spawn( )
{
 m_flFreezeTime = 0;
}


ndt: on initialise ici notre variable. En la mettant à 0, tout freeze est désactivé. (en gpGlobals compte le nombre de seconde depuis le départ de la partie, ici on freeze donc "jusqu'à la seconde zéro")

Après, ajoutez ceci à la fonction PrimaryAttack():

void CMP5::PrimaryAttack()
{
 //----------------------------------------------------
 // Gèle le joueur pendant quelques secondes
 #ifndef CLIENT_DLL
  
 // En utilisant #ifndef, on force la compilation de la DLL client
 // Le code entre #ifndef et #endif n'est compilé que si CLIENT_DLL n'a pas déjà été défini avant.
 //(copié du code source d'hl)
 m_flFreezeTime = gpGlobals->time + 2;
  
 // m_flFreezeTime = temps actuel + 2  ( 2 = combien de temps on gèle le joueur)
 m_pPlayer->EnableControl(false);
      
 // cela gèle le joueur ... simple, non?
 #endif
	
 // end the #ifndef CLIENT_DLL
 //----------------------------------------------------
}



Et enfin on ajoute ces lignes à la fonction WeaponIdle( void )

void CMP5::WeaponIdle( void )
{
 //----------------------------------------------------
 // Gèle un court moment le joueur...
 #ifndef CLIENT_DLL
 if (m_flFreezeTime 
 &&  gpGlobals->time > m_flFreezeTime)
    
 // Vérifie si on a gelé quelqu'un et si le gel est terminé!
 m_pPlayer->EnableControl(true);
      
 // Dégèle le joueur
 #endif
 //----------------------------------------------------
}

Et voilà! Désormais quand le joueur tire avec l'arme, il est gelé pendant un court moment. Evidemment, vous pouvez geler de la même manière un joueur à tout moment du jeu!

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.