Difference between revisions of "Command an NPC/Creature to Attack"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>Phinix
(A simple way to set up an Attack/Defend menu using OnActivate.)
 
imported>Phinix
Line 7: Line 7:
== Create a Global variable ==
== Create a Global variable ==


Start by clicking '''Gameplay''' on the main CS menu, and select '''Globals''' from the menu.
Start by clicking '''Gameplay''' on the main CS menu, and select '''Globals'''.


Right-click the list on the left and select "New."
Right-click the list on the left and select "New."
Line 13: Line 13:
[[Image:Phicommandtut01.jpg]]
[[Image:Phicommandtut01.jpg]]


Give your variable a name. For this guide I’ll use '''globalvar1''' but you'll want to make sure and use something unique for any global you create.
Give your variable a name. For this guide I’ll use '''globalvar1''' but you'll want to make certain and use something unique for any global you create.


You can see it is set as a '''short''' variable by default with a value of "0" which is what we want, so click OK again to close the Globals window.
You can see it gets set as a '''short''' variable with a value of "0" by default, which is what we want. Click OK to close the Globals window.


== Create a Magic Effect script ==
== Create a Magic Effect script ==
Line 54: Line 54:
Now right-click the space on the right and select "New" to bring up the box to add a new spell effect.  
Now right-click the space on the right and select "New" to bring up the box to add a new spell effect.  


For the effect choose "Script Effect" and give it a duration (I use 360 but it doesn’t really matter since in this case it will stay on until it’s dismissed.)
For the effect choose "Script Effect" and give it a duration (I use 360 but for this spell it really doesn’t matter since it will stay on until it’s dismissed.)


Give it an "Effect Name," then choose any school and visual. Do not check "Effect is Hostile."
Give it an "Effect Name," then choose any school and visual. Do not check "Effect is Hostile."
Line 64: Line 64:
== Create the Object script for your NPC ==
== Create the Object script for your NPC ==


Now this next bit needs to be in an '''Object''' type script on the character you want to be able to command. You can replace the names of the short and float variables listed at the top to be whatever you wish. Same goes for the script name:  
Follow the same steps as above to create another new script, only make this one an '''Object''' type. You can replace the names of the short and float variables listed at the top to be whatever you wish. Same goes for the script name.
 
Once created this script will need to go on the NPC/creature you want to command:


  ScriptName MyNPCScript
  ScriptName MyNPCScript

Revision as of 21:51, 22 December 2009

This tutorial will explain how to set up a script on a custom NPC/creature so that by activating it you will be able to command it to attack nearby actors (including friendlies.)


Create a Global variable

Start by clicking Gameplay on the main CS menu, and select Globals.

Right-click the list on the left and select "New."

File:Phicommandtut01.jpg

Give your variable a name. For this guide I’ll use globalvar1 but you'll want to make certain and use something unique for any global you create.

You can see it gets set as a short variable with a value of "0" by default, which is what we want. Click OK to close the Globals window.

Create a Magic Effect script

Next you need to create a new script. Again from the main CS menu click Gameplay and then Edit Scripts.

In this windows click Script and then New. For Script Type select Object (this is the default.)

Paste the following into the script body, using whatever you want in place of MyFrenzyScript and again substituting globalvar1 with whatever you named your global variable from before:

ScriptName MyFrenzyScript

begin ScriptEffectStart
    SetAV Aggression 50
end

begin ScriptEffectUpdate
    if globalvar1 == 2
        SetAV Aggression 10
        StopCombatAlarmOnActor
    endif
end

begin ScriptEffectFinish
    SetAV Aggression 10
end

Click the little floppy disk icon or Script-->Save to save, and then close the script window.

Create the Frenzy spell

Next click Spell from the tree menu on the left side of the Object Window. (You might have to expand the Magic branch to see it.)

Right-click the list space on the right and select "New." Give your spell a name and an ID (for this example I’ll use myFrenzySpell for the ID; you can use anything you want as well as for the Name.) Select "Ability" from the Type dropdown and make sure "Disallow Spell Absorb/Reflect", "Script Effect Always Applies", and "Immune to Silence" are all checked.

File:Phicommandtut04.jpg

Now right-click the space on the right and select "New" to bring up the box to add a new spell effect.

For the effect choose "Script Effect" and give it a duration (I use 360 but for this spell it really doesn’t matter since it will stay on until it’s dismissed.)

Give it an "Effect Name," then choose any school and visual. Do not check "Effect is Hostile."

For the Script select the one you just made.

File:Phicommandtut03.jpg

Create the Object script for your NPC

Follow the same steps as above to create another new script, only make this one an Object type. You can replace the names of the short and float variables listed at the top to be whatever you wish. Same goes for the script name.

Once created this script will need to go on the NPC/creature you want to command:

ScriptName MyNPCScript

short timerinit
short activestat
float timer

begin OnActivate
	if IsActionRef player == 1 
		set activestat to 1
		if activestat == 1
			MessageBox "Command?", "Attack", "Defend", "Cancel"
			set activestat to 2
		endif
	endif
end

begin GameMode
		if activestat == 2
			set button to getbuttonpressed
			if button > -1
				if button == 0
					set globalvar1 to 1
					set activestat to 0
				elseif button == 1
					set globalvar1 to 2
					set activestat to 0
				elseif button == 2
					set activestat to 0
				endif
			endif
		endif
		if globalvar1 == 0
			set timerinit to 0
		endif
		if globalvar1 == 1
			addspell myFrenzySpell
			set globalvar1 to 0
		endif
		if globalvar1 == 2
			if timerinit == 0
				set timer to .5
				set timerinit to 1
			else
				if timer > 0
					set timer to timer - getSecondsPassed
				else
					removespell myFrenzySpell
					StopCombatAlarmOnActor
					set globalvar1 to 0
				endif
			endif
		endif
end

That should do it. I set my summons to have aggression at 10 in their AI setup by default. That way they’ll fight when attacked but won’t go after friendlies unless you command them to.

Best of luck!

-Phinix