Créé le 26/11/2003
Dernière mise à jour le 26/11/2003
Les
mutators permettent de modifier plus ou moins la partie sans modifier directement
le GameInfo. C'est ce dernier qui fait appel aux functions spécifiques des mutators.
Pour
des questions d'optimisation, on peut avoir accés à d'autres functions
spécifiques appelé par le GameInfo qu'en ajoutant un GameRules avec le
mutator.
Hiérarchie de la classe: Object / Actor / Info / Mutator
Package de la classe: Engine
var string ConfigMenuClassName;
L'évantuel nom d'une page de configuration
du mutator, voir ce tutorial pour plus d'infos.
var string Description;
La description du mutator affiché dans le menu
du jeu lorsqu'on le sélectionne. Utilisez la lettre clef "|" pour
un retour a la ligne, "||" pour sauter une ligne etc...
var string FriendlyName;
Le nom du mutator.
var string GroupName;
L'évantuel groupe du mutator, sachant qu'un seul
mutator d'un même groupe peut être utilisé.
var Mutator NextMutator;
Sert pour faire une chaîne de mutator.
Voyez que dans chaque function on vérifie s'il y a un NextMutator,
et si oui on appele la même function du NextMutator. N'oubliez pas de faire
pareil, c'est pour prendre en compte les évantuels autres mutators utiliséent.
function ModifyPlayer(Pawn Other);
Permet de modifié les joueurs, cette function est appelé à chaque respawn.
Exemple:
function ModifyPlayer(Pawn Other)
{
Other.Health
= 150; // modifie la santé
Other.HealthMax
= 150; // modifie le maximum de santé gagné avec les kits
de soins
Other.AddShieldStrength(75);
// ajoute de l'armure
Other.GiveWeapon("xWeapons.FlakCannon");
// donne une arme
// augmente
de 25% la vitesse gobale du joueur
Other.AirSpeed
= Other.default.AirSpeed * 1.25; // modifie la vitesse du joueur en
l'air
Other.AccelRate = Other.default.AccelRate
* 1.25; // modifie l'accélération du joueur pour atteindre la vitesse maximale
Other.GroundSpeed = Other.default.GroundSpeed
* 1.25; // modifie la vitesse du joueur au sol
Other.JumpZ
= Other.default.JumpZ * 1.25; // modifie la hauteur de saut du joueur
Other.WaterSpeed = Other.default.WaterSpeed
* 1.25; // modifie la vitesse du joueur dans l'eau
if(NextMutator
!= None)
NextMutator.ModifyPlayer(Other);
}
Pour débuté on peut trés faire un mutator appelé "All Weapons" où dans cette function on y donne toutes les armes, de la même façon que dans cet exemple qui donne le FlakCannon.
function Mutate(string MutateString, PlayerController Sender);
Permet d'avoir des commandes commencant par "mutate"
avec son mutator.
Exemple:
function Mutate(string MutateString, PlayerController
Sender)
{
if(MutateString ~=
"test")
Sender.ClientMessage("Test
de la commande [mutate test]");
if(NextMutator
!= None)
NextMutator.Mutate(MutateString,
Sender);
}
Avec cet exemple, en entrant la commande "mutate test" vous
aurrez un message.
Le fait de comparer la commande entré (MutateString) approximativement
avec "~=" au lieu de "==" permet de ne pas prendre
en compte les majuscules des minuscules, ce qui fait qu'en entrant la commande
"mutate TeSt" ca fonctionnera aussi.
Exemple:
function bool CheckReplacement(Actor Other, out byte
bSuperRelevant)
{
bSuperRelevant
= 0;
if(Other.IsA('MiniHealthPack'))
// si l'actor est une fiole de santé
{
ReplaceWith(Other,
"xPickups.AdrenalinePickup"); // on remplace l'actor
par de l'adrénaline via la function adéquate
return
FALSE; // on stope la vérification de remplacement
}
return
TRUE;
}
Dans cette exemple le mutator remplacera toutes les fioles de santé par des bonus d'adrénaline.
5) Le fichier d'intégration (INT)
C'est ce fichier qui ferra reconnaîttre le mutator au jeu.
Exemple:
[Public]
Object=(Class=Class,MetaClass=Engine.Mutator,Name=MyPackage.MyMutator)
Bien sur, inutile d'ajouter un GameRules si l'on ne se sert pas d'au moins d'une de ces functions. Si certaine de ces functions on été détachéent da la classe mutator (si on fait la compraraison avec UT) c'est pour une question d'optimisation, ceut qui fait qu'un mutator n'a pas forcément besoin de son GameRules.
Exemple:
function PostBeginPlay()
{
local MyGameRules
GR;
Super.PostBeginPlay();
GR =
spawn(class'MyGameRules');
if(Level.Game.GameRulesModifiers
== None)
Level.Game.GameRulesModifiers =
GR;
else
Level.Game.GameRulesModifiers.AddGameRules(GR);
}
Almétons qu'on veut assigner des variables du mutator vers le GameRules (GR.MyVariable = MyVariable;), on le fait aprés l'avoir spawné et avant de l'ajouter au GameType.
Almétons qu'on se sert que du GameRules pour modifié la partie, on peut détruire le mutator juste aprés avec "Destroy();".
Voir le tutorial du GameRules pour plus d'infos sur ce dernier.