Mutator (UT2003)

  1. Introduction
  2. Les variables
  3. Les functions de bases
  4. Remplacer un actor
  5. Le fichier d'intégration (INT)
  6. Ajouter un GameRules

Créé le 26/11/2003
Dernière mise à jour le 26/11/2003

1) Introduction

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

Top

2) Les variables

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.

Top

3) Les functions de bases

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.

Top

4) Remplacer un actor

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.

Top

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)

Top

6) Ajouter un GameRules

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.

Top