Exercices - Index des exercices
"EXERCICE - SORT SCRIPTE : GAIN D'ARGENT"
Le premier exercice que je poste, suite au développement du mod de The Gravedigger. L'idée est de créer un sort pour faire gagner de l'or au joueur. Nous allons faire en sorte que tout utilisateur du sort puisse gagner de l'or.
Enoncé :
Sort de gain d'or : Chaque fois qu'on utilise ce sort on doit gagner de l'infamie et 25% d'or. Ce sort est donné par un démon.
Réflexion :
Pour faire le sort pour gagner de l'or, il faut décomposer le problème en étapes.
Réponse ?
► Afficher le texte
1. combien de fric a le joueur
2. ça fait combien 25% à ajouter ?
3. ajouter les 25% calculé
4. augmenter l'infamie de 1 (il s'agit d'un sort démoniaque après tout)
Il faut aussi déterminer quand on va exécuter le script : au début, pendant ou à la fin du sort ?
Un script est lu et exécuté en une traite. Un bloc qui fait une exécution en boucle, comme "pendant le sort" ferait une exécution en boucle du script.
Réponse ?
► Afficher le texte
Au début ou à la fin, mais pas pendant. Sinon pour éviter d'ajouter de l'or à l'infini, on devrait verouiller le script par un moyen quelconque, ce qui est plus compliqué. Moi je pencherai pour le début du sort.
Le script :
Pour faire le script, il faut lui donner un nom, via ScriptName, utiliser le bloc BeginScriptEffectStart, des variables short et ref, les fonctions AddItem, GetItemCount, GetSelf et ModPCInfamy et une condition pour savoir si on a affaire au joueur ou non (pour l'infamie).
Réponse ?
► Afficher le texte
scn NineCirclesSpellAddGoldAndInfamyScript
; Pour le nom, j'ai utilisé le nom du mod en anglais, le type d'objet concerné (spell),
; ce qu'il fait et j'ai mis à la fin "Script" car l'ID du sort que je mettrai sera :
; NineCirclesSpellAddGoldAndInfamy et une ID doit être unique
short goldCount ; Nombre de pièces d'or
short goldBonus ; Gain de la cible
ref target ; La cible
Begin ScriptEffectStart
; On prend la référence de la cible du sort
set target to GetSelf
; On calcule la somme à ajouter et on l'ajoute
set goldCount to target.GetItemCount Gold001
set goldBonus to ((25 * goldCount) / 100)
target.AddItem goldCount
; On modifie l'infamie
if (target == player)
ModPCInfamy 1
endif
End
; Normalement, il n'y a pas besoin de mettre des "target" partout,
; sauf dans la condition "if", mais le script est plus "précis" ainsi selon moi.
; Pourquoi vérifier si on a ffaire au joueur avant de modifier l'infamie ?
; Parceque ModPCInfamy s'apllique au PC (Personal Character), soit le joueur.
; Et on ne veut pas que si on donne le sort à un poivrot de NPC
; celui-ci se mette à rendre le joueur infâme dans le seul souci de gagner de l'or !
; Et on va me dire "Oui mais on donne le sort uniquement au joueur" !
; Et pourquoi donc ? Les NPC qui lancent des sorts, c'est plus marrant que les NPC qui ne font rien ! Et puis peut-être que d'autre vont utiliser ce sort autrement.
;
Avant d'enregistrer le sort, il faut sélectionner son type.
Réponse ?
► Afficher le texte
Magic Effect
Le sort :
Vous pouvez maintenant créer un nouveau sort, pas besoin d'expérience pour l'utiliser. Par contre on aimerai bien un petit effet lorsqu'on le lance.
Réponse ?
► Afficher le texte
1. Aller dans la section "Spell"
2. Faire "New", mettre l'ID NineCirclesSpellAddGoldAndInfamy et choisir le type "Sort"
3. Choisir un effet "Script Effect", sur soi, pour 0 seconde car l'effet ne dépend pas du temps d'exécution.
4. Choisir une école : invocation. L'école d'altération est un peu trop souvent rencontrée a mon goût, et puis on fait apparaître du fric non ?
5. Choisir un effet : Invocation de haume d'aube mythique ou quelque chose que vous aimez.
6. On confirme et on enregistre.