Page 1 sur 1

[SCRIPT] Comment savoir si un sort a été lancé ?

Posté : mer. 28 nov. 2018, 23:06
par Cocrane
En testant à nouveau une partie de mon mod, un script qui marchait ne fonctionne plus... :'(

J'en perd mon latin.

un PNJ lance un sort et sur le .baf de la carte, je teste si le sort a été lancé et rien ne se passe. J'ai finalement, fait des tests simples et effectivement rien ne se passe.
Je ne vois pas ce qui cloche...


Voilà le cas simple sur le .baf de la carte:
IF
Global("int3","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("int3","GLOBAL",1)

createcreature("anomen9",[1500.565],10)
createcreature("MINSC",[1500.565],10)
wait(2)
//ActionOverride("ANOMEN",ForceSpellRES("COM017BM","MINSC"))
//ActionOverride("ANOMEN",ForceSpellPointRES("COM017BM",[1350.665]))
ActionOverride("ANOMEN",ForceSpell("MINSC","CLERIC_CURE_LIGHT_WOUNDS"))
END

IF
Global("int4","GLOBAL",0)
SpellCast("anomen9","CLERIC_CURE_LIGHT_WOUNDS")
THEN
RESPONSE #100
SetGlobal("int4","GLOBAL",1)

Createcreature("MINSC",[1350.665],10)
Createcreature("MINSC",[1350.665],10)
END
Le sort est lancé et les créatures MINSC n'apparaissent pas.

A la base j'utilise SpellCastRes pour éviter que le nouveau sort soit à déclarer dans le Spell.ids.

Cocrane

Posté : jeu. 29 nov. 2018, 15:59
par Akadis
Est-ce qeu le MINSC du premier bloc apparait ? Celui-là :
createcreature("MINSC",[1500.565],10)

Posté : jeu. 29 nov. 2018, 19:54
par Cocrane
Effectivement ca manque de précision. :-)

Tout se passe bien jusqu'au script qui teste le lancement du sort.

Minsc et Anomen apparaissent
le sort se lance.


Et après rien par rapport à ce script

IF
Global("int4","GLOBAL",0)
SpellCast("anomen9","CLERIC_CURE_LIGHT_WOUNDS")
THEN
RESPONSE #100
SetGlobal("int4","GLOBAL",1)

Createcreature("MINSC",[1350.665],10)
Createcreature("MINSC",[1350.665],10)
END

Posté : dim. 02 déc. 2018, 03:38
par Akadis
Après de nombreux tests je peux te confirmer que c'est le bien SpellCast qui n'est jamais validé. Je n'ai pas réussi à trouver une solution directe à ce problème.
Je te propose une solution de contournement : au lieu d'utiliser un SpellCast, tu peux contrôler la valeur de int3. C'est dans le même bloc qui tu lances le sorts et que int3 reçoit la valeur 1.

Posté : dim. 02 déc. 2018, 03:50
par Akadis
Après de nombreux test je peux te confirmer que c'est bien le SpellCast qui n'est jamais validé. Malgré ces tests je n'ai pas réussi à comprendre pourquoi.
Je te propose d'utiliser un solution de contournement :au lieu d'utiliser un SpellCast tu peux tester la valeur de int3. C'est dans le même bloc que tu lances le sort et que int3 reçoit la valeur 1

Posté : dim. 02 déc. 2018, 07:51
par Freddy_Gwendo
À une époque, j'ai lu pas mal de messages sur le sujet sur SHS et G3. Il semble que ce trigger ne soit pas fiable car il ne retourne "VRAI" que si le sort à été lancé le round précédent. En pratique, selon le moment où le sort est lancé, sa durée d'incantation, la durée de son projectile, voire les autres actions vérifiées par les scripts entre-temps, il peut ne jamais se déclencher.

Si mes souvenirs sont exacts, pour certains sorts, ajouter Continue() à la fin du bloc lançant le sort pouvait, dans certains cas, débloquer la situation. Mais sans garantie.

Posté : dim. 02 déc. 2018, 13:19
par Cocrane
Merci pour vos retours.

Effectivement avec ma première version le test marchait nickel.

Depuis j'ai modifié d'autres scripts autour de cette étape et là le test du sort lancé (non modifié) ne marche plus. Un brun frustrant.

Ok, je vais voir avec un continue() et avec aussi un clearallactions voir si ca aide.

Je vous tiens au courant.

Cocrane

Posté : sam. 15 déc. 2018, 11:05
par Cocrane
Je ne suis pas parvenu à faire fonctionner le trigger "SpellCast" ou ses variantes.

Du coup j'ai ajouté l'OPCODE "Set AI Script [82]" et je passe une variable à la valeur 1.
Si le sort n'est pas lancé ou interrompu, la variable reste à 0. sinon elle passe à 1.

Ca fonctionne. :-)

Cocrane