Le script de Fandorn est plus simple, effectivement, mais à titre indicatif, la correction de ton script serait toute bête :
begin Gwen_LearnSpell_Levitate
; Script du dôme de l'Alchimiste
short doOnce
If ( MenuMode == 1 )
Return
Endif
If ( OnActivate == 1)
If (doOnce == 0)
Playsound "mysticism hit"
messagebox "Vous apprenez un sort de lévitation"
player->AddSpell, "Gwen_levitate"
Set doOnce to 1
Activate; sinon il ne se passe rien de plus, la clef n'est "activée" donc pas ramassée.
Else
Activate; même chose qu'en haut, on ne pourrait sans ça ramasser la clef une seconde fois.
Endif
Endif
End Gwen_LearnSpell_Levitate
Quand on utilise If OnActivate dans un script, on court-circuite l'activation normale, donc si l'on veut également qu'il y ait une activation normale, il faut rajouter Activate. C'est comme cela que fonctionnent les scripts de portes inouvrables ou d'objets inramassables, dont voici un exemple simple :
Begin Inactivation
If ( OnActivate )
EndIf
End
Voilà. On met ça sur une porte, et impossible de l'ouvrir. On met ça sur un objet, et on ne peut plus le ramasser (façon simple de transformer vite fait un misc item en static...), on met ça sur un PNJ et on ne peut plus lui parler. Ni le fouiller une fois mort ou quand on est en mode pickpocket.
Quand à ce qui est d'apprendre un même sort plusieurs fois de suite, aucun problème, si ce n'est que ça sera agaçant d'avoir sans arrêt la messagebox...
Donc on pourrait faire ceci :
Begin Gwen_LearnSpell_Levitate
short OnPCAdd
If ( MenuMode == 1 )
Return
Endif
If ( OnPCAdd == 1 )
If ( Player->GetSpell "Gwen_levitate" == 0 )
Playsound "mysticism hit"
messagebox "Vous apprenez un sort de lévitation"
Player->AddSpell, "Gwen_levitate"
set OnPCAdd to 0
EndIf
EndIf
End
Ou bien :
begin Gwen_LearnSpell_Levitate
; Script du dôme de l'Alchimiste
If ( MenuMode == 1 )
Return
Endif
If ( OnActivate == 1 )
If ( Player->GetSpell "Gwen_levitate" == 0 )
Playsound "mysticism hit"
messagebox "Vous apprenez un sort de lévitation"
player->AddSpell, "Gwen_levitate"
Activate; sinon il ne se passe rien de plus, la clef n'est "activée" donc pas ramassée.
Else
Activate; même chose qu'en haut, on ne pourrait sans ça ramasser la clef une seconde fois.
Endif
Endif
end Gwen_LearnSpell_Levitate
Je préfère ça à l'utilisation de doOnce, on est sûr que rien ne pourra fausser le script. (Par exemple, un bug de doublon faisant qu'une deuxième clef apparait, le joueur connaîtrait déjà le sort mais on lui dirait quand même qu'il l'apprend encore avec le script à doOnce, mais pas si le test est fait sur l'existence du sort dans le grimoire du perso.)
Modifié par Angora, 18 février 2006 - 11:58.