Files
dsrc/sku.0/sys.server/compiled/game/script/test/qascript.script
T
2013-09-10 23:17:15 -07:00

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