//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; }