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!

