Aller au contenu


Vérifier Le Chargement D'Une Nouvelle Cellule


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1 Joubarbe

Joubarbe

Posté 25 janvier 2013 - 20:23

Allez, une troisième question !

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.

Ainsi :
Event OnLocationChange(Location akOldLoc, Location akNewLoc)
		  If akNewLoc.IsInterior()
			SetInChargen(True, False, True)
		  Else
  SetInChargen(False, False, False)
EndIf
EndEvent

Et :


Event OnLocationChange(Location akOldLoc, Location akNewLoc)

If Game.GetPlayer().IsInInterior()
  SetInChargen(True, False, True)
Else
  SetInChargen(False, False, False)
EndIf

EndEvent

ne fonctionnent pas. Le but est ici de désactiver la possibilité de sauvegarder en intérieur. Et j'aimerais passer ça par une ability, de façon à pouvoir l'activer/désactiver quand on veut.
OnCellAttach semblerait être la solution, mais elle ne s'applique pas à un effet magique.

Modifié par Joubarbe, 25 janvier 2013 - 20:24.


#2 ced

ced

    les météores


Posté 26 janvier 2013 - 01:19

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 :green:)
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 ;)

#3 Joubarbe

Joubarbe

Posté 26 janvier 2013 - 11:07

Merci pour ta réponse. Oui, j'ai bien compris ce qu'était une Location ; mes exemples étaient juste là pour montrer ce que je voulais faire. Enfin, c'est surtout qu'il n'y a pas de "OnNewCellLoad", chose que je trouve complètement débile (comme plein de trucs qui ont été virés depuis Morrowind).

J'avais pensé à ce fameux OnUpdate, mais ça me faisait un peu peur :)

Et merci pour la petite astuce sur le Game.GetPlayer(), je sais jamais s'il faut l'utiliser en tant que tel. PlayerRef est plus lisible donc tant mieux.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)