Difference between revisions of "Talk:Magic effect scripts"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>Innominate
imported>Haama
Line 43: Line 43:


Is there any function you can use to determine who cast a scripted spell? I'm thinking something I can use like "Set casterRef To <function>", so I can generalise a spell to be able to be used by NPCs as well as the player. [[User:Innominate|Innominate]] 02:49, 15 July 2008 (EDT)
Is there any function you can use to determine who cast a scripted spell? I'm thinking something I can use like "Set casterRef To <function>", so I can generalise a spell to be able to be used by NPCs as well as the player. [[User:Innominate|Innominate]] 02:49, 15 July 2008 (EDT)
:Use a combination of [[GetScriptActiveEffectIndex]] and [[GetNthActiveEffectCaster]].--[[User:Haama|Haama]] 14:35, 15 July 2008 (EDT)

Revision as of 13:35, 15 July 2008

Script Abilities

Is it possible to stick a script-effect spell as an ability on someone? And if so, will the scripteffectupdate spell function more or less as a gamemode block? It seems a handy way of jamming scripts onto people who already have one...Talkie Toaster 14:21, 20 April 2006 (EDT)

Yes, I use this method extensively. It works exactly like a normal spell script. ScriptEffectStart and Update process as soon as you add the ability, and scriptEffectFinish runs when you call removeSpell. It's not just useful for magic effects, but is also probably the closest thing to MW-style targeted scripts that we have. Scruggs 16:04, 29 May 2006 (EDT)

Undocumented blocktypes

"Other block types are invalid (they will compile but the code inside them will never run)." - This is almost true. OnActivate will process in a magic effect script, which can be useful but should be used very carefully. Even after the effect ends, the onActivate block will override normal activation, so it's best to use this for permanent scripted abilities.

I found that OnHit, OnHitWith, OnMagicEffectHit, and onDeath will not process in magic effect scripts. A shame since these would be much more useful than OnActivate.

I'd be careful with using undocumented features as long as Oblivion is still updated - Bethsoft might change them on a whim and your mod will no longer work.--JOG 01:20, 20 June 2006 (EDT)

ScriptEffectUpdate appears to run in menus when time is passing ("waiting" menu and fast travel). A MenuMode block in a magic effect script will also run during those menus, but not while other menus (inventory, etc) are displayed. Scruggs 10:09, 1 August 2006 (EDT)

Throwing Stars 3 uses a MenuMode block on a scripted effect of a potion - it will run for a single frame. I wonder if the same is true for enchanted items that are equipped in the inventory menu? Spells and staffs won't run in MenuMode (can't cast them), don't know about Wortcraft.
Rezzing the topic a bit, as the page was flat wrong about other blocktypes. Any other experiences, confirmations of the above?--Haama 10:56, 9 February 2008 (EST)

Script Effect Variables

Dragoon Wraith TALK 15:35, 8 July 2006 (EDT): I was wondering, do variables used in magic scripts become variables on the effected object? They seem to run locally (i.e. if you have the script on multiple actors, each one can record its own values for each variable), but can you access them from another script with ActorID.VarName? If not, how can you access them?

Also, if you have two scripted effects on the same actor, can they share variable data? For instance, if the first applied script had a variable "OriHealth" that was set to the Health of the actor when the script was applied, can a second spell cast on the actor also have a variable called "OriHealth", and will it have the same value as the original variable did? I assume that when a spell wears off, the variables are wiped, but what if the first effect is still working when the second one is applied? If the variables aren't the same, is there any way to set the variable in the second script to the value of the first script?

Basically, what I'm trying to do is split up a script that is too long (currently 10,060 lines, though only 70 or so will ever run at a time). An ability is added, does its part, and adds another ability on top of that that continues the script, but it needs to have the data from the first part of the script. Is there any hope?

As far as I can tell, the variables in a spell script remain separate. Typing sv while an affected NPC is selected in the console won't list any magic effect script vars, and trying to access them via show ActorID.spellVar likewise fails. I doubt very much that two different spell scripts running on the same actor and having two identically named variables would share the values of those variables; the name you give to the variable in your script may be identical, but they are processed by the game the same way variables with unique names are processed. Being in separate scripts keeps them isolated.
You can easily pass the values of the variables in the first ability script to a quest script, and have the second ability script read those values into its own variables when it starts running. Scruggs 22:05, 8 July 2006 (EDT)
Dragoon Wraith TALK 22:40, 8 July 2006 (EDT): Gah, that's not going to help me very much. I need the fact that the variables are local - multiple people are going to be hit with this spell, and multiple people need to have their own, separate values for the variables. *sigh* Why on earth did Bethesda have to artificially limit script size? Alright, I can think of a... very annoying way around this. Thanks for your help.

Query - Multiple Summons

How would i set up a script that would summon multiple NPC's or creatures at once, in a spell or an enchantment (eg. Staff of the Everscamp).

any tips or tutorial scripts would be greatly appreciated

thanks, Luis

Determining The Caster

Is there any function you can use to determine who cast a scripted spell? I'm thinking something I can use like "Set casterRef To <function>", so I can generalise a spell to be able to be used by NPCs as well as the player. Innominate 02:49, 15 July 2008 (EDT)

Use a combination of GetScriptActiveEffectIndex and GetNthActiveEffectCaster.--Haama 14:35, 15 July 2008 (EDT)