TESCS2 : Détruire Un Objet Créé Par Placeatme

De Wiwiki
Aller à la navigation Aller à la recherche


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 :
  1. 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)
  2. set creatureRef to Mycreature.CreateFullActorCopy
  3. creatureRef.MoveTo player 50 50 0 (au besoin - peut exiger la prochaine frame)
  4. creatureRef.DeleteFullActorCopy (une fois fait)