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