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

242 lines
7.2 KiB
Plaintext

//************************************************************/
// Copyright (c) ©2000,2001 Sony Online Entertainment Inc.
// All Rights Reserved
//
// Title: qa_dynamic.script
// Description: Dynamic Loot Tool
// @author $Author: James Michener $
// @version $1.0.2$
//************************************************************/
/********* Includes ******************************************/
include library.utils;
include library.qa;
include library.sui;
include library.static_item;
/********* CONSTANTS *****************************************/
const string SCRIPTVAR = "qadynamic";
const string DYNAMIC_DESCRIPTION = "This tool allows a tester to spawn armor, clothing and weapons based on a selected level. The items spawned resemble what a player would find on a mob in-game as random loot.";
const string[] DATA_SOURCE_MENU_LIST =
{
"spawn dynamic armor",
"spawn dynamic clothing",
"spawn dynamic weapons"
};
const int DYNAMIC_ARMOR = 0;
const int DYNAMIC_CLOTHING = 1;
const int DYNAMIC_WEAPONS = 2;
/*********************Data Sources****************************/
const string DYNAMIC_ARMOR_TABLE = "datatables/item/dynamic_item/types/armor.iff";
const string DYNAMIC_CLOTHING_TABLE = "datatables/item/dynamic_item/types/clothing.iff";
const string DYNAMIC_WEAPONS_TABLE = "datatables/item/dynamic_item/types/weapons.iff";
/********* Triggers ******************************************/
trigger OnAttach()
{
if (isGod(self))
{
if(getGodLevel(self) < 10)
{
detachScript(self, "test.qa_dynamic");
sendSystemMessage(self, "You do not have the appropriate access level to use this script.", null);
}
}
else if (!isGod(self))
{
detachScript(self, "test.qa_dynamic");
}
return SCRIPT_CONTINUE;
}
trigger OnSpeaking(string text)
{
if (isGod(self))
{
if (toLower(text).equals(SCRIPTVAR))
{
//FUNCTION TO SHOW THE MAIN MENU OF THE TOOL
toolArmorMainMenu(self);
return SCRIPT_OVERRIDE;
}
}
return SCRIPT_CONTINUE;
}
/***** MESSAGEHANDLERS *************************************************/
//Armor Type Options
messageHandler handleMainOptions()
{
if (isGod(self))
{
obj_id player = sui.getPlayerId(params);
int btn = sui.getIntButtonPressed(params);
int idx = sui.getListboxSelectedRow(params);
if (btn == sui.BP_CANCEL)
{
qa.removePlayer(player, SCRIPTVAR, "");
return SCRIPT_CONTINUE;
}
if(btn == sui.BP_REVERT)
{
qa.qaToolMainMenu(self);
utils.removeScriptVarTree(player,SCRIPTVAR);
return SCRIPT_CONTINUE;
}
if (idx < 0)
{
qa.removePlayer(player, SCRIPTVAR, "");
return SCRIPT_CONTINUE;
}
switch (idx)
{
case DYNAMIC_ARMOR:
utils.setScriptVar(player, SCRIPTVAR+".dynamicChoice", DYNAMIC_ARMOR_TABLE);
sui.inputbox(player, player, "Enter the Armor Level.", "handleLevelSelect");
break;
case DYNAMIC_CLOTHING:
utils.setScriptVar(player, SCRIPTVAR+".dynamicChoice", DYNAMIC_CLOTHING_TABLE);
sui.inputbox(player, player, "Enter the Clothing Level.", "handleLevelSelect");
break;
case DYNAMIC_WEAPONS:
utils.setScriptVar(player, SCRIPTVAR+".dynamicChoice", DYNAMIC_WEAPONS_TABLE);
sui.inputbox(player, player, "Enter the Weapon Level.", "handleLevelSelect");
break;
default:
qa.qaToolMainMenu(self);
qa.removePlayer(player, SCRIPTVAR, "This Armor is not currently available.");
return SCRIPT_CONTINUE;
}
}
return SCRIPT_CONTINUE;
}
messageHandler handleLevelSelect()
{
if(utils.hasScriptVar(self, SCRIPTVAR+".dynamicChoice"))
{
obj_id player = sui.getPlayerId(params);
string text = sui.getInputBoxText(params);
int level = utils.stringToInt(text);
if (level < 1 || level > 90)
{
sendSystemMessageTestingOnly(player, "Invalid level entered!");
}
else
{
utils.setScriptVar(player, SCRIPTVAR+".dynamicLevel", level);
getColumnToDisplay(player);
}
}
else
{
sendSystemMessageTestingOnly(self, "There was an error with the previous selection - please try again");
qa.removePlayer(self, SCRIPTVAR, "");
}
return SCRIPT_CONTINUE;
}
messageHandler handleDynamicSpawn()
{
if (isGod(self))
{
obj_id player = sui.getPlayerId(params);
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
qa.removePlayer(player, SCRIPTVAR, "");
return SCRIPT_CONTINUE;
}
if(btn == sui.BP_REVERT)
{
toolArmorMainMenu(player);
utils.removeScriptVarTree(player,SCRIPTVAR);
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
qa.removePlayer(player, SCRIPTVAR, "");
return SCRIPT_CONTINUE;
}
if(utils.hasScriptVar(player, SCRIPTVAR+".listTracking"))
{
string[] dataTableNameColumn = utils.getStringArrayScriptVar(player, SCRIPTVAR+".listTracking");
string spawnNameChoice = dataTableNameColumn[idx];
createStatics(player, spawnNameChoice);
}
else
{
sendSystemMessageTestingOnly(player, "There was an error with the previous selection - please try again");
qa.removePlayer(player, SCRIPTVAR, "");
}
}
return SCRIPT_CONTINUE;
}
/***** FUNCTIONS *******************************************************/
//BUILDS DYNAMIC SPAWN CHOICES FROM THE SELECTED DATATABLE
void columnNamesDisplay(obj_id player, string[] dataTableNames)
{
qa.refreshMenu(player, DYNAMIC_DESCRIPTION, "Dynamic Spawner", dataTableNames, "handleDynamicSpawn", SCRIPTVAR+".pid", SCRIPTVAR+".columnsMenu", sui.OK_CANCEL_REFRESH);
}
//BUILDS THE DYNAMIC TOOL MAIN MENU
void toolArmorMainMenu(obj_id player)
{
qa.refreshMenu(player, DYNAMIC_DESCRIPTION, "Dynamic Spawner", DATA_SOURCE_MENU_LIST, "handleMainOptions", SCRIPTVAR+".pid", SCRIPTVAR+".dynamicMainMenu", sui.OK_CANCEL_REFRESH);
}
void getColumnToDisplay(obj_id player)
{
/*********************Datatable*****************************/
string[] dataTableNameColumn = dataTableGetStringColumn(utils.getStringScriptVar(player, SCRIPTVAR+".dynamicChoice"), "strName");
Arrays.sort(dataTableNameColumn);
if(dataTableNameColumn.length >= 1)
{
utils.setScriptVar(player, SCRIPTVAR+".listTracking", dataTableNameColumn);
columnNamesDisplay(player, dataTableNameColumn);
}
else
{
sendSystemMessageTestingOnly(player, "An error has occurred, please contact the Tool Team.");
qa.removePlayer(player, SCRIPTVAR, "");
}
}
void createStatics(obj_id player, string spawnNameChoice)
{
//get player inventory
obj_id inventory = utils.getInventoryContainer(player);
//ensure the tester has this scriptvar before continuing
if(utils.hasScriptVar(player, SCRIPTVAR+".dynamicLevel"))
{
int chosenLevel = utils.getIntScriptVar(player, SCRIPTVAR+".dynamicLevel");
int number = 40;
for(int i = 0; i < number; i++)
{
obj_id myObj = static_item.makeDynamicObject(spawnNameChoice, inventory, chosenLevel);
}
//QABag function - checks inventory for QABag - if not - creates one.
qa.findOrCreateAndEquipQABag(player, inventory, true);
sendSystemMessageTestingOnly(player, "Spawning of dynamic items is complete");
qa.removePlayer(player, SCRIPTVAR, "");
}
else
{
sendSystemMessageTestingOnly(player, "There was an error with the previous selection - please try again");
qa.removePlayer(player, SCRIPTVAR, "");
}
}