ced909 a écrit :est ce obligatoire le Disable() après un Delete() ?
C'est dans le sens inverse qu'il faut raisonner :
disable() pour cacher l'objet (et le rendre inaccessible au joueur) puis delete() pour le supprimer (s'il n'y en a plus besoin seulement ou si on a prévu de recréer l'objet au besoin).
Les suppressions n'étant pas toujours instantanées, le disable() placé avant permet de donner illusion au joueur que l'objet a été supprimé.
Un disable après un delete ne semble donc pas très logique car tu demandes à ce vieux papy russe de rendre inaccessible un objet qui n'est plus censé exister... Autant lui demander de cacher l'objet puis, en coulisses, d'essayer de éradiquer pendant que le joueur est passé à autre chose.
Le disable est donc optionnel mais présent pour palier certains soucis déjà observés.
Le fait d'avoir un objet pointé par un referencealias peut poser des soucis si on ne fait pas bien la différence entre l'objet pointé et le referencealias en terme de type d'objet (erreur courante quand on lit les questions posées sur les forums de modding).
Agir sur l'objet pointé par referencealias : si tu fait un referencealias.getref().disable(), il devrait fonctionner. MAIS, le referencealias reste sur la référence pointée, ce qui permet éventuellement de réutiliser l'objet avec un referencealias.getref().enable(). Ça c'est pour l'objet avec lequel est rempli le referencealias.
On passe par le getref() pour atteindre l'objet pointer et donc bosser sur la référence.
Concernant le referencealias en lui-même (objet qui pointe vers une référence):
-un Clear() ne fait que vider le reference alias. Donc celui-ci ne pointe plus vers l'objet (aucune action sur l'objet cependant)... Il vaut mieux être sûr d'en avoir fini avec l'objet avant de vider un referencealias ou stocké sa référence pour pouvoir agir dessus s'il existe encore.
-Un ForceRefIfEmpty permet de faire pointer le referencealias s'il est vide vers un autre objet (à utiliser après clear donc, sans effet sur les objets considérés).
-Un ForceRefTo() permet de faire pointer l'alias vers ce que l'on veut.
- De mémoire, le reste est constitué d'instructions commençant par des trucs comme trytoenable(), trytodisable()...
D'ailleurs, un referencealias.trytodisable() me semble plus élégant qu'un referencealias.getref().disable() car ce dernier risque de générer une erreur dans le log si le referencealias n'est pas rempli alors que le trytodisable() ne renverrait qu'un false dans ce cas, sans erreur.
ced909 a écrit :Je m'explique, j'utilise Delete() dans un mod actuelement, pour supprimer une ReferenceAlias Optionel, suivi d'un Clear() (pour réutiliser une nouvelle ref dans cet alias)
J'en déduis que quand tu parles d'un delete() sur un referencealias, tu parles soit d'un delete() sur l'objet pointé (référence), soit d'un trytodelete() sur le referencealias...
A ta place, j'aurai tenté un petit trytodisable sur le referencealias avant un trytodelete() suivi d'un forcerefifempty ou un forcerefto pour re-remplir l'alias (ou un arrêt/marche de quête après avoir fait le ménage si de nombreux alias sont concernés (méthode du flemmard)).
Le disable() permet juste de cacher l'objet en attendant que les conditions du delete() se réalisent dans certains cas...
http://www.creationkit.com/Delete_-_ObjectReference
Pour répondre à ta question (disable() obligatoire ou non) : Obligatoire si la référence peut entrer dans l'un des cas cités par le lien ci-dessus, conseillé le reste du temps (au cas où...).
Il existe toujours plusieurs méthodes pour arriver au même résultat... Le tout est de choisir celle qui semble la plus adaptée à chaque cas particulier.
Hors-sujet
Bon, je retourne "jouer" avec des bases de données...