Les Skill CVARs

Écrit le 03/07/2003 par DukeNukem
Dernière mise à jour : 30/01/2006

Introduction

Avant tout, qu'est ce que les skill cvars ? les skill cvars sont des variables qui varient selon le niveau de difficulté du jeu (le skill). Les valeurs des skill cvars leurs sont affectées dans le fichier skill.cfg dans le dossier de votre mod (d'où le « cvar » qui définie toutes la variables récupérée dans les fichiers de configuration et modifiable in-game dans la console).

Quels types de variables sont définies en skill cvar? ben toutes celles qui devront changer suivant le niveau de difficulté du jeu : la puissance des armes, les vies des monstres, la puissance des medikits et batteries HEV, etc.

Nous allons donc voir maintenant comment créer une nouvelle variable skill cvar.

Installation et initialisation

Pour commencer, on ne travaillera que dans la dll serveur. Ce qui signifie que les skill cvar ne sont pas utilisable côté client.

Ouvrez le fichier skill.h. Il contient la définition d'une structure appelée skilldata_t. Cette structure contient toutes les variables skill cvar du jeu.

Rajoutez-y donc la votre :

    // ma variable perso
    float maSkillCvar;

Notez qu'à la fin de la définition de cette structure, un objet global de cette structure est déclaré en extern (gSkillData). C'est par lui qu'on accédera à la variable.

À présent nous devons déclarer des objets de type cvar_t pour pouvoir récupérer notre variable depuis les fichiers *.cfg ou depuis la console. Déplacez vous dans game.cpp et ajoutez ( après le commentaire « //CVARS FOR SKILL LEVEL SETTINGS » pour faire plus propre) le bout de code suivant :

// Mes Skill CVAR Perso
cvar_t        sk_maSkillCvar1 = { "sk_maSkillCvar1", "0" };
cvar_t        sk_maSkillCvar2 = { "sk_maSkillCvar2", "0" };
cvar_t        sk_maSkillCvar3 = { "sk_maSkillCvar3", "0" };

Ici on crée 3 cvars pour 3 niveaux de difficulté. Gardez le même nom pour les 3 en changeant juste le numéro de la fin.

Maintenant nous allons « enregistrer » nos cvars. Toujours dans le même fichier mais dans sa deuxième moitié, dans la fonction GameDLLInit() (après le commentaire « // REGISTER CVARS FOR SKILL LEVEL STUFF »), ajoutez ceci :

    // Mes Skill CVAR Perso
    CVAR_REGISTER( &sk_maSkillCvar1 );  // { "sk_maSkillCvar1", "0" };
    CVAR_REGISTER( &sk_maSkillCvar2 );  // { "sk_maSkillCvar2", "0" };
    CVAR_REGISTER( &sk_maSkillCvar3 );  // { "sk_maSkillCvar3", "0" };

Il ne nous reste plus qu'à initialiser maSkillCvar à partir de sk_maSkillCvar#. Dans CGameRules::RefreshSkillData() (gamerules.cpp), ajoutez cette ligne :

    // Ma variable perso
    gSkillData.maSkillCvar = GetSkillCvar( "sk_maSkillCvar" );

Si votre variable maSkillCvar est aussi utilisée en multijoueur, il serait utile de la déclarer dans le code pour éviter toute triche et puis en multijoueur, les niveaux de difficultés n'existent pas. Pour cela, rajoutez ce bout de code dans la fonction CHalfLifeMultiplay::RefreshSkillData() du fichier multiplay_gamerules.cpp en affectant à votre variable la valeur voulue pour le mode multijoueur :

    // Ma variable perso
    gSkillData.maSkillCvar = 20;

Et voilà, c'est déjà terminé pour leur installation dans le code ! Reste à les initialiser dans skill.cfg (les valeurs données sont des exemples) :

// Mes Skill CVAR Perso
sk_maSkillCvar1    "10"    // facile
sk_maSkillCvar2    "20"    // moyen
sk_maSkillCvar3    "30"    // difficile

Utilisation

Leur utilisation est vraiment très simple. Il vous suffis de l'appeler où vous voulez (vérifiez que skill.h est inclus directement ou par l'intermédiaire d'un autre fichier d'en-tête) par gSkillData.maSkillCvar.

Par exemple, s'il s'agit des points de vie de votre entité, dans sa fonction Spawn(), procédez ainsi :

    pev->health  = gSkillData.maSkillCvar;