Bien configurer le script de combat SBS 2.6
Explication du tutoriel : Le script de combat SBS 2.6, modifie l'animation des compétences, et donc une compétence qui a l'ID 83 fera l'animation que lui dit de faire le script SBS et non pas le script approprié.
nous allons voir comment changer/ desdactiver ces animations et explorer un peu le script pour en comprendre les divers éléments
Désactivation / Modification des compétences De la compétence 83 à la 104 les animations sont modifiées et font un effet spécial, jetons un coup d'œil au script pour savoir d'où ça vient.
A la ligne 1 362 nous avons ceci :
- Spoiler:
- Citation :
- class Skill
#--------------------------------------------------------------------------
# ● スキルIDからアクションを決めます。
#--------------------------------------------------------------------------
def base_action
case @id
when 84
return "THROW_WEAPON"
when 85
return "MULTI_ATTACK"
when 86
return "RAPID_MULTI_ATTACK"
when 87
return "MULTI_SHOCK"
when 88
return "SHOCK_WAVE"
when 89
return "MULTI_ATTACK_RAND"
when 90
return "LINK_SKILL_91"
when 91
return "LINK_SKILL_92"
when 92
return "NORMAL_ATTACK"
when 93
return "CUT_IN"
when 94
return "STOMP"
when 95
return "ALL_ATTACK_1"
when 96
return "SKILL_ALL"
when 97
return "TRANSFORM_CAT"
when 98
return "2-MAN_ATTACK"
when 99
return "2-MAN_ATTACK_ASSIST"
when 100
return "4-MAN_ATTACK"
when 101
return "4-MAN_ATTACK_ASSIST"
when 102
return "4-MAN_ATTACK_ASSIST"
when 103
return "4-MAN_ATTACK_ASSIST"
when 104
return "THROW_FRIEND"
end
# 上記のID以外すべてに適用されるアクション
return "SKILL_USE"
end
C'est ici que ça se passe !
Analysons la structure :
- Code:
-
when 89
return "MULTI_ATTACK_RAND"
=> nous avons ici "Quand 89, retourne la chaine "MULTI_ATTACK_RAND"
Sous entendu quand l'ID du sort est 89, alors exécute la commande qui correspond a MULTI_ATTACK_RAND.
Mais ou est cette fameuse commande ?!
Remontons a la ligne 663
- Code:
-
ACTION = {
Il s'agit ici
d'un hachage ou nous avons dedans "Description_de_la_valeur" => "Valeur"
Dans un premier temps on nous indique qu'ils s'agit des actions basiques.
Descendons a la ligne 762, et nous voyons
- Code:
-
"MULTI_ATTACK_RAND"=> ["PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","Can Collapse","COORD_RESET"],
Ouch' ! Analysons ce morceau.
Pour la description de la valeur nous avons notre "MULTI_ATTACK_RAND, et la valeur sont 4 ligne presque identiques, en fait chaque "PREV_STEP_ATTACK", "WPN_SWING_VL" etc... renvoie a d'autres action contenu dans le script. Les enchainements des actions donnerons alors l'effet Attaques multiples sur ennemis aléatoire.
Voila comment marche ce script !
Désactivation / ou déplacement des animations spéciales Donc revenons a notre "class Skill" ( ligne 1 362)
Nous voulons désactiver l'attaque spéciale d'ID 85, pour qu'elle soit traitée normalement par un script de vue de coté normale, lancer le sort "H2O" par exemple
=> On va rechercher la ligne ou il y a marqué "When 85"
A la ligne 1370 nous avons :
- Code:
-
when 85
return "MULTI_ATTACK"
Donc on ne veut pas de l'animation MULTI_ATTACK donc remplacer 85 par 0
=> Se qui va donner en français : ( Essayez de trouver ! )
- Spoiler:
quand l'ID du sort est 0, alors exécute la commande qui correspond a MULTI_ATTACK.
Mais on sait que un sort avec l'ID 0 n'existe pas ! Mais le script lui ignore ça.
Donc la commande qui correspond a MULTI_ATTACK se déclenchera quand l'ID du sort utilisé sera égal a 0, c'est à dire jamais !
=> Maintenant nous voulons faire une animation MULTI_ATTACK mais quand l'ID du sort sera 41.
Donc il suffit de rajouter une ligne : (Essayez de trouver !)
- Spoiler:
- Code:
-
when 41
return "MULTI_ATTACK"
Donc le sort avec l'ID 41 effectua l'action MULTI_ATTACK !
Problèmes posé par ce script & les résolutions => Premier problème : L'utilisation de Cible : "2 ennemis aléatoire" & " 3 ennemis aléatoires" & "Un ennemi en continu" ne marchent plus
Dans la demo que je vous ai donné, un script appelé "Addon [Resrtaurer fonctions]" (je sais y'a une faute de frappe x')) corrige ces fonctions la (Je l'ai aient pas traduit encore en francais mais dans la prochaine demo ca y sera !
- Code:
-
module N01
# Crée un nouveau hachage et une nouvelle séquence
new_action_sequence = {
"DUAL_ATTACK" => ["PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","Can Collapse","COORD_RESET"],}
# Merges new hash with the script
ACTION.merge!(new_action_sequence)
end
module RPG
class Skill
alias k_dual_attack_base_action base_action
def base_action
if @id == 1 # un ennemi en continu a pour ID 1
return "DUAL_ATTACK"
end
k_dual_attack_base_action
end
end
end
Cette ligne nous intéresse :
- Citation :
- if @id == 1 # un ennemi en continu a pour ID 1
return "DUAL_ATTACK"
end
Ça dit que si l'ID du sort est 1 alors fait une attaque en continu. Mais le problème c'est que, je veux que ce soit l'ID 21 et 45 qui posséde cette fonction et non pas la 1 !
=> Déjà remplacer 1 par 21, après nous voulons rajouter une attaque, pas de problème !
Inserez une nouvelle ligne au dessus de "k_dual_attack_base_action" (l.26)
et mettez le code suivant :
- Citation :
- if @id == 45 # un ennemi en continu a pour ID 45
return "DUAL_ATTACK"
end
Voila ! Maintenant la fonction n°1 devrait ressembler a ça :
- Code:
-
module N01
# Crée un nouveau hachage et une nouvelle séquence
new_action_sequence = {
"DUAL_ATTACK" => ["PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","Can Collapse","COORD_RESET"],}
# Merges new hash with the script
ACTION.merge!(new_action_sequence)
end
module RPG
class Skill
alias k_dual_attack_base_action base_action
def base_action
if @id == 21 # un ennemi en continu a pour ID 21
return "DUAL_ATTACK"
end
if @id == 45 # un ennemi en continu a pour ID 21
return "DUAL_ATTACK"
end
k_dual_attack_base_action
end
end
end
Ca marche exactement pareil pour les deux autres fonctions !
La deuxième sert pour deux ennemis aléatoires, et la troisième pour trois !
N'oubliez pas ! Si vous voulez désactiver une fonction mettez 0 pour l'ID=> 2éme probléme : Je veux faire une épée brasier ( Le heros s'avance vers l'ennemi, puis afficher un dégâts d'épée en feu) qui marchait très bien, avec mon ancien script mais la le heros ne s'avance plus !
Par défaut, si ce n'est pas une attaque directe le script considère les actions comme des sort comme H2O, brasier... et donc ne fait pas avancer le heros. Le scripteur a bien sur tout prévu ! Imaginons notre attaque brasier possède l'ID 6.
=> On va refaire un tour a notre "class Skill" ( ligne 1 362)
et repérez cette ligne :
- Code:
-
when 92
return "NORMAL_ATTACK"
"NORMAL_ATTACK" est la fonction qui définit une attaque directe, donc en dessous de return "NORMAL_ATTACK" insérez le code suivant (essayez de trouver !)
- Spoiler:
when 6
return "NORMAL_ATTACK"
=> Ca va faire que si lID du sort est 6 alors "va vers l'ennemi et affiche l'animation"
Donc voila si vous avez des questions n'hésitez pas !
En espérant vous avoir aidés,
Blockade