Files
dsrc/sku.0/sys.server/compiled/game/script/test/qa_resource_reward.script
T

448 lines
12 KiB
Plaintext

/**
* 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<resourceAttribs.length; ++i)
{
string_id temp = new string_id("obj_attr_n", resourceAttribs[i].getName());
attribStrings = utils.addElement( attribStrings, "@" + temp + " = " + resourceAttribs[i].getValue());
}
int pid = sui.listbox(getSelf(), player, "Selecting this resource will create 100k units in your inventory.",
sui.OK_CANCEL, getResourceName(resource), attribStrings, "handleChooseResourceTypeStats", 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_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;
}