Écrit par David Henry, le 20 juillet 2002
Attention : cet article a été écrit pour le SDK 2.2 d'Half-Life 1 ! Il se peut qu'il ne soit pas entièrement compatible avec des versions antérieures ou supérieures du Kit.
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 configurations et modifiables 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 points de vie des monstres, la puissance des medikits et batteries HEV, etc. Nous allons donc voir maintenant comment créer une nouvelle variable skill cvar.
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 cvars 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 trois cvars pour trois niveaux de difficulté. Gardez le même nom pour
les trois 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 niveau 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
Leur utilisation est vraiment très simple. Il vous suffit de l'appeler où vous
voulez (vérifiez que skill.h est inclue 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;
Cet article est mis à disposition sous un contrat Creative Commons (licence CC-BY-ND).