mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-29 23:15:55 -04:00
457 lines
12 KiB
Plaintext
457 lines
12 KiB
Plaintext
// ======================================================================
|
|
//
|
|
// qascript.script
|
|
// Copyright 2005, Sony Online Entertainment
|
|
// All Rights Reserved.
|
|
//
|
|
// VERSION 1.0
|
|
//
|
|
// Jeff W Haskell
|
|
//
|
|
// [internal]
|
|
// QA Script Tool
|
|
// - shows scripts attached to test character
|
|
// - shows frequently used QA scripts that can be attached to test character
|
|
// - shows scripts attached to test character
|
|
// [public]
|
|
// not for public consumption
|
|
// [testplan]
|
|
// Attach the test.qatool script to the test character and use the command /qatool qascript.
|
|
// A SUI will instantiate and give the tester an option to attach/detach
|
|
// ======================================================================
|
|
|
|
// ======================================================================
|
|
// Library Includes
|
|
// ======================================================================
|
|
|
|
include library.utils;
|
|
include library.qa;
|
|
include library.sui;
|
|
include java.util.Arrays;
|
|
include java.util.HashSet;
|
|
include java.util.Vector;
|
|
|
|
/********* CONSTANTS *****************************************/
|
|
|
|
const string TOOL_TITLE = "QA SCRIPT TOOL";
|
|
const string TOOL_PROMPT = "This tool allows the tester to see what Scripts are currently attached to their character and attach/detach each script individually to troubleshoot problems or test functionality.\n\n\rCurrent Scripts Attached:\n";
|
|
const string SCRIPTVAR = "qascript";
|
|
const string ERROR_MSG_STR = "There was an error in the tool.";
|
|
|
|
const string[] ERROR_MSG_ARRAY = {
|
|
"There was an error in the tool."
|
|
};
|
|
|
|
const string[] TOOL_MENU = {
|
|
"Attach Script",
|
|
"Detach Script"
|
|
};
|
|
|
|
const string[] COMMON_SCRIPTS = {
|
|
"csr.get_resource_crate",
|
|
"e3demo.e3_demoer",
|
|
"gm.cmd",
|
|
"player.player_gm",
|
|
"player.yavin_e3",
|
|
"quest.utility.quest_test",
|
|
"space.content_tools.content_generation",
|
|
"space.content_tools.missiontest",
|
|
"test.qa_cybernetic",
|
|
"test.qa_damage",
|
|
"test.qa_dynamic",
|
|
"test.qa_enhancements",
|
|
"test.qa_helper",
|
|
"test.qa_jtl_tools",
|
|
"test.qa_quest_skipper",
|
|
"test.qa_resource_reward",
|
|
"test.qa_resources",
|
|
"test.qabackpack",
|
|
"test.qabadge",
|
|
"test.qabuff",
|
|
"test.qacube",
|
|
"test.qadatapad",
|
|
"test.qadna",
|
|
"test.qafaction",
|
|
"test.qaham",
|
|
"test.qainventory",
|
|
"test.qaitem",
|
|
"test.qange",
|
|
"test.qaprofession",
|
|
"test.qascript",
|
|
"test.qasetup",
|
|
"test.qaspace",
|
|
"test.qatool",
|
|
"test.qaweapon",
|
|
"test.qawearables",
|
|
"test.qaxp",
|
|
"test.ttyson_test",
|
|
"working.dantest"
|
|
};
|
|
|
|
/***** TRIGGERS *******************************************************/
|
|
trigger OnAttach()
|
|
{
|
|
if(isGod(self))
|
|
{
|
|
if(getGodLevel(self) < 10)
|
|
{
|
|
detachScript(self, "test.qascript");
|
|
sendSystemMessage(self, "You do not have the appropriate access level to use this script.", null);
|
|
}
|
|
}
|
|
else if(!isGod(self))
|
|
{
|
|
detachScript(self, "test.qascript");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnSpeaking(string text)
|
|
{
|
|
if(isGod(self))
|
|
{
|
|
if(toLower(text).equals("qascript"))
|
|
{
|
|
//FUNCTION TO SHOW THE MAIN MENU OF THE TOOL
|
|
toolMainMenu(self);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/******** Message Handlers *************************************/
|
|
|
|
messageHandler handleMainMenuOptions()
|
|
{
|
|
if(isGod(self))
|
|
{
|
|
//STATIC SCRIPT VARIBLE
|
|
if(utils.hasScriptVar(self, SCRIPTVAR+".pid"))
|
|
{
|
|
//sendSystemMessageTestingOnly(self, "handleMainMenuOptions");
|
|
|
|
qa.checkParams(params, SCRIPTVAR);
|
|
obj_id player = sui.getPlayerId(params);
|
|
int idx = sui.getListboxSelectedRow(params);
|
|
int btn = sui.getIntButtonPressed(params);
|
|
|
|
//CHECK FOR CANCEL BUTTON
|
|
if(btn == sui.BP_CANCEL)
|
|
{
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if(btn == sui.BP_REVERT)
|
|
{
|
|
string[] tool_options = dataTableGetStringColumn("datatables/test/qa_tool_menu.iff", "main_tool");
|
|
qa.refreshMenu( self, "Choose the tool you want to use", "QA Tools", tool_options, "toolMainMenu", true, "qatool.pid");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//BUILD THE NEXT SUI
|
|
else
|
|
{
|
|
|
|
switch (idx)
|
|
{
|
|
case 0: //Attach Script
|
|
toolAttachMenu(self);
|
|
break;
|
|
case 1: //Detach Script
|
|
toolDetachMenu(self);
|
|
break;
|
|
default:
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleAttachScriptOptions()
|
|
{
|
|
if(isGod(self))
|
|
{
|
|
//STATIC SCRIPT VARIBLE
|
|
if(utils.hasScriptVar(self, SCRIPTVAR+".pid"))
|
|
{
|
|
//sendSystemMessageTestingOnly(self, "handleAttachScriptOptions");
|
|
|
|
qa.checkParams(params, SCRIPTVAR);
|
|
obj_id player = sui.getPlayerId(params);
|
|
int idx = sui.getListboxSelectedRow(params);
|
|
int btn = sui.getIntButtonPressed(params);
|
|
|
|
//CHECK FOR CANCEL BUTTON
|
|
if(btn == sui.BP_CANCEL)
|
|
{
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if(btn == sui.BP_REVERT)
|
|
{
|
|
toolMainMenu(self);
|
|
//removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//ATTAINING THE PREVIOUS MENU AND PLACING IT INTO AN ARRAY
|
|
string previousMainMenuArray[] = utils.getStringArrayScriptVar(self, "qascript.attachMenu");
|
|
//FINDING THE SPECIFIC SELECTION MADE BY USER
|
|
string previousSelection = previousMainMenuArray[idx];
|
|
//MAKING SURE THE PREVIOUS SELECTION IS NOT EQUAL TO NULL
|
|
if(previousSelection == "")
|
|
{
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//BUILD THE NEXT SUI
|
|
else
|
|
{
|
|
attachScript(self, previousSelection);
|
|
sendSystemMessageTestingOnly(player, previousSelection+" script attached.");
|
|
CustomerServiceLog("qaTool","User: (" + self + ") " + getName(self) + " has attached script (" + previousSelection + ") using the QA Script Tool.");
|
|
toolMainMenu(self);
|
|
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleDetachScriptOptions()
|
|
{
|
|
if(isGod(self))
|
|
{
|
|
//STATIC SCRIPT VARIBLE
|
|
if(utils.hasScriptVar(self, SCRIPTVAR+".pid"))
|
|
{
|
|
qa.checkParams(params, SCRIPTVAR);
|
|
obj_id player = sui.getPlayerId(params);
|
|
int idx = sui.getListboxSelectedRow(params);
|
|
int btn = sui.getIntButtonPressed(params);
|
|
|
|
//CHECK FOR CANCEL BUTTON
|
|
if(btn == sui.BP_CANCEL)
|
|
{
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if(btn == sui.BP_REVERT)
|
|
{
|
|
toolMainMenu ( self );
|
|
//removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//ATTAINING THE PREVIOUS MENU AND PLACING IT INTO AN ARRAY
|
|
string previousMainMenuArray[] = utils.getStringArrayScriptVar(self, "qascript.detachMenu");
|
|
//FINDING THE SPECIFIC SELECTION MADE BY USER
|
|
string previousSelection = previousMainMenuArray[idx];
|
|
//MAKING SURE THE PREVIOUS SELECTION IS NOT EQUAL TO NULL
|
|
if(previousSelection == "")
|
|
{
|
|
removePlayer(player, "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
//BUILD THE NEXT SUI
|
|
else
|
|
{
|
|
detachScript(self, previousSelection);
|
|
sendSystemMessageTestingOnly(player, previousSelection+" script detached.");
|
|
CustomerServiceLog("qaTool","User: (" + self + ") " + getName(self) + " has detached script (" + previousSelection + ") using the QA Script Tool.");
|
|
toolMainMenu(self);
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
/*------------- ALL FUNCTIONS ----------------------------------------------*/
|
|
/*--------------------------------------------------------------------------*/
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
//BUILDS THE MAIN TOOL MENU
|
|
void toolMainMenu(obj_id player)
|
|
{
|
|
string toolPrompt = scriptToolPromptMaker(player);
|
|
qa.refreshMenu(player, toolPrompt, TOOL_TITLE, TOOL_MENU, "handleMainMenuOptions", "qascript.pid", "qascript.mainMenu", sui.OK_CANCEL_REFRESH);
|
|
}
|
|
|
|
//BUILDS THE SCRIPT ATTACH MENU
|
|
void toolAttachMenu(obj_id player)
|
|
{
|
|
string toolPrompt = "ATTACH MODE\n\n"+scriptToolPromptMaker(player);
|
|
string[] attachMenu = getAttachableCharacterScripts(player);
|
|
|
|
if(attachMenu.length > -1)
|
|
{
|
|
qa.refreshMenu(player, toolPrompt, TOOL_TITLE, attachMenu, "handleAttachScriptOptions", "qascript.pid", "qascript.attachMenu", sui.OK_CANCEL_REFRESH);
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessageTestingOnly(player, "The menu could not be built because there were no menu items to display");
|
|
}
|
|
}
|
|
|
|
//BUILDS THE SCRIPT DETACH MENU
|
|
void toolDetachMenu(obj_id player)
|
|
{
|
|
string toolPrompt = "DETACH MODE\n\n"+scriptToolPromptMaker(player);
|
|
string[] detachMenu = getCharacterScripts(player);
|
|
|
|
if(detachMenu.length > -1)
|
|
{
|
|
qa.refreshMenu(player, toolPrompt, TOOL_TITLE, detachMenu, "handleDetachScriptOptions", "qascript.pid", "qascript.detachMenu", sui.OK_CANCEL_REFRESH);
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessageTestingOnly(player, "The menu could not be built because there were no menu items to display");
|
|
}
|
|
}
|
|
|
|
//BUILDS THE DYNAMIC TOOL PROMPT
|
|
string scriptToolPromptMaker(obj_id player)
|
|
{
|
|
string scriptList = getCharacterScriptsPrompt(player);
|
|
return TOOL_PROMPT+scriptList;
|
|
}
|
|
|
|
//THIS FUNCTION RETURNS AN ARRAY OF SCRIPTS ATTACHED TO THE TESTER
|
|
string[] filterCharacterScripts(obj_id player)
|
|
{
|
|
string strScripts = "";
|
|
string[] scriptArray = getScriptList(player);
|
|
if(scriptArray.length > -1)
|
|
{
|
|
HashSet theSet = new HashSet();
|
|
|
|
for (int i = 0; i < scriptArray.length; i++)
|
|
{
|
|
string script = scriptArray[i];
|
|
if (script.indexOf("script.") > -1)
|
|
{
|
|
script = script.substring(7);
|
|
theSet.add(script);
|
|
}
|
|
}
|
|
|
|
string[] menuArray = new string[theSet.size()];
|
|
theSet.toArray(menuArray);
|
|
Arrays.sort(menuArray);
|
|
return menuArray;
|
|
}
|
|
return ERROR_MSG_ARRAY;
|
|
}
|
|
|
|
//THIS FUNCTION ACTUALLY CREATES THE LIST OF SCRIPTS ATTACHED TO THE CHARACTER SPECIFICALLY FOR THE TOOL PROMPT
|
|
string getCharacterScriptsPrompt(obj_id player)
|
|
{
|
|
string strScripts = "";
|
|
string[] scriptArray = filterCharacterScripts(player);
|
|
if(scriptArray.length > -1)
|
|
{
|
|
if(scriptArray[0] != ERROR_MSG_ARRAY[0])
|
|
{
|
|
for (int i = 0; i < scriptArray.length; i++)
|
|
{
|
|
if(scriptArray[i].startsWith("test."))
|
|
{
|
|
strScripts+=scriptArray[i]+"\r\n";
|
|
}
|
|
else
|
|
{
|
|
for(int s = 0; s < COMMON_SCRIPTS.length; s++)
|
|
{
|
|
if(scriptArray[i] == COMMON_SCRIPTS[s])
|
|
{
|
|
strScripts+=scriptArray[i]+"\r\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return strScripts;
|
|
}
|
|
}
|
|
return ERROR_MSG_STR;
|
|
}
|
|
|
|
//THIS FUNCTION RETURNS AN ARRAY OF CURRENTLY ATTACHED SCRIPTS
|
|
string[] getCharacterScripts(obj_id player)
|
|
{
|
|
HashSet theSet = new HashSet();
|
|
|
|
string[] scriptArray = filterCharacterScripts(player);
|
|
if(scriptArray.length > -1)
|
|
{
|
|
if(scriptArray[0] != ERROR_MSG_ARRAY[0])
|
|
{
|
|
for (int i = 0; i < scriptArray.length; i++)
|
|
{
|
|
if(scriptArray[i].startsWith("test."))
|
|
{
|
|
theSet.add(scriptArray[i]);
|
|
}
|
|
else
|
|
{
|
|
for(int s = 0; s < COMMON_SCRIPTS.length; s++)
|
|
{
|
|
if(scriptArray[i] == COMMON_SCRIPTS[s])
|
|
{
|
|
theSet.add( scriptArray[i] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
string[] menuArray = new string[theSet.size()];
|
|
theSet.toArray(menuArray);
|
|
Arrays.sort(menuArray);
|
|
return menuArray;
|
|
}
|
|
}
|
|
return ERROR_MSG_ARRAY;
|
|
}
|
|
|
|
//THIS FUNCTION RETURNS AN ARRAY OF SCRIPTS THE TESTER CAN ATTACH AFTER IT IS COMPARED TO WHAT IS ALREADY ATTACHED
|
|
string[] getAttachableCharacterScripts(obj_id player)
|
|
{
|
|
HashSet theSet = new HashSet();
|
|
|
|
for(int i = 0; i < COMMON_SCRIPTS.length; i++)
|
|
{
|
|
if(findAttached(player, COMMON_SCRIPTS[i] ) == true)
|
|
{
|
|
theSet.add(COMMON_SCRIPTS[i]);
|
|
}
|
|
}
|
|
|
|
string[] menuArray = new string[theSet.size()];
|
|
theSet.toArray(menuArray);
|
|
Arrays.sort(menuArray);
|
|
return menuArray;
|
|
}
|
|
|
|
//COMMON_SCRIPTS "csr.get_resource_crate", "working.dantest", "player.player_gm", "gm.cmd"
|
|
boolean findAttached(obj_id player, string scriptAttached)
|
|
{
|
|
string[] arrayOfCurrentScripts = getCharacterScripts(player);
|
|
if (arrayOfCurrentScripts.length > -1)
|
|
{
|
|
for(int x = 0; x < arrayOfCurrentScripts.length; x++)
|
|
{
|
|
if(arrayOfCurrentScripts[x] == scriptAttached)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//THIS FUNCTION IS A GENERIC SCRIPT REMOVAL FUNCTION
|
|
void removePlayer(obj_id player, string err)
|
|
{
|
|
sendSystemMessageTestingOnly(player, err);
|
|
qa.removeScriptVars(player, SCRIPTVAR);
|
|
utils.removeScriptVarTree(player, SCRIPTVAR);
|
|
} |