Difference between revisions of "Activate"
Major overhaul
imported>Haama (Extra Failed Activation note) |
imported>Haama (Major overhaul) |
||
Line 1: | Line 1: | ||
'''Syntax:''' | '''Syntax:''' | ||
''ObjectToActivateRef''.'''Activate''' [ActivatorID] [RunOnActivateBlock] | |||
'''Example:''' | '''Example:''' | ||
Activate player | Activate player | ||
Activate | ContainerRef.Activate | ||
Activate player, 1 | ActivatorRef.Activate player, 1 | ||
This function makes the object perform its default activation. The default activations are: | |||
{|border="1" cellpadding="5" cellspacing="0" align="center" | {|border="1" cellpadding="5" cellspacing="0" align="center" | ||
|- | |- | ||
Line 44: | Line 28: | ||
|} | |} | ||
If the ''RunOnActivateFlag'' is set to 1, then the [[OnActivate]] block of the object will be run ''instead'' of the default activation. | |||
If the | If the ''ObjectToActivateRef'' flag isn't set then the object will activate itself (as with most functions). There are a couple of tricks you can pull with this: | ||
#You can use '''''Activate''''' inside of an object's [[OnActivate]] block to make it ''also'' perform it's default activation | |||
#You can use '''''Activate player, 1''''' inside of an object's onActivate block to make it run it's [[OnActivate]] block again (see [[Activate#Nesting|Nesting]] below) | |||
#You can use '''''Activate player, 1''''' to make an item activate itself ''while inside an inventory''. By having the item continuously check a persistent variable, you can make external scripts "activate" the item by controlling the persistent variable. | |||
''' | The ''ActivatorID'' flag determines the ActionRef for that activation, as if the ActionRef had activated the object. This is useful if you use [[IsActionRef]] or [[GetActionRef]] inside of the [[OnActivate]] block of the object. If the ''ActivatorID'' flag is omitted, the calling reference's ActionRef will be used instead. | ||
'''That means that this:''' | |||
Activate | |||
'''Is equivalent to this:''' | |||
ref actingref | |||
set actingref to GetActionRef | |||
''' | Activate actingref | ||
If the calling reference doesn't have an ActionRef (for example, if the calling reference is a quest) then the object won't be activated and the line will be ignored (the calling reference's script will continue). | |||
This is the | ==Buggy Bug Bug of a Weird, Weird Bug== | ||
There are a number of peculiarities and bugs with the [[Activate]] function: | |||
#(This one is nice!) The activate function occurs immediately, meaning the next line of the calling reference's script won't be processed until the [[OnActivate]] block (and maybe other blocks in the called script --[[User:Haama|Haama]] 18:42, 13 July 2007 (EDT)) finishes. | |||
#You have to use an ''ActivatorID'' when using the ''RunOnActivateBlock'' flag. | |||
#You can't directly use an ''ActivatorID'' of an NPC. Instead, you have to set a temporary reference variable to the desired ''ActivatorID'', and use the variable in the ''ActivatorID'''s place. This is useful when using the ''RunOnActivateBlock'' flag. (I'm not sure what will happen for default activation. --[[User:Haama|Haama]] 18:42, 13 July 2007 (EDT)) | |||
#If you open a container with '''''SomeContainer.Activate player''''', and the container doesn't have a script attached to it, then the player will be unable to directly open that container ever again. (I assume this is extended to all types of activation, but I haven't checked. --[[User:Haama|Haama]] 18:42, 13 July 2007 (EDT)) | |||
#[[:Category:Troubleshooting#Activate_Self|Activate Self]] | |||
#[[:Category:Troubleshooting#Activating_a_Container|Activating a Container]] (Again, I've only tested this for containers, but I assume it extends to all types of activations. --[[User:Haama|Haama]] 18:42, 13 July 2007 (EDT)) | |||
==Nesting== | ==Nesting== | ||
You can nest activations within other activations. For | You can nest activations within other activations. For instance, a quest script activates an activator | ||
SomeActivator.Activate player, 1 | SomeActivator.Activate player, 1 | ||
which in turn activates another activator | which in turn activates another activator | ||
Line 107: | Line 69: | ||
SomeOtherActivator.Activate player, 1 | SomeOtherActivator.Activate player, 1 | ||
end</pre> | end</pre> | ||
You can only nest 5-6 activations at a time. At a time is a little hard to define here, since [[OnActivate]] blocks run instantly and before the next line of code is processed. This really means that if 4 other scripts are still being processed and an activation is made during the 5th script, that last activation will be ignored (the script skips the line). This applies to any activation, even if they're different objects or different scripts. | |||