Prélude
Aujourd'hui nous allons voir comment créer un système (simple) de bonus de set.
Ce système, utilisé notamment dans World of Warcraft, permet d'obtenir des bonus magiques si l'on possède plusieurs pièces d'un même set d'armure.
Ex: J'ai le torse en fer, et les jambières d'acier. Je n'ai aucun bonus. Par contre, si je trouve un torse en acier, j'aurai alors 2 pièces en acier, et je gagnerai +1 en force (uniquement lorsque les jambieres d'acier et le torse d'acier seront équipés).
Introduction
Pour créer ce genre de choses sur Oblivion, il faut utiliser un script object et des sorts "capacité". Le script permettra d'ajouter les sorts (le +1 force de l'exemple) au joueur.
Pour créer ce mod, j'ai utilisé un set de 4 pièces : Armure complète (style arène), casque, bouclier et épée.
-Lorsqu'on équipe qu'un seul item, on n'a aucun bonus.
-Lorsqu'on équipe l'armure et le casque, on obtient un "bouclier de 10%" (Appelé Aura de Protection).
-Lorsqu'on équipe l'épée et le bouclier, on obtient une "réflexion de dégats de 10%" (Appelé Aura de Vindicte).
-Lorsqu'on équipe les 4 pièces, on obtient les 2 bonus séparés, et en prime +5 dans chaque caractéristique: agilité-force-intell-etc. (C'est l'Illumination Divine).
Très bien, alors comment faire ça, techniquement ?
La partie technique !
1) Il faut avoir créé ses 4 items.
J'ai appelé mes 4 items ici aaPaladinArmor, aaPaladinHelm, aaPaladinShield et aaPaladinSword.
2) Il faut avoir créé les sorts à ajouter au joueur.
-Il faut que ça soit des sorts de type "Capacité" !
J'ai appellé les 3 sorts (auras) : aaPaladinArmorSpell (quand on a 2 pièces d'armure), aaPaladinWeaponSpell (quand on a boubou+épée) et aaPaladinBonusSpell (quand on a les 4).
3) On peut commencer le script :
- On va commencer par le début, c'est à dire vérifier si le joueur a les objets équipés, et sauvegarder la réponse dans une variable.
- Je commence en MenuMode, le script ne tournera que pendant le menu. Pourquoi pas plutôt un GameMode ? Parce qu'alors à chaque changement d'armure, il faut ouvrir et refermer le menu, ce qui n'est pas pratique.
Code : Tout sélectionner
;Un joli petit nom pour notre script
scn aaPaladinBonusSetScript
;Je déclare les variables qui serviront à savoir si le joueur a équipé un objet, et lequel.
Short Epee
Short Bouclier
Short Armure
Short Heaume
Begin MenuMode
;je vérifie ce qui est équipé
If (player.getequipped aaPaladinArmor == 1)
Set Armure to 1
else
Set Armure to 0
endif
if (player.getequipped aaPaladinHelm == 1)
Set Heaume to 1
else
Set Heaume to 0
endif
if (player.getequipped aaPaladinShield == 1)
Set Bouclier to 1
else
Set Bouclier to 0
endif
if (player.getequipped aaPaladinSword == 1)
Set Epee to 1
else
Set Epee to 0
endif
On va maintenant appliquer les auras (via le addspell). Je rajoute des compteurs (Compteur, Compteurbis, Compteurtris) pour être sur de ne pas appliquer l'aura sans arrêt (ne pas oublier de les déclarer au début du script!), et j'en profite aussi pour mettre un petit message personnalisé, à la place de l'affreux : "sort xxx ajouté à la liste du joueur". Les 2 messages blancs sont là, je le rappelle, afin de ne pas afficher ce message affreux.
Vous remarquerez aussi que j'en ai profité pour sournoisement jouer un son lors de l'aura 4 pièces (c'est un choix, ce n'est absolument pas obligatoire).
-Je vérifie à chaque fois si l'aura n'est pas déjà présente
-Penchons nous sur le premier if, l'aura de protection. Si l'aura n'est pas déjà appliquée (compteur = 0), que le heaume et l'armure sont équipées (heaume = 1 et armure = 1), et si l'épée ou le bouclier n'est pas équipé (epee = 0 ou bouclier = 0), j'applique l'aura.
Pourquoi vérifier si l'épée ou le bouclier n'est PAS équipé ? Parce que de cette façon, on peut prévoir de ne pas mettre l'aura protect si l'aura 4 pièces est active.
-Vous remarquez qu'à chaque IF, je réinistialise complètement les sorts et les compteurs. De cette manière, à chaque fois que le joueur touche à une piece d'armure du set, tout le calcul se refait. C'est plus propre.
Code : Tout sélectionner
;J'applique les auras
;aura de protection
if (Heaume == 1) && (Armure == 1) && (Compteur == 0) && ((Epee == 0) || (Bouclier == 0))
Message "Bonus 2 pièces : Aura de Protection"
Message " "
Message " "
;on ajoute l'aura de protection et on met le compteur à 1
player.addspell aaPaladinArmorSpell
Set Compteur to 1
;on réinitialise ensuite tous les autres compteurs/auras
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
if (Compteur ==1) && ((Armure == 0) || (Heaume == 0))
;on réinitialise tout lorsqu'on enlève l'aura de protection
Set Compteur to 0
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
;aura de vindicte
if (Epee == 1) && (Bouclier == 1) && (Compteurbis == 0) && ((Armure == 0) || (Heaume == 0))
Message "Bonus 2 pièces : Aura de Vindicte"
Message " "
Message " "
player.addspell aaPaladinWeaponSpell
Set Compteurbis to 1
Set Compteur to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinBonusSpell
endif
if (Compteurbis == 1) && ((Epee == 0) || (Bouclier == 0))
Set Compteur to 0
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
;aura bonus 4 pieces
if (Armure == 1) && (Bouclier == 1) && (Epee == 1) && (Heaume == 1) && (Compteurtris == 0)
Playsound aaNemesisSound
Message "Bonus 4 pièces : Illumination Divine"
Message " "
Message " "
player.addspell aaPaladinWeaponSpell
player.addspell aaPaladinArmorSpell
player.addspell aaPaladinBonusSpell
Set Compteurtris to 1
Set Compteur to 0
Set Compteurbis to 0
endif
if (Compteurtris == 1) && ((Armure == 0) || (Bouclier == 0) || (Epee == 0) || (Heaume == 0))
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinBonusSpell
Set Compteurtris to 0
Set Compteur to 0
Set Compteurbis to 0
endif
J'ai ajouté un petit quelque chose, parce que nous savons tous que peu de gens lisent les readme... Rien de tel qu'un petit MessageBox pour rappeller au joueur lambda que la pièce d'armure qu'il tient en main peut faire partie d'un Set.
Je vais donc rajouter un petit compteur pour être sur que le message n'apparaisse pas à chaque fois qu'il équipe l'objet, et oublier le bloc MenuMode pour lui préférer un bon vieil OnEquip.
Code : Tout sélectionner
;on oublie pas de déclarer son compteur
Short DoOnce
Begin OnEquip
if (DoOnce == 0)
MessageBox "En vous en équipant, vous sentez que ce métal n'est pas comme les autres. Pour profiter pleinement de ses pouvoirs, il faut que le set complet soit réuni."
Set DoOnce to 1
endif
End
On remet bien tout dans l'ordre, on vérifie d'un coup d'oeil s'il n'y a pas de bourdes :
Code : Tout sélectionner
scn aaPaladinBonusSetScript
Short DoOnce
Short Epee
Short Bouclier
Short Armure
Short Heaume
Short Compteur
Short Compteurbis
Short Compteurtris
Begin MenuMode
;vérifie ce qui est équipé
If (player.getequipped aaPaladinArmor == 1)
Set Armure to 1
else
Set Armure to 0
endif
if (player.getequipped aaPaladinHelm == 1)
Set Heaume to 1
else
Set Heaume to 0
endif
if (player.getequipped aaPaladinShield == 1)
Set Bouclier to 1
else
Set Bouclier to 0
endif
if (player.getequipped aaPaladinSword == 1)
Set Epee to 1
else
Set Epee to 0
endif
;Pose les auras
;aura protect
if (Heaume == 1) && (Armure == 1) && (Compteur == 0) && ((Epee == 0) || (Bouclier == 0))
Message "Bonus 2 pièces : Aura de Protection"
Message " "
Message " "
player.addspell aaPaladinArmorSpell
Set Compteur to 1
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
if (Compteur ==1) && ((Armure == 0) || (Heaume == 0))
Set Compteur to 0
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
;aura vindicte
if (Epee == 1) && (Bouclier == 1) && (Compteurbis == 0) && ((Armure == 0) || (Heaume == 0))
Message "Bonus 2 pièces : Aura de Vindicte"
Message " "
Message " "
player.addspell aaPaladinWeaponSpell
Set Compteurbis to 1
Set Compteur to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinBonusSpell
endif
if (Compteurbis == 1) && ((Epee == 0) || (Bouclier == 0))
Set Compteur to 0
Set Compteurbis to 0
Set Compteurtris to 0
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinBonusSpell
endif
;aura bonus 4 pieces
if (Armure == 1) && (Bouclier == 1) && (Epee == 1) && (Heaume == 1) && (Compteurtris == 0)
Playsound aaNemesisSound
Message "Bonus 4 pièces : Illumination Divine"
Message " "
Message " "
player.addspell aaPaladinWeaponSpell
player.addspell aaPaladinArmorSpell
player.addspell aaPaladinBonusSpell
Set Compteurtris to 1
Set Compteur to 0
Set Compteurbis to 0
endif
if (Compteurtris == 1) && ((Armure == 0) || (Bouclier == 0) || (Epee == 0) || (Heaume == 0))
player.removespell aaPaladinWeaponSpell
player.removespell aaPaladinArmorSpell
player.removespell aaPaladinBonusSpell
Set Compteurtris to 0
Set Compteur to 0
Set Compteurbis to 0
endif
End
;Message prévenant du bonus de set
Begin OnEquip
if (Doonce == 0)
MessageBox "En vous en équipant, vous sentez que ce métal n'est pas comme les autres. Pour profiter pleinement de ses pouvoirs, il faut que le set complet soit réuni."
Set Doonce to 1
endif
End

Je place donc mon script aaPaladinBonusSetScript sur aaPaladinArmor, aaPaladinHelm, aaPaladinShield et aaPaladinSword.
Je sauvegarde mon esp, et je vais voir en jeu ce que ça donne

Si ça marche pas, vous avez du faire une erreur quelque part. Je peux vous assurer que mon script est fonctionnel

Et si ça marche

A la prochaine,
Vaykadji
PS: Et pensez à moi dans vos crédits si ce tuto vous a aidé.