Difference between revisions of "MessageBox Tutorial/Quest Scripts"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>Haama
(Created)
 
imported>Haama
(Category)
Line 80: Line 80:
# It will take a couple of seconds after using [[StartQuest]] before the quest starts up.
# It will take a couple of seconds after using [[StartQuest]] before the quest starts up.
# Using ''StartQuest'' can be dangerous, as using ''StartQuest'' on a quest that is already running will reset all of it's variables to 0.
# Using ''StartQuest'' can be dangerous, as using ''StartQuest'' on a quest that is already running will reset all of it's variables to 0.
[[Category:Scripting Tutorials]]

Revision as of 13:03, 29 August 2007

Some background

Quest scripts are very similar to the activator script. You won't need to do the extra coding that an activator requires, so they'll be a bit easier.

The disadvantage of quests lies in their lack of a clear start. That is, there are no blocks that a quest runs only a single time when it first starts. Instead, the entire script is run every frame. For instance, if we put the onActivate block into the GameMode block:

begin GameMode
  set Choosing to -1
  if (Choosing == -1)
...

then the first menu will be displayed continuously.

To fix this, we need to add another variable:

begin GameMode
  if (Working == 1)
    set Choosing to -1
    set Working to 0
  endif
...

Setup

  1. Open the quest dialog. Select a quest on the left. Right-click it and select new. Name it accordingly (YourMenu in this tutorial).
  2. Write the script:
scn YourMenuScript
Short Choosing
Short Choice
Short Working



Begin GameMode
  If (Working == 1)
    Set Choosing to -1
    Set Working to 0
  Endif


  If (Choosing == 0) ;meaning it shouldn't be running
    Return


  Elseif (Choosing == -1) ;Display your menu
    Messagebox "Which option?" "First Option" "Second Option" ;...
    Set Choosing to 1
    Set Choice to -1

  Elseif (Choosing == 1) ;Catch the player's decision
    If (Choice == -1) ;No choice yet
      Set Choice to GetButtonPressed
    Elseif (Choice == 0) ;First Option
      ;run your code for the first decision
      Set Choosing to 0 ;to finish up
    Elseif (Choice == 1) ;Second Option
      ;run your code for the second decision
      Set Choosing to 0 ;to finish up
;... 
;Further illustrations of more options
;    Elseif (Choice == #) ;Nth Option
       ;run your code for the nth decision
;      Set Choosing to 0
;    Elseif (Choice == 9) ;Final/Tenth Option
       ;run your code for the tenth decision
;      Set Choosing to 0
    Endif
  Endif
End
  1. Make sure to save the script as a Quest Script.
  2. Attach the script to the quest.
  3. You can start your menus from any script with <pr>set YourMenu.Working to 1.

Notes on using StartQuest/StopQuest

You can use StopQuest and StartQuest to control when the quest is running. This will prevent the extra if tests from running, but:

  1. You will need to remember to stop it
...
  if (Choosing == 0)
    StopQuest YourMenu
...
  1. You will need to remember to use
set YourMenu.Working to 1
StartQuest YourMenu

every time you want to use it.

  1. It will take a couple of seconds after using StartQuest before the quest starts up.
  2. Using StartQuest can be dangerous, as using StartQuest on a quest that is already running will reset all of it's variables to 0.