Tuto - Index des tutos de Beeratwork - INFO
Après le tuto sur l'évolution des armes, voici un tuto sur le changement de garde.
Voici comment faire
"SCRIPT - CHANGEMENT DE GARDE A LA BEERATWORK"
Donc crédits svp
Ce script n'est finalement pas compliqué à comprendre, mais j'ai galéré au début : je ne connaissais pas OBSE.
Pour faire "simple", je vais d'abord expliquer en quelque mots ce qui se passe et je vais commenter plus en détails le script de Sang Noir (v7).
Le script est de type MagicEffect. Je suppose que vous avez un minimum de connaissance en script et en création de sort pour suivre ce tuto. OBSE est absolument nécessaire pour faire fonctionner ce script.
Vous devez savoir qu'un sort est un "one shoot". C'est-à-dire que lorsque vous lancez un sort avec un effet scripté, l'effet scripté démarre avec les variable initialisée, en cours de route certaines vont changer, etc. Mais la seconde fois que vous lancerez le sort, l'effet repartira de zéro. En gros, le sort crée des "instances d'effet". Et un effet n'existe que le temps qu'on lui a attribué. Compris ? Pour avoir un variable dont on veut conserver l'état, il faut qu'elle soit externe au script d'effet. Elle doit soit être globale, soit être une variable de quête. Pour créer une variable de quête, il suffit de créer une ID de quête et d'y associer un script dans lequel on définit une variable.
Lorsque le sort commence, on vérifie si le joueur a dégainé son arme. Si non, on verrouille le reste du script. La variable Lock est mise à 1. Si oui, on ne fait rien, puisque par défaut elle vaut zéro (script AARSangNoirSpellChangeHanding00Script commentaire 00). Pour info, AARSangNoirGlobalVersionOBSE est une variable globale qui sert à verrouiller le script dans la version non OBSE (pour bien montrer au joueur ce qu'il rate en ne l'installant pas, hé hé hé). Ensuite (script AARSangNoirSpellChangeHanding00Script commentaire 01) on fait référence au bouclier qui équipe le joueur, à l'épée et on mémorise le type de l'épée. Est-elle à une ou à deux mains (script AARSangNoirSpellChangeHanding00Script commentaire 02)? cela fait, il faut encore vérifier si le joueur est bien équipé de Sang Noir, puisque le sort ne doit absolument pas permettre au joueur de tenir une dague à deux mains comme un drôle (script AARSangNoirSpellChangeHanding00Script commentaire 03)! J'aurais pu utiliser un "player.GetEquippedItem AARSangNoir07", mais ce n'était pas la seule arme dont on peut changer la garde, donc j'ai opté pour une variable globale. Lorsque le joueur tente de lancer le sort sur une autre arme que Sang Noir, AARSangNoirGlobalHandEquiped vaut zéro (géré sur les épées), donc il fau châtier ce mufle qui ose insulter l'épée (script AARSangNoirSpellChangeHanding00Script commentaire 04). En fonction de l'épée, et en fonction de son type, on change la garde mais aussi la puissance de frappe (script AARSangNoirSpellChangeHanding00Script commentaire 05). On frappe plus fort avec deux mains non ? Et la vitesse aussi change... A deux mains, il ne faut pas oublier de déséquipper le bouclier pour ne pas qu'il reste collé au bras.
► Afficher le texte
Code : Tout sélectionner
ScriptName AARSangNoirSpellChangeHanding00Script
; Ce script doit être utilisé sur un sort pour changer le port de l'épée
short random
ref RefWeapon
short TypWeapon
ref RefShield
short step
short stepIn
short Lock
; 00.Lorsque le sort commence. L'arme est-elle dégainée ?
Begin ScriptEffectStart
if (player.IsWeaponOut == 0)
MessageBox "Sang Noir s'oppose à cette ineptie !"
; MessageBox "Dark Blood opposes this nonsense !"
set Lock to 1
endif
if (AARSangNoirGlobalVersionOBSE == 1 && Lock == 0)
MessageBox "Vous devez utiliser OBSE pour changer"
; MessageBox "You must use OBSE to change"
endif
End
; 01.Exécution tant que dure le sort.
Begin ScriptEffectUpdate
if (AARSangNoirGlobalVersionOBSE == 0 && Lock == 0)
; Analyse
; 02. Prendre la référence du bouclier et de l'arme, prendre le type de l'arme.
if (step == 0)
set RefShield to player.GetEquippedObject 13
set RefWeapon to player.GetEquippedObject 16
set TypWeapon to GetWeaponType RefWeapon
set step to 1
; Sang Noir en main ?
; 03. Vérifier l'état de la variable globale qui indique si le joueur est équipé
elseif (step == 1)
if (AARSangNoirGlobalHandEquiped == 0)
set step to 2
elseif (AARSangNoirGlobalHandEquiped == 1)
set step to 3
elseif (AARSangNoirGlobalHandEquiped == 2)
set step to 4
endif
; Arme classique, erreur
; 04. Le joueur n'est pas équipé de Sang Noir, il faut le punir.
elseif (step == 2)
if (stepIn == 0)
MessageBox "Sang Noir siffle de colère, ne la provoquez pas !"
set stepIn to 1
elseif (stepIn == 1)
set random to (1 + GetRandomPercent * 0.09)
set stepIn to 2
elseif (stepIn == 2)
if (random == 1)
player.Cast AARSangNoirSpellRise00 player
set stepIn to 3
elseif (random == 2)
player.Cast AARSangNoirSpellRise01 player
set stepIn to 3
elseif (random == 3)
player.Cast AARSangNoirSpellRise02 player
set stepIn to 3
elseif (random == 4)
player.Cast AARSangNoirSpellRise03 player
set stepIn to 3
elseif (random == 5)
player.Cast AARSangNoirSpellRise04 player
set stepIn to 3
elseif (random == 6)
player.Cast AARSangNoirSpellRise05 player
set stepIn to 3
elseif (random == 7)
player.Cast AARSangNoirSpellRise06 player
set stepIn to 3
elseif (random == 8)
player.Cast AARSangNoirSpellRise07 player
set stepIn to 3
elseif (random == 9)
player.Cast AARSangNoirSpellRise08 player
set stepIn to 3
endif
elseif (stepIn == 3)
PlaySound AARSangNoirSoundFuryGhost00
set stepIn to 0
set step to 999
endif
; Sang Noir level 6
; 05.En fonction de l'épée, et en fonction de son type, on change la garde mais aussi la puissance de frappe.
elseif (step == 3)
; Vers deux mains
if (TypWeapon == 0)
player.UnequipItem RefShield
SetWeaponType 1 RefWeapon
SetAttackDamage 50 RefWeapon
SetWeaponSpeed 1.2 RefWeapon
set Step to 999
; Vers une main
elseif (TypWeapon == 1)
player.EquipItem RefShield
SetWeaponType 0 RefWeapon
SetAttackDamage 45 RefWeapon
SetWeaponSpeed 1.4 RefWeapon
set step to 999
endif
; Sang Noir level 7
elseif (step == 4)
; Vers deux mains
if (TypWeapon == 0)
player.UnequipItem RefShield
SetWeaponType 1 RefWeapon
SetAttackDamage 55 RefWeapon
SetWeaponSpeed 1.2 RefWeapon
set Step to 999
; Vers une main
elseif (TypWeapon == 1)
player.EquipItem RefShield
SetWeaponType 0 RefWeapon
SetAttackDamage 50 RefWeapon
SetWeaponSpeed 1.4 RefWeapon
set step to 999
endif
endif
endif
End