Page 1 sur 1

[SCRIPT] Comment lancer aléatoirement un sort ?

Posté : sam. 15 déc. 2012, 11:34
par Armand
Je tente d’améliorer un script de combat qui a présenté quelques soucis en jeu en ayant recours au script multiples. Sur ce modèle :

Code : Tout sélectionner

IF
  See(NearestEnemyOf(Myself))
  OR(2)
    HaveSpell(CLERIC_MENTAL_DOMINATION)
    HaveSpell(WIZARD_HOLD_MONSTER)
  Global("#VPeaudecorce","LOCALS",1)
  OR(2)
    Global("#VImmoMonstres","LOCALS",0)
    Global("#VImmoMonstres","LOCALS",1)
  OR(2)
    Global("#VDominMental","LOCALS",0)
    Global("#VDominMental","LOCALS",1)
  !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
THEN
  RESPONSE #100
    IncrementGlobal("#VImmoMonstres","LOCALS",1)
    Spell(NearestEnemyOf(Myself),WIZARD_HOLD_MONSTER)
  RESPONSE #100
    IncrementGlobal("#VDominMental","LOCALS",1)
    Spell(NearestEnemyOf(Myself),CLERIC_MENTAL_DOMINATION)
END

Ici je vérifie si j'ai deux sorts qui sont "domination mentale" et "immobilisation des monstres" et si j'ai un des deux je vais lancer soit l'un soit l'autre.
Ma question serait de savoir si jamais je n'ai pas l'un des sorts le bloc le concernant risque de se déclencher tout de même non ? Y aurait-il un moyen de déclencher des sorts de manière aléatoire comme ceci en empêchant les sorts non disponibles de se déclencher ?

Posté : sam. 15 déc. 2012, 12:04
par Isaya
Comme Spell exige d'avoir le sort mémorisé, ton bloc a une chance sur deux de ne rien faire si le personnage n'a que l'un des deux sorts. L'usage du Or(2) sur les HaveSpell fait qu'il pourras passer les conditions et tomber aléatoirement sur le sort que le personnage n'a pas. Ce serait sans doute une action de perdue dans le combat.

A ma connaissance, il n'existe pas de solution élégante pour ce que tu veux faire. Je pense que le seul moyen est d'écrire de la façon suivante :
J'ai les deux sorts : je choisis aléatoirement
J'ai le sort 1 : je le lance
J'ai le sort 2 : je le lance

Posté : ven. 21 déc. 2012, 10:59
par Armand
Comme Spell exige d'avoir le sort mémorisé, ton bloc a une chance sur deux de ne rien faire si le personnage n'a que l'un des deux sorts. L'usage du Or(2) sur les HaveSpell fait qu'il pourras passer les conditions et tomber aléatoirement sur le sort que le personnage n'a pas. Ce serait sans doute une action de perdue dans le combat.
Oui c'est bien ce que je craignais malheureusement le moteur n'est pes assez intelligent pour skipper un sort qui n'existe pas.

A ma connaissance, il n'existe pas de solution élégante pour ce que tu veux faire. Je pense que le seul moyen est d'écrire de la façon suivante :
J'ai les deux sorts : je choisis aléatoirement
J'ai le sort 1 : je le lance
J'ai le sort 2 : je le lance
Oui la solution est pas conne en dupliquant plusieurs scripts sur ce modèle on arrive à des résultats intéressants. Ce n'est pas la solution la plus légère oui mais ça fonctionne.

Posté : dim. 23 déc. 2012, 05:38
par deratiseur
Si tu veux être sur de ne lancer qu’un seul des deux sorts, pourquoi ne pas faire ceci :

Si valeur =0
Si j'ai le sort A
Si je vois l'ennemi
=
Lancer sort A
Mettre valeur à 1

Si valeur =0
Si j'ai le sort B
Si je vois l'ennemi
=
Lancer sort B
Mettre valeur à 1

où la valeur est unique et correspond à ce sort (tu peut en rajouter une autre pour un autre usage).

Comme ça rien n'est lancé si aucun des sorts n'est mémorisé, et seulement le A si les deux sont mémorisés. Sinon seulement celui qui est mémorisé.

Posté : dim. 23 déc. 2012, 09:25
par Armand
Oui j'ai plus ou moins suivi ce modéle en adaptant un peu les indications d'isaya. Comme je l'ai dit plus haut ça a tendance à multiplier les blocs mais c'est efficace.

Posté : lun. 24 déc. 2012, 09:40
par deratiseur
Armand a écrit :Oui j'ai plus ou moins suivi ce modéle en adaptant un peu les indications d'isaya. Comme je l'ai dit plus haut ça a tendance à multiplier les blocs mais c'est efficace.
Note : au script type que je t'ai indiqué, tu peux rajouter un troisième bloc :
Si valeur est à 1
Si j'ai le sort B
Si monstre n'est pas sous l’effet du sort A
=
lancer le sort B
Mettre la valeur à 2

Ainsi, si il a les 2 sorts, il lance le A, et si l'ennemi y résiste, il lance le B

note : il faut rajouter un petit "wait" après le lancement de A dans le premier bloc du script que j'ai proposé pour que l'effet du sort s'applique avant la vérification par le 3eme bloc.