MessageBox Tutorial/Quest Scripts

From the Oblivion ConstructionSet Wiki
Revision as of 12:57, 29 August 2007 by imported>Haama (Created)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.