/** * Copyright (c)2000-2002 Sony Online Entertainment Inc. * All Rights Reserved * * Title: test.qa_resource_reward.script * Description: Allows a tester to access the Resource Veteran Reward to get various resources for crafting. Most of the code for this script was borrowed from script/systems/veteran_reward/resource * @author $Author: James Michener$ * @version $Revision: 1.0.0$ */ include library.sui; include library.utils; include library.veteran_deprecated; include library.qa; /***** CONSTANTS *******************************************************/ const int RESOURCE_AMOUNT = 100000; const string ROOT_RESOURCE_CLASS = "resource"; const string ROOT_ORGANIC_CLASS = "organic"; const string ROOT_INORGANIC_CLASS = "inorganic"; const string RESOURCE_REWARD_TITLE = "QA Resource Reward Tool"; const string SCRIPTVAR_BASE_CLASS = "resource.base"; const string SCRIPTVAR_SUB_CLASSES = "resource.subclass"; const string SCRIPTVAR_TYPES = "resource.types"; const string SCRIPTVAR_RESOURCECHOSEN = "resource.resoucechosen"; const string_id SID_CHOOSE_CLASS = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "choose_class"); const string_id SID_CHOOSE_SUB_CLASS = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "choose_sub_class"); const string_id SID_CHOOSE_TYPE = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "choose_type"); const string_id SID_RESOURCE_NAME = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "resource_name"); /***** TRIGGERS ********************************************************/ trigger OnAttach() { if(!isGod(self)) { detachScript(self, "test.qa_resource_reward"); } else if(isGod(self)) { if(getGodLevel(self) < 10) { detachScript(self, "test.qa_resource_reward"); sendSystemMessage(self, "You do not have the appropriate access level to use this script.", null); } } return SCRIPT_CONTINUE; } trigger OnSpeaking(string text) { if(isGod(self)) { if ((toLower(text).equals("qarewardresource")) || (toLower(text).equals("qarewardresources"))) { chooseResourceClass(self, ROOT_RESOURCE_CLASS, true); return SCRIPT_OVERRIDE; } } return SCRIPT_CONTINUE; } /***************** Messagehandlers *********************/ messageHandler handleQATool() { if(isGod(self)) { obj_id player = sui.getPlayerId(params); int btn = sui.getIntButtonPressed(params); if(btn == sui.BP_CANCEL) { qa.qaToolMainMenu(self); utils.removeScriptVarTree(player, "qarewardresource"); return SCRIPT_CONTINUE; } if(btn == sui.BP_REVERT) { qa.qaToolMainMenu(self); utils.removeScriptVarTree(player, "qarewardresource"); return SCRIPT_CONTINUE; } else { chooseResourceClass(self, ROOT_RESOURCE_CLASS, true); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } messageHandler handleChooseResourceClass() { int bp = sui.getIntButtonPressed(params); switch (bp) { case sui.BP_OK : { string[] resourceClasses = self.getScriptVars().getStringArray(SCRIPTVAR_SUB_CLASSES); int rowSelected = sui.getListboxSelectedRow(params); if ( rowSelected >= 0 && rowSelected < resourceClasses.length) { chooseResourceClass(sui.getPlayerId(params), resourceClasses[rowSelected]); } else { // re display UI since they didn't select anything (or we got an invalid selection) string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); chooseResourceClass(sui.getPlayerId(params), resourceClass); } } break; case sui.BP_CANCEL : { string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); if( !resourceClass.equals(ROOT_ORGANIC_CLASS) && !resourceClass.equals(ROOT_INORGANIC_CLASS)) { chooseResourceClass(sui.getPlayerId(params), getResourceParentClass(resourceClass)); qa.qaToolMainMenu(self); } else { chooseResourceClass(sui.getPlayerId(params), getResourceParentClass(resourceClass), true); } } break; default: cleanup(); removePlayer(self,""); break; } return SCRIPT_CONTINUE; } messageHandler handleChooseResourceType() { int bp = sui.getIntButtonPressed(params); switch (bp) { case sui.BP_OK : { obj_id[] resourceTypes = self.getScriptVars().getObjIdArray(SCRIPTVAR_TYPES); int rowSelected = sui.getListboxSelectedRow(params); if ( rowSelected >= 0 && rowSelected < resourceTypes.length) { // display a SUI that shows resource stats showResourceStats(sui.getPlayerId(params), resourceTypes[rowSelected] ); } else { // re display UI since they didn't select anything (or we got an invalid selection) string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); chooseResourceClass(sui.getPlayerId(params), resourceClass); } } break; case sui.BP_CANCEL : { // go to previous screen unless we are at the first screen. // if it's the first screen, fallthrough to cleanup string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); if( resourceClass != ROOT_RESOURCE_CLASS ) { chooseResourceClass(sui.getPlayerId(params), getResourceParentClass(resourceClass)); break; } } default: cleanup(); removePlayer(self,""); break; } return SCRIPT_CONTINUE; } messageHandler handleChooseResourceTypeStats() { int bp = sui.getIntButtonPressed(params); switch (bp) { case sui.BP_OK : { obj_id resourceChosen = self.getScriptVars().getObjId(SCRIPTVAR_RESOURCECHOSEN); if (isIdValid(resourceChosen)) { obj_id player = sui.getPlayerId(params); obj_id crate = createResourceCrate(resourceChosen, RESOURCE_AMOUNT, utils.getInventoryContainer(player)); if (isIdValid(crate)) { sendSystemMessageTestingOnly(self, "The selected resource has been placed in your inventory"); } cleanup(); removePlayer(self,""); } else { // resource ID was invalid for some reason. Try redisplaying string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); chooseResourceClass(sui.getPlayerId(params), resourceClass); } } break; case sui.BP_CANCEL : { // go to previous screen unless we are at the first screen. // if it's the first screen, fallthrough to cleanup string resourceClass = self.getScriptVars().getString(SCRIPTVAR_BASE_CLASS); if(resourceClass != ROOT_RESOURCE_CLASS) { chooseResourceClass(sui.getPlayerId(params), getResourceParentClass(resourceClass)); break; } } default: cleanup(); removePlayer(self,""); break; } return SCRIPT_CONTINUE; } /*****************************FUNCTIONS***********************************/ // Displays the stats of the resource and allows player to confirm resource selection or go back to previous // script listing resource types based on parentClass void showResourceStats(obj_id player, obj_id resource) { if(!isIdValid(player)) { cleanup(); removePlayer(player,""); return; } if(!isIdValid(resource)) { cleanup(); removePlayer(player,""); return; } obj_id self = getSelf(); // get resource attributes array resource_attribute[] resourceAttribs = getResourceAttributes(resource); // setup a string array which will be filled with string elements that look like name = value pairs resizeable String[] attribStrings = new String[0]; // make sure we have something if(resourceAttribs == null) { cleanup(); removePlayer(player,""); return; } attribStrings = utils.addElement(attribStrings, "@"+SID_RESOURCE_NAME + " = " + getResourceName(resource)); // create readable strings that look like name = value pairs to fill listbox to display resource attributes for(int i=0; i= 0 ) { // redefine cancel as back sui.setSUIProperty(pid, sui.LISTBOX_BTN_CANCEL, sui.PROP_TEXT,"@back"); sui.showSUIPage(pid); getSelf().getScriptVars().put(SCRIPTVAR_RESOURCECHOSEN, resource); } else { cleanup(); removePlayer(player,""); } } /** * insert witty comment here */ void chooseResourceClass(obj_id player, String parentClass) { chooseResourceClass(player, parentClass, false); } /** * Shows a list of resource classes or types to the player, and lets them choose which one they want. */ void chooseResourceClass(obj_id player, String parentClass, boolean topLevel) { String[] resourceClasses = null; //did we come from the main menu? If so no more space resources or energy for you! if(topLevel) resourceClasses = filterTopLevelResourceList(parentClass); else resourceClasses = getImmediateResourceChildClasses(parentClass); if(resourceClasses == null) { cleanup(); removePlayer(player,""); return; } if(resourceClasses.length == 0) { //cleanup(); chooseResourceType(player, parentClass); return; } // filter out the resource classes with no resource type int goodResources = 0; for(int i = 0; i < resourceClasses.length; ++i) { if(!hasResourceType(resourceClasses[i])) resourceClasses[i] = null; else ++goodResources; } string[] temp = new string[goodResources]; goodResources = 0; for(int i = 0; i < resourceClasses.length; ++i) { if(resourceClasses[i] != null) temp[goodResources++] = resourceClasses[i]; } resourceClasses = temp; temp = null; String[] resourceClassNames = getResourceClassNames(resourceClasses); if(resourceClassNames == null) { cleanup(); removePlayer(player,""); return; } string prompt; if(parentClass == ROOT_RESOURCE_CLASS) prompt = "@" + SID_CHOOSE_CLASS; else prompt = "@" + SID_CHOOSE_SUB_CLASS + " " + getResourceClassName(parentClass); int pid = sui.listbox(getSelf(), player, prompt, sui.OK_CANCEL, RESOURCE_REWARD_TITLE, resourceClassNames, "handleChooseResourceClass", false, false); if(parentClass != ROOT_RESOURCE_CLASS && pid >= 0) { // set a back button sui.setSUIProperty(pid, sui.LISTBOX_BTN_CANCEL, sui.PROP_TEXT,"@back"); } if (pid >= 0) { sui.showSUIPage(pid); getSelf().getScriptVars().put(SCRIPTVAR_BASE_CLASS, parentClass); getSelf().getScriptVars().put(SCRIPTVAR_SUB_CLASSES, resourceClasses); } else cleanup(); removePlayer(player,""); } /** * Shows a list of types to the player, and lets them choose which one they want. */ void chooseResourceType(obj_id player, String parentClass) { obj_id[] resourceTypes = getResourceTypes(parentClass); if(resourceTypes == null || resourceTypes.length == 0) { cleanup(); removePlayer(player,""); return; } string[] typeNames = getResourceNames(resourceTypes); if(typeNames == null || typeNames.length == 0) { cleanup(); removePlayer(player,""); return; } int pid = sui.listbox(getSelf(), player, "@" + SID_CHOOSE_TYPE + " " + getResourceClassName(parentClass), sui.OK_CANCEL, RESOURCE_REWARD_TITLE, typeNames, "handleChooseResourceType", false, false); if(pid >= 0) { // redefine cancel as back sui.setSUIProperty(pid, sui.LISTBOX_BTN_CANCEL, sui.PROP_TEXT,"@back"); sui.showSUIPage(pid); getSelf().getScriptVars().put(SCRIPTVAR_BASE_CLASS, parentClass); getSelf().getScriptVars().put(SCRIPTVAR_TYPES, resourceTypes); } else { cleanup(); removePlayer(player,""); } } /** * Remove the scriptvars we use */ void cleanup() { getSelf().getScriptVars().remove(SCRIPTVAR_BASE_CLASS); getSelf().getScriptVars().remove(SCRIPTVAR_SUB_CLASSES); getSelf().getScriptVars().remove(SCRIPTVAR_TYPES); getSelf().getScriptVars().remove(SCRIPTVAR_RESOURCECHOSEN); } void removePlayer(obj_id player, string err) { sendSystemMessageTestingOnly(player, err); qa.removeScriptVars(player, "qarewardresource"); } string [] filterTopLevelResourceList(String parentClass) { String[] resourceClasses = null; //OMG SYNTAX NIGHTMARE!! String [] tempResourceClass = getImmediateResourceChildClasses(parentClass); Vector tempResourceClassTwo = null; for(int x = 0; x < tempResourceClass.length; ++x) { if(tempResourceClass[x] != "energy" && tempResourceClass[x] != "space_resource") tempResourceClassTwo = utils.addElement(tempResourceClassTwo, tempResourceClass[x]); } resourceClasses = new String[tempResourceClassTwo.size()]; tempResourceClassTwo.toArray (resourceClasses); return resourceClasses; }