335 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//DMFI Universal Wand scripts by hahnsoo
 | 
						|
int DMW_START_CUSTOM_TOKEN = 8000;
 | 
						|
 | 
						|
//Retrieve targetting information
 | 
						|
object oMySpeaker = GetLastSpeaker();
 | 
						|
object oMyTarget = GetLocalObject(oMySpeaker, "dmfi_univ_target");
 | 
						|
location lMyLoc = GetLocalLocation(oMySpeaker, "dmfi_univ_location");
 | 
						|
 | 
						|
int dmwand_isnearbydestroyable()
 | 
						|
{
 | 
						|
   object oMyTest = GetFirstObjectInShape(SHAPE_CUBE, 0.6, lMyLoc, FALSE, OBJECT_TYPE_ALL);
 | 
						|
   int nTargetType = GetObjectType(oMyTest);
 | 
						|
   return (GetIsObjectValid(oMyTest) && (! GetIsPC(oMyTest)) && ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE)));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetcreateable()
 | 
						|
{
 | 
						|
   if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
 | 
						|
 | 
						|
   int nTargetType = GetObjectType(oMyTarget);
 | 
						|
   return ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetdestroyable()
 | 
						|
{
 | 
						|
   if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
 | 
						|
 | 
						|
   int nTargetType = GetObjectType(oMyTarget);
 | 
						|
   if(! GetIsPC(oMyTarget))
 | 
						|
   {
 | 
						|
      return ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE));
 | 
						|
   }
 | 
						|
   return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetinvalid()
 | 
						|
{
 | 
						|
   return !GetIsObjectValid(oMyTarget);
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetinventory()
 | 
						|
{
 | 
						|
   return (GetIsObjectValid(oMyTarget) && GetHasInventory(oMyTarget));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetnotme()
 | 
						|
{
 | 
						|
   return (GetIsObjectValid(oMyTarget) && (oMySpeaker != oMyTarget));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetpcornpc()
 | 
						|
{
 | 
						|
   return (GetIsObjectValid(oMyTarget) && GetAbilityScore(oMyTarget, ABILITY_CONSTITUTION));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetnpc()
 | 
						|
{
 | 
						|
   return (dmwand_istargetpcornpc() && (! GetIsPC(oMyTarget)));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetpc()
 | 
						|
{
 | 
						|
   return (GetIsObjectValid(oMyTarget) && GetIsPC(oMyTarget));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetpcnme()
 | 
						|
{
 | 
						|
   return (GetIsObjectValid(oMyTarget) && GetIsPC(oMyTarget) && (oMySpeaker != oMyTarget));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetpcornpcnme()
 | 
						|
{
 | 
						|
   return (dmwand_istargetpcornpc() && (oMySpeaker != oMyTarget));
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_istargetplaceable()
 | 
						|
{
 | 
						|
   if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
 | 
						|
 | 
						|
   int nTargetType = GetObjectType(oMyTarget);
 | 
						|
   return (nTargetType == OBJECT_TYPE_PLACEABLE);
 | 
						|
}
 | 
						|
 | 
						|
int dmw_conv_Start(int nCurrent, int nChoice, string sParams = "")
 | 
						|
{
 | 
						|
   string sText = "";
 | 
						|
   string sCall = "";
 | 
						|
   string sCallParams = "";
 | 
						|
 | 
						|
   switch(nCurrent)
 | 
						|
   {
 | 
						|
      case 0:
 | 
						|
         nCurrent = 0;
 | 
						|
         sText =       "Welcome to the Server tool:  This will allow you to find any player to perform simple functions.";
 | 
						|
         sCall =       "";
 | 
						|
         sCallParams = "";
 | 
						|
         break;
 | 
						|
 | 
						|
      case 1:
 | 
						|
         nCurrent = 1;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Penguin this player.";
 | 
						|
            sCall =       "func_Toad";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case 2:
 | 
						|
         nCurrent = 2;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Unpenguin this player.";
 | 
						|
            sCall =       "func_Untoad";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case 3:
 | 
						|
         nCurrent = 3;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Boot this player.";
 | 
						|
            sCall =       "func_KickPC";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
 | 
						|
      case 4:
 | 
						|
         nCurrent = 4;
 | 
						|
         if(dmwand_istargetinvalid())
 | 
						|
         {
 | 
						|
            sText =       "List all players...";
 | 
						|
            sCall =       "conv_ListPlayers";
 | 
						|
            sCallParams = "func_PlayerListConv";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
 | 
						|
      case 5:
 | 
						|
         nCurrent = 5;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Jump this player to my location.";
 | 
						|
            sCall =       "func_JumpPlayerHere";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case 6:
 | 
						|
         nCurrent = 6;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Jump me to this player's location.";
 | 
						|
            sCall =       "func_JumpToPlayer";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      case 7:
 | 
						|
         nCurrent = 7;
 | 
						|
         if(dmwand_istargetpcnme())
 | 
						|
         {
 | 
						|
            sText =       "Jump this player's party to my location.";
 | 
						|
            sCall =       "func_JumpPartyHere";
 | 
						|
            sCallParams = "";
 | 
						|
            break;
 | 
						|
         }
 | 
						|
      default:
 | 
						|
         nCurrent = 0;
 | 
						|
         sText =       "";
 | 
						|
         sCall =       "";
 | 
						|
         sCallParams = "";
 | 
						|
         break;
 | 
						|
   }
 | 
						|
 | 
						|
   SetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nChoice), sText);
 | 
						|
   SetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice), sCall);
 | 
						|
   SetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice), sCallParams);
 | 
						|
 | 
						|
   return nCurrent;
 | 
						|
}
 | 
						|
 | 
						|
int dmwand_BuildConversationDialog(int nCurrent, int nChoice, string sConversation, string sParams)
 | 
						|
{
 | 
						|
   if(TestStringAgainstPattern(sConversation, "Start"))
 | 
						|
   {
 | 
						|
      return dmw_conv_Start(nCurrent, nChoice, sParams);
 | 
						|
   }
 | 
						|
   return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
void dmwand_BuildConversation(string sConversation, string sParams)
 | 
						|
{
 | 
						|
   int nLast;
 | 
						|
   int nTemp;
 | 
						|
   int nChoice = 1;
 | 
						|
   int nCurrent = 1;
 | 
						|
   int nMatch;
 | 
						|
 | 
						|
   if(TestStringAgainstPattern(sParams, "prev"))
 | 
						|
   {
 | 
						|
      //Get the number choice to start with
 | 
						|
      nCurrent = GetLocalInt(oMySpeaker, "dmw_dialogprev");
 | 
						|
 | 
						|
      //Since we're going to the previous page, there will be a next
 | 
						|
      SetLocalString(oMySpeaker, "dmw_dialog9", "Next ->");
 | 
						|
      SetLocalString(oMySpeaker, "dmw_function9", "conv_" + sConversation);
 | 
						|
      SetLocalString(oMySpeaker, "dmw_params9", "next");
 | 
						|
      SetLocalInt(oMySpeaker, "dmw_dialognext", nCurrent);
 | 
						|
 | 
						|
      nChoice = 8;
 | 
						|
      for(;nChoice >= 0; nChoice--)
 | 
						|
      {
 | 
						|
         int nTemp1 = nCurrent;
 | 
						|
         int nTemp2 = nCurrent;
 | 
						|
         nMatch = nTemp2;
 | 
						|
         while((nCurrent == nMatch) && (nTemp2 > 0))
 | 
						|
         {
 | 
						|
            nTemp2--;
 | 
						|
            nMatch = dmwand_BuildConversationDialog(nTemp2, nChoice, sConversation, sParams);
 | 
						|
         }
 | 
						|
 | 
						|
         if(nTemp2 <= 0)
 | 
						|
         {
 | 
						|
            //we went back too far for some reason, so make this choice blank
 | 
						|
            SetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nChoice), "");
 | 
						|
            SetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice), "");
 | 
						|
            SetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice), "");
 | 
						|
         }
 | 
						|
         nLast = nTemp;
 | 
						|
         nTemp = nTemp1;
 | 
						|
         nTemp1 = nMatch;
 | 
						|
         nCurrent = nMatch;
 | 
						|
      }
 | 
						|
 | 
						|
      if(nMatch > 0)
 | 
						|
      {
 | 
						|
         SetLocalString(oMySpeaker, "dmw_dialog1", "<- previous");
 | 
						|
         SetLocalString(oMySpeaker, "dmw_function1", "conv_" + sConversation);
 | 
						|
         SetLocalString(oMySpeaker, "dmw_params1", "prev");
 | 
						|
         SetLocalInt(oMySpeaker, "dmw_dialogprev", nLast);
 | 
						|
      }
 | 
						|
 | 
						|
      //fill the NPC's dialog spot
 | 
						|
      //(saved for last because the build process tromps on it)
 | 
						|
      dmwand_BuildConversationDialog(0, 0, sConversation, sParams);
 | 
						|
   }
 | 
						|
   else
 | 
						|
   {
 | 
						|
      //fill the NPC's dialog spot
 | 
						|
      dmwand_BuildConversationDialog(0, 0, sConversation, sParams);
 | 
						|
 | 
						|
      //No parameters specified, start at the top of the conversation
 | 
						|
      if(sParams == "")
 | 
						|
      {
 | 
						|
         nChoice = 1;
 | 
						|
         nCurrent = 1;
 | 
						|
      }
 | 
						|
 | 
						|
      //A "next->" choice was selected
 | 
						|
      if(TestStringAgainstPattern(sParams, "next"))
 | 
						|
      {
 | 
						|
         //get the number choice to start with
 | 
						|
         nCurrent = GetLocalInt(oMySpeaker, "dmw_dialognext");
 | 
						|
 | 
						|
         //set this as the number for the "previous" choice to use
 | 
						|
         SetLocalInt(oMySpeaker, "dmw_dialogprev", nCurrent);
 | 
						|
 | 
						|
         //Set the first dialog choice to be "previous"
 | 
						|
         nChoice = 2;
 | 
						|
         SetLocalString(oMySpeaker, "dmw_dialog1", "<- Previous");
 | 
						|
         SetLocalString(oMySpeaker, "dmw_function1", "conv_" + sConversation);
 | 
						|
         SetLocalString(oMySpeaker, "dmw_params1", "prev");
 | 
						|
      }
 | 
						|
 | 
						|
      //Loop through to build the dialog list
 | 
						|
      for(;nChoice <= 10; nChoice++)
 | 
						|
      {
 | 
						|
         nMatch = dmwand_BuildConversationDialog(nCurrent, nChoice, sConversation, sParams);
 | 
						|
         //nLast will be the value of the choice before the last one
 | 
						|
         nLast = nTemp;
 | 
						|
         nTemp = nMatch;
 | 
						|
         if(nMatch > 0) { nCurrent = nMatch; }
 | 
						|
         if(nMatch == 0) { nLast = 0; }
 | 
						|
         nCurrent++;
 | 
						|
      }
 | 
						|
 | 
						|
      //If there were enough choices to fill 10 spots, make spot 9 a "next"
 | 
						|
      if(nLast > 0)
 | 
						|
      {
 | 
						|
         SetLocalString(oMySpeaker, "dmw_dialog9", "Next ->");
 | 
						|
         SetLocalString(oMySpeaker, "dmw_function9", "conv_" + sConversation);
 | 
						|
         SetLocalString(oMySpeaker, "dmw_params9", "next");
 | 
						|
         SetLocalInt(oMySpeaker, "dmw_dialognext", nLast);
 | 
						|
      }
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
void dmwand_StartConversation()
 | 
						|
{
 | 
						|
   if(! GetIsObjectValid(oMySpeaker))
 | 
						|
   {
 | 
						|
      return;
 | 
						|
   }
 | 
						|
 | 
						|
   dmwand_BuildConversation("Start", "");
 | 
						|
}
 | 
						|
 | 
						|
int StartingConditional()
 | 
						|
{
 | 
						|
   object oPC = GetPCSpeaker();
 | 
						|
   int nMyNum = 0;
 | 
						|
 | 
						|
   DeleteLocalInt(oPC, "Tens");
 | 
						|
   DeleteLocalInt(oPC, "dmfi_univ_offset");
 | 
						|
   SetLocalInt(OBJECT_SELF, "dmfi_dmwOffset", 1);
 | 
						|
   //Check whether this conversation has been started already, start it if not.
 | 
						|
   int nStarted = GetLocalInt(oMySpeaker, "dmw_started");
 | 
						|
   if(! nStarted)
 | 
						|
   {
 | 
						|
      SetLocalInt(oMySpeaker, "dmw_started", 1);
 | 
						|
      dmwand_StartConversation();
 | 
						|
   }
 | 
						|
 | 
						|
   string sMyString = GetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nMyNum));
 | 
						|
 | 
						|
   if(sMyString == "")
 | 
						|
   {
 | 
						|
      return FALSE;
 | 
						|
   }
 | 
						|
   else if (GetLocalString(oPC, "dmfi_univ_conv") == "server")
 | 
						|
   {
 | 
						|
      SetCustomToken(DMW_START_CUSTOM_TOKEN + nMyNum, sMyString);
 | 
						|
      return TRUE;
 | 
						|
   }
 | 
						|
   else
 | 
						|
    return FALSE;
 | 
						|
}
 |