//************************************************************/ // Title: qa_dynamic.script // Description: Dynamic Loot Tool //************************************************************/ /********* 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, ""); } }