I'm trying to get this script to perform a global check so that as each of five characters dies, it increases a global number. When the number reaches five, it's meant to spawn a new character. Obviously, I don't know in what order the characters will be killed, so I'm trying to make it possible to do in any order. I've tried using if(GetGlobal[blahblahblah]) elseelse functions, switch and case functions, etc etc but nothing will let me set the number above 1. Here's the script I've been using so far:
 
 
 #include "k_inc_generic"
 #include "k_inc_utility"
 void main()
 {
 {
 int nCurrentHP;
 int nUser = GetUserDefinedEventNumber();
 if(nUser == 1006) // DAMAGED
 {
 nCurrentHP=GetCurrentHitPoints();
 if (nCurrentHP<20) {
 CancelCombat (OBJECT_SELF);
 ClearAllActions();
 ChangeToStandardFaction(OBJECT_SELF, 5);
 
 SetLocalBoolean(OBJECT_SELF,0,TRUE); 
 
 SetMinOneHP(OBJECT_SELF,FALSE);
 
 }
 
 }
 object oItem = GetFirstItemInInventory(OBJECT_SELF);
 while (GetIsObjectValid(oItem)) {
 SetPlotFlag(oItem, FALSE);
 DestroyObject(oItem, 0.0);
 oItem = GetNextItemInInventory(OBJECT_SELF);
 
 object oGoodbye;
 oGoodbye = (OBJECT_SELF); 
 DelayCommand(1.0, DestroyObject(oGoodbye));
 
 int nQMD = GetGlobalNumber("MasterDead");
 int nNoMasterDead = GetScriptParameter( 0 );
 int n1MD = GetScriptParameter( 1 );
 int n2MD = GetScriptParameter( 2 );
 int n3MD = GetScriptParameter( 3 );
 int n4MD = GetScriptParameter( 4 );
 int n5MD = GetScriptParameter( 5 );
 int nSet1 = GetScriptParameter( 1 );
 int nSet2 = GetScriptParameter( 2 );
 int nSet3 = GetScriptParameter( 3 );
 int nSet4 = GetScriptParameter( 4 );
 int nSet5 = GetScriptParameter( 5 );
 
 switch (nQMD)
 {
 case 0:
 {
 
 if( GetGlobalNumber("MasterDead") == nNoMasterDead )
 { 
 SetGlobalNumber( "MasterDead", nSet1 );
 SendMessageToPC(GetPartyLeader(), "DEBUG: GLOBAL NUMBER NOW SET TO 1");
 }
 
 else
 {
 }
 
 }break;
 
 case 1:
 {
 if(GetGlobalNumber("MasterDead") == n1MD)
 {
 SetGlobalNumber( "MasterDead", nSet2);
 SendMessageToPC(GetPartyLeader(), "DEBUG: GLOBAL NUMBER NOW SET TO 2");
 }
 else
 {
 }
 }break;
 
 case 2:
 {
 if(GetGlobalNumber("MasterDead") == n2MD)
 {
 SetGlobalNumber( "MasterDead", nSet3);
 SendMessageToPC(GetPartyLeader(), "DEBUG: GLOBAL NUMBER NOW SET TO 3");
 }
 else
 {
 }
 }break;
 
 case 3:
 {
 if(GetGlobalNumber("MasterDead") == n3MD)
 {
 SetGlobalNumber( "MasterDead", nSet4);
 SendMessageToPC(GetPartyLeader(), "DEBUG: GLOBAL NUMBER NOW SET TO 4");
 }
 else
 {
 }
 }break;
 
 case 4:
 {
 if(GetGlobalNumber("MasterDead") == n4MD)
 {
 SetGlobalNumber( "MasterDead", nSet5);
 SendMessageToPC(GetPartyLeader(), "DEBUG: GLOBAL NUMBER NOW SET TO 5!");
 }
 else
 {
 }
 }break;
 
 case 5:
 {
 if(GetGlobalNumber("MasterDead") == n5MD)
 {
 float x=0.98956f; 
 float y=-0.68433f;
 float z=0.00f;
 float r=118.35471f;
 vector vecNPC=Vector(x,y,z);
 location locNPC=Location(vecNPC, r);
 object oNPC=CreateObject(OBJECT_TYPE_CREATURE,"atton",locNPC);
 SendMessageToPC(GetPartyLeader(), "DEBUG: SPAWN ATTON");
 }
 else
 {
 }
 }break;
 }
 }
 }
 }
 
 Thanks.
  
 
  
  
    - I don't think you need any include scripts since you're not using their functions.
 
 - What spawn-in flags are you setting in your OnSpawn script? If you're only using the OnDeath event, then you can remove the if(nUser == 1006)) block (which appears to be part of a Talk-Fight-Talk sequence).
 
 - It appears this while-loop should probably have a closing brace that comes before you do anything globals.
 
 - I think you're using GetScriptParameter(x) when you should just use x. EGetScriptParameter retrieves the P1..P5 parameters as set in DLGEditor for a dialog-called script. Since (I believe) the script you listed is a custom UserEvent script, there will be no script parameters to retrieve. Even if there were parameters to retrieve, you can't retrieve parameter 0 (only 1 to 5). 
 
 
 - In the code that deals with globals, you can probably simplify things quite a bit by querying the global value, incrementing it, and writing it back immediately. The debug string can be generated dynamically. 
 
 - There's a couple of syntax issues especially with braces (eg. you don't need braces within a case: element) though the compiler might allow it, it will make your own debugging more confusing.
 
 Here's what I think your UserDefined script could appear like this:
 
 /* di_userdef.nss
 UserDefined script for the NPCs
 only OnDeath event is defined... in the NPCs' OnSpawn script,
 the GN_SetSpawnInCondition(SW_FLAG_EVENT_ON_DEATH); should 
 be uncommented */
 void main()
 {
 int nCurrentHP;
 int nUser = GetUserDefinedEventNumber();
 if(nUser == 1007) // DATH
 {
 object oItem = GetFirstItemInInventory(OBJECT_SELF);
 while (GetIsObjectValid(oItem)) 
 {
 SetPlotFlag(oItem, FALSE);
 DestroyObject(oItem, 0.0);
 oItem = GetNextItemInInventory(OBJECT_SELF);
 }
 
 DelayCommand(1.0, DestroyObject(OBJECT_SELF));
 
 int nQMD = GetGlobalNumber("MasterDead");
 nQMD++; 
 SetGlobalNumber( "MasterDead", nQMD ); 
 string strDebug="DEBUG: GLOBAL NUMBER NOW SET TO "+IntToString(nQMD);
 SendMessageToPC(GetPartyLeader(), strDebug);
 
 if (nQMD==5) 
 { 
 float x=0.98956f; 
 float y=-0.68433f;
 float z=0.00f;
 float r=118.35471f;
 vector vecNPC=Vector(x,y,z);
 location locNPC=Location(vecNPC, r);
 object oNPC=CreateObject(OBJECT_TYPE_CREATURE,"atton",locNPC);
 SendMessageToPC(GetPartyLeader(), "DEBUG: SPAWN ATTON");
 }
 }
 }