//************************************************************/ // Copyright (c) ©2000,2001 Sony Online Entertainment Inc. // All Rights Reserved // // Title: qa_weapon.script // Description: These weapons have a set damage amount instead of a damage range. // Notes: All Weapons created by this tool will have the following: // 1. Weapons will have a required combat level of 1 - this is to ensure entertainers and traders can use them. // 2. Weapons will have the appropriate speeds for their weapon class - pistols = 0.4/carbine = 0.6/rifle = 0.8/melee = 1.0 // 3. Weapons will be set to noTrade - precautionary measure. // 4. Weapons will have Min/Max damage that are the same, example, Min Damage = 100 && Max Damage = 100. // // @author $Author: James Michener $ // @version $1.0.0$ //************************************************************/ /********* Includes ******************************************/ include library.utils; include library.qa; include library.sui; /********* CONSTANTS *****************************************/ const string SCRIPTVAR = "qaweapon"; const string[] WEAPON_DAMAGE = {"1", "10", "50", "100", "500", "1000", "5000"}; const string[] WEAPON_ELEMENT_TYPE = {"None", "Heat", "Cold", "Acid", "Electric"}; const string[] WEAPON_TYPE = {"Pistol", "Carbine", "Rifle", "Unarmed", "1-Handed", "2-Handed", "Polearm", "Heavy Weapon", "Flame Thrower"}; const int PISTOL = 0; const int CARBINE = 1; const int RIFLE = 2; const int UNARMED = 3; const int ONE_HANDED = 4; const int TWO_HANDED = 5; const int POLEARM = 6; const int HEAVY = 7; const int FLAMETHROWER = 8; const int DAMAGE_1 = 0; const int DAMAGE_10 = 1; const int DAMAGE_50 = 2; const int DAMAGE_100 = 3; const int DAMAGE_500 = 4; const int DAMAGE_1000 = 5; const int DAMAGE_5000 = 6; const int ELEMENT_0 = 0; const int ELEMENT_32 = 1; const int ELEMENT_64 = 2; const int ELEMENT_128 = 3; const int ELEMENT_256 = 4; /********* Triggers ******************************************/ trigger OnAttach() { if(isGod(self)) { if(getGodLevel(self) < 10) { detachScript(self, "test.qaweapon"); sendSystemMessage(self, "You do not have the appropriate access level to use this script.", null); } } else if(!isGod(self)) { detachScript(self, "test.qaweapon"); } return SCRIPT_CONTINUE; } trigger OnSpeaking(string text) { if(isGod(self)) { if(toLower(text).equals(SCRIPTVAR)) { weaponTypeMenu(self); return SCRIPT_OVERRIDE; } } return SCRIPT_CONTINUE; } /***** MESSAGEHANDLERS *************************************************/ messageHandler handleWeaponTypeOptions() { 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) { qa.qaToolMainMenu(player); utils.removeScriptVarTree(player, SCRIPTVAR); return SCRIPT_CONTINUE; } int idx = sui.getListboxSelectedRow(params); if(idx < 0) { qa.removePlayer(player, SCRIPTVAR, ""); return SCRIPT_CONTINUE; } switch(idx) { case PISTOL: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Pistol"); weaponDamageMenu(player); break; case CARBINE: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Carbine"); weaponDamageMenu(player); break; case RIFLE: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Rifle"); weaponDamageMenu(player); break; case UNARMED: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Unarmed"); weaponDamageMenu(player); break; case ONE_HANDED: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "1-Handed"); weaponDamageMenu(player); break; case TWO_HANDED: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "2-Handed"); weaponDamageMenu(player); break; case POLEARM: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Polearm"); weaponDamageMenu(player); break; case HEAVY: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Heavy Weapon"); weaponDamageMenu(player); break; case FLAMETHROWER: utils.setScriptVar(player, SCRIPTVAR+".weaponTypeChoice", "Flame Thrower"); weaponDamageMenu(player); break; default: qa.removePlayer(player, SCRIPTVAR, "There was an error with your selection, Please try again."); weaponTypeMenu(self); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } messageHandler handleWeaponLevelOptions() { 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) { weaponTypeMenu(player); return SCRIPT_CONTINUE; } int idx = sui.getListboxSelectedRow(params); if(idx < 0) { qa.removePlayer(player, SCRIPTVAR, ""); return SCRIPT_CONTINUE; } switch(idx) { case DAMAGE_1: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 1); elementalTypeMenu(player); break; case DAMAGE_10: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 10); elementalTypeMenu(player); break; case DAMAGE_50: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 50); elementalTypeMenu(player); break; case DAMAGE_100: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 100); elementalTypeMenu(player); break; case DAMAGE_500: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 500); elementalTypeMenu(player); break; case DAMAGE_1000: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 1000); elementalTypeMenu(player); break; case DAMAGE_5000: utils.setScriptVar(player, SCRIPTVAR+".damageChoice", 5000); elementalTypeMenu(player); break; default: qa.removePlayer(player, SCRIPTVAR, "There was an error with your selection, Please try again."); weaponTypeMenu(self); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } messageHandler handleWeaponElementalOptions() { 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) { weaponDamageMenu(player); return SCRIPT_CONTINUE; } int idx = sui.getListboxSelectedRow(params); if(idx < 0) { qa.removePlayer(player, SCRIPTVAR, ""); return SCRIPT_CONTINUE; } switch(idx) { case ELEMENT_0: utils.setScriptVar(player, SCRIPTVAR+".elementChoice", 0); createQAWeapon(player); break; case ELEMENT_32: utils.setScriptVar(player, SCRIPTVAR+".elementChoice", 32); elementalDamageMenu(player); break; case ELEMENT_64: utils.setScriptVar(player, SCRIPTVAR+".elementChoice", 64); elementalDamageMenu(player); break; case ELEMENT_128: utils.setScriptVar(player, SCRIPTVAR+".elementChoice", 128); elementalDamageMenu(player); break; case ELEMENT_256: utils.setScriptVar(player, SCRIPTVAR+".elementChoice", 256); elementalDamageMenu(player); break; default: qa.removePlayer(player, SCRIPTVAR, "There was an error with your selection, Please try again."); weaponTypeMenu(self); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } messageHandler handleWeaponElementalDamage() { 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) { elementalTypeMenu(player); return SCRIPT_CONTINUE; } int idx = sui.getListboxSelectedRow(params); if(idx < 0) { qa.removePlayer(player, SCRIPTVAR, ""); return SCRIPT_CONTINUE; } switch(idx) { case DAMAGE_1: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 1); createQAWeapon(player); break; case DAMAGE_10: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 10); createQAWeapon(player); break; case DAMAGE_50: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 50); createQAWeapon(player); break; case DAMAGE_100: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 100); createQAWeapon(player); break; case DAMAGE_500: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 500); createQAWeapon(player); break; case DAMAGE_1000: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 1000); createQAWeapon(player); break; case DAMAGE_5000: utils.setScriptVar(player, SCRIPTVAR+".elementalDamage", 5000); createQAWeapon(player); break; default: qa.removePlayer(player, SCRIPTVAR, "There was an error with your selection, Please try again."); weaponTypeMenu(self); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } /***** FUNCTIONS *******************************************************/ //BUILDS THE MAIN TOOL MENU void weaponTypeMenu(obj_id player) { qa.refreshMenu(player, "-Weapon Type Select Menu-\nChoose the type of weapon you wish to use for testing.", "QA Test Weapon Tool", WEAPON_TYPE, "handleWeaponTypeOptions", SCRIPTVAR+".pid", SCRIPTVAR+".weaponTypeMenu", sui.OK_CANCEL_REFRESH); } void weaponDamageMenu(obj_id player) { qa.refreshMenu(player, "-Weapon Damage Select Menu-\nSelect the amount of damage you want the weapon to have.\nNOTE: The Min/Max damage of all weapons will be the same.", "QA Test Weapon Tool", WEAPON_DAMAGE, "handleWeaponLevelOptions", SCRIPTVAR+".pid", SCRIPTVAR+".damageMenu", sui.OK_CANCEL_REFRESH); } void elementalTypeMenu(obj_id player) { qa.refreshMenu(player, "-Weapon Damage Select Menu-\nSelect the elemental damage type you want the weapon to use.", "QA Test Weapon Tool", WEAPON_ELEMENT_TYPE, "handleWeaponElementalOptions", SCRIPTVAR+".pid", SCRIPTVAR+".elementalTypeMenu", sui.OK_CANCEL_REFRESH); } void elementalDamageMenu(obj_id player) { qa.refreshMenu(player, "-Weapon Damage Select Menu-\nSelect the amount of elemental damage you want add to the weapon.\nNOTE: The Min/Max damage of all weapons will be the same.", "QA Test Weapon Tool", WEAPON_DAMAGE, "handleWeaponElementalDamage", SCRIPTVAR+".pid", SCRIPTVAR+".elementalTypeMenu", sui.OK_CANCEL_REFRESH); } void checkInventory(obj_id player) { // get player inventory obj_id inventory = utils.getInventoryContainer(player); // get array of items in player inventory obj_id[] invItems = getContents(inventory); // test for room in backpack if(invItems.length > 79) { // system message: no room in inventory sendSystemMessageTestingOnly(player, "You do not have enough space in your inventory, please delete some items and try again."); } } void createQAWeapon(obj_id player) { if(utils.hasScriptVar(player, SCRIPTVAR+".damageChoice") && utils.hasScriptVar(player, SCRIPTVAR+".weaponTypeChoice")) { //get tester's inventory and check for space. obj_id inventory = utils.getInventoryContainer(player); checkInventory(player); //get the Tester's Damage Choice int intDamage = utils.getIntScriptVar(player, SCRIPTVAR+".damageChoice"); int intElementalType = utils.getIntScriptVar(player, SCRIPTVAR+".elementChoice"); int intElementalDamage = utils.getIntScriptVar(player, SCRIPTVAR+".elementalDamage"); float speed = 0.00f; string weaponObject = ""; //get the Tester's Weapon Choice and set the weapon speed. string weaponType = utils.getStringScriptVar(player, SCRIPTVAR+".weaponTypeChoice"); if(weaponType == "Pistol") { speed = 0.40f; weaponObject = "object/weapon/ranged/pistol/pistol_cdef.iff"; } else if(weaponType == "Carbine") { speed = 0.60f; weaponObject = "object/weapon/ranged/carbine/carbine_cdef.iff"; } else if(weaponType == "Rifle") { speed = 0.80f; weaponObject = "object/weapon/ranged/rifle/rifle_cdef.iff"; } if(weaponType == "Flame Thrower") { speed = 0.25f; weaponObject = "object/weapon/ranged/rifle/rifle_flame_thrower.iff"; } else if(weaponType == "Unarmed" || weaponType == "1-Handed" || weaponType == "2-Handed" || weaponType == "Polearm" || weaponType == "Heavy Weapon") { speed = 1.00f; if(weaponType == "Heavy Weapon") { weaponObject = "object/weapon/ranged/heavy/heavy_rocket_launcher.iff"; } else if(weaponType == "Unarmed") { weaponObject = "object/weapon/melee/special/vibroknuckler.iff"; } else if(weaponType == "1-Handed") { weaponObject = "object/weapon/melee/knife/knife_dagger.iff"; } else if(weaponType == "2-Handed") { weaponObject = "object/weapon/melee/2h_sword/2h_sword_cleaver.iff"; } else if(weaponType == "Polearm") { weaponObject = "object/weapon/melee/polearm/lance_staff_wood_s1.iff"; } } //create the item in the tester's inventory obj_id newObj = createObject(weaponObject, inventory, ""); //set values on the item that was created. setObjVar(newObj, "dynamic_item.intLevelRequired", 1); setObjVar(newObj, "noTrade", true); //set an objvar for the sole purpose of bypassing the weapon conversion setObjVar(newObj, "QAWeapon", 1); setWeaponAttackSpeed(newObj, speed); setWeaponMaxDamage(newObj, intDamage); setWeaponMinDamage(newObj, intDamage); setName(newObj, "QA Weapon - Testing Use Only"); if(intElementalType > 0) { setWeaponElementalDamage(newObj, intElementalType, intElementalDamage); } //inform the tester that the item has been placed in their backpack. sendSystemMessageTestingOnly(player, "The QAWeapon has been placed in your backpack."); qa.removePlayer(player, SCRIPTVAR, ""); } else { sendSystemMessageTestingOnly(player, "There was an error with the QA Test Weapon Tool - Please Try Again."); qa.removePlayer(player, SCRIPTVAR, ""); weaponTypeMenu(player); } }