Hello,
Citation
Cette fois sur un truc qui me sidère : de ce que j'en vois il est impossible d'avoir un évènement attaché à un effet magique qui contrôlerait les déplacements du joueur, d'une zone à une autre.
Lors des appels des Event OnEffectStart/OnEffectFinish leur contenu ne sont executés que lorsqu'un effet magique commence et finit (et ceci qu'une SEULE fois).
Il y a bien une parade qui consiste à utiliser la fonction
RegisterForSingleUpdate(1) dans ton
OnEffectStart
Aussi je sais que tu es débutant et peut-être que tu n'as toujours pas compris ce qu'est une Location dans Creation Kit... (si je me trompe, tu peux taper
)
Je vais prendre exemple sur Solitude : (c'est la 2e fois cette semaine que je raconte ça)
Solitude a comme Location :
SolitudeLocation qui comporte tous les NPC (habitants à Solitude)
ainsi que toutes les Cells ext/inter contenu dans Solitude ou dans ses environs.
Une Location est un ensemble de Cell & d'Actor (NPC)
Tu peux vérifier ça et voir comment ça marche dans le CK (Object Window / World Data)
Aussi va voir quelques explication là :
http://www.creationkit.com/Location
Donc oublie ça :
akNewLoc.IsInterior()
ça ne veut rien dire
Une Location n'est pas une Cell, même si la Location ne comporte qu'une Cell.
Ton Event OnLocationChange ne te servirait à rien d'après ce que tu veux en faire.
Citation
Le but est ici de désactiver la possibilité de sauvegarder en intérieur.
Si c'est simplement ça, je vais te mettre sur la piste avec ton MagicEffect (même si je sais pas comment tu l'as conçu...)
Assure toi que ton MagicEffect n'ait pas une durée limitée sinon mon astuce ne fonctionnera que le temps de ton MagicEffect :
Scriptname AA_TESTEffectScript extends activemagiceffect
Actor Property PlayerREF Auto
Event OnEffectStart (Actor Target, Actor Caster)
if ( Target == PlayerREF )
RegisterForSingleUpdate(1)
endif
EndEvent
Event OnEffectFinish (Actor Target, Actor Caster)
if ( Target == PlayerREF )
UnregisterForUpdate()
endif
EndEvent
Event OnUpdate() ;Event appelé tous les seconde grâce à RegisterForSingleUpdate(1)
If ( PlayerREF.IsInInterior() ) ;Oublie Game.GetPlayer() dans un script c'est moins rapide qu'un "Actor Property PlayerREF"
SetInChargen(True, False, True)
Else
SetInChargen(False, False, False)
EndIf
RegisterForSingleUpdate(1)
EndEvent
Ensuite, une fois le script sauvegardé, tu double-cliques dessus pour ouvrir les
Properties, et sur
PlayerRef tu fais un
Auto-Fill
Pour plus d'infos sur :
RegisterForSingleUpdate &
Event OnUpdate() (j'ai pratiquement tout appris depuis ce site)
Voilà, en esperant t'avoir aidé.
Je sais que c'est pas facil quand on débute, mais ça va venir