Difference between revisions of "Removing "Placeatme Objects""
imported>Elder m |
imported>Elder m |
||
Line 84: | Line 84: | ||
2) Otherwise: | 2) Otherwise: | ||
a) create | a) copy/create the base actor model that you wish to employ and/or a persistant reference copy in a hidden room. | ||
b) set critterRef to MyCritter.CreateFullActorCopy | b) set critterRef to MyCritter.CreateFullActorCopy |
Revision as of 18:02, 11 September 2006
REMOVABLE PlaceAtMe OBJECTS by Guidobot
This is to overcome the issues removing items placed in the game in 3D.
The Disable method removes these objects while the player is not in the same Cell but they are saved (and reloaded) when the player moves back, even though you wouldn't know.
In the first example it is assumed that your placer item is just that, i.e. just there to be used as a marker for targetting or such.
Example #1: effect in external script (not on PlaceAtMe object)
; creation set placerRef to player.PlaceAtMe MyPlacer 1 50 0 ; ... ; destruction placerRef.Activate player placerRef.RemoveMe ; safe only for un-scripted items
If you do Activate followed directly by RemoveMe it will work but any attached script will not be transferred. As stated on the CS Wiki you should ensure a frame click happens. In fact this is not appear to be actually necessary - you can achieve the same effect by having another script do the RemoveMe for you - it's just that the current script has to return.
In the following examples the same effect will work for scripted objects.
Example #2: effect split between the creator and target object.
scn MyPlacerScript Begin GameMode if GetContainer RemoveMe endif End
To use/destroy the object:
; creation set placerRef to player.PlaceAtMe MyPlacer 1 50 0 ; ... ; destruction placerRef.Activate player
You can also get more imaginative but you may have some extra timing issues.
Example #3: effect on a scripted item (triggered by Disable)
short stage Begin GameMode if GetDisabled if stage == 0 Activate player set stage to 1 else RemoveMe endif endif End
Something like this may be useful for those that already have lots of PlaceAtMe objects. Since to use/destroy these objects:
; creation set placerRef to player.PlaceAtMe 1 50 0 ; ... ; destruction placerRef.Disable
With all these examples you are well advised to experiment to se what works for you. It's possible that longer scripts may need some extra work, especially if you are using stackable items.
Destroying Summoned Creatures
If you employ PlaceAtMe to create a 'summoned' creature (object) then I'd affraid you'll have to accept that this object cannot be destroyed. If you want it to vanish (on death or after a time-out) you can only use Disable (and Kill) to make it disappear. The dead critter will be removed eventually like normal dead actors after ~3 game days.
Normally this isn't a problem. However, if you need to totally destroy the critters (e.g. because you use a pack of them) then the correct way to do this is not use the PlaceAtMe method at all. Instead you have two options:
1) For a single creature (or small number of creatures) use a hidden location and teleport them to the player and back again as needed. (You may also have to manage their health, etc., if they end up in combat.)
2) Otherwise:
a) copy/create the base actor model that you wish to employ and/or a persistant reference copy in a hidden room.
b) set critterRef to MyCritter.CreateFullActorCopy
c) critterRef.MoveTo player 50 50 0 (if necessary - may require next frame)
d) critterRef.DeleteFullActorCopy (when done)