mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-28 22:15:54 -04:00
242 lines
7.2 KiB
Plaintext
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, "");
|
|
}
|
|
} |