TESCS2 : Détruire Un Objet Créé Par Placeatme
Retour vers TESCS2 : Tutoriaux |
REMOVABLE PlaceAtMe OBJECTS
par Guidobot (Source)
Il faut comprendre "Objet " au sens large : armes, vêtements, créature, PNJ, static, activator, etc.
Ceci explique comment enlever des Objets placés dans le jeu par un PlaceAtMe.
La méthode de Disable enlève ces objets tant que le joueur n'est pas dans la même Cell
mais ils sont sauvegardés (et rechargés) lorsque le joueur s'éloigne, au cas où vous ne le sachiez pas.
Dans le premier exemple on suppose que votre Objet à placer est juste cela, c.-à-d. il doit juste être utilisé comme un marker pour cibler.
Exemple #1: Effet en Script externe (donc en dehors de l'Objet placé par PlaceAtMe)
; creation set placerRef to player.PlaceAtMe MyPlacer 1 50 0 ; ... ; destruction placerRef.Activate player placerRef.RemoveMe; marche seulement pour les Objets non-scriptés
Si vous faites Activate suivi directement de RemoveMe ça marchera mais aucun script attaché ne sera transféré.
Comme indiqué sur le CS Wiki, vous devriez vous assurer qu'une "frame" se fasse.
En fait ceci ne se révèle pas être réellement nécessaire- vous pouvez réaliser le même effet en ayant un autre script qui fasse le RemoveMe pour vous.
- c'est juste que le script courant doit revenir.
Dans les exemples suivants le même effet fonctionnera pour les Objets scriptés.
Exemple #2: L'effet s'est dédoublé entre le créateur et la cible de l'Objet.
scn MyPlacerScript Begin GameMode if GetContainer RemoveMe endif End
Pour utiliser/détruire l'objet :
; creation set placerRef to player.PlaceAtMe MyPlacer 1 50 0 ; ... ; destruction placerRef.Activate player
Vous pouvez également être plus imaginatif mais vous pouvez avoir des temps de synchronisations supplémentaires.
Exemple #3: Effet sur un Objet scripté (déclenché par Disable)
short stage Begin GameMode if GetDisabled if stage == 0 Activate player set stage to 1 else RemoveMe endif endif End
Quelque chose comme ceci peut être utile pour ceux qui ont déjà un bon nombre d'Objets PlaceAtMe puisque pour (créer et) détruire ces objets :
; creation set placerRef to player.PlaceAtMe MyPlacer 1 50 0 ; ... ; destruction placerRef.Disable
Avec tous ces exemples, vous êtes bien conseillés pour expérimenter et voir ce qui fonctionne pour vous. Il est possible que de plus longs scripts puissent avoir besoin d'un certain travail supplémentaire, particulièrement si vous employez des objets "empilables".
Détruire les créatures invoquées ("Summoned Creatures")
Si vous utilisez PlaceAtMe pour créer une créature (Objet) "invoquée", alors vous devrez accepter que cet Objet ne puisse être détruit. Si vous voulez qu'il disparaisse (par un "Time-Out" ou une mort), vous pouvez seulement utiliser Disable (et Kill). L'Objet de créature mort sera par la suite supprimé comme les acteurs NPC normaux morts après ~3 jours de jeu.
Normalement ceci n'est pas un problème. Cependant, si vous devez détruire totalement les créatures (par exemple parce que vous employez un paquet de ces créatures), alors la bonne méthode pour réaliser ceci n'est pas du tout l'utilisation de la méthode de PlaceAtMe.
Au lieu de cela vous avez deux options :
- Pour une seule créature (ou un nombre restreint de créatures) utilisez un lieu (Cell) caché et téléportez les vers le joueur et recommencez si nécessaire (vous pouvez également avoir à contrôler leur santé, etc., dans certaines conditions en combat).
- Sinon :
- copier/créer le modèle de base de l'Actor que vous souhaitez utiliser et/ou une copie "Persistant Reference" dans une salle cachée (Cell interieur)
- set creatureRef to Mycreature.CreateFullActorCopy
- creatureRef.MoveTo player 50 50 0 (au besoin - peut exiger la prochaine frame)
- creatureRef.DeleteFullActorCopy (une fois fait)