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

476 lines
14 KiB
Plaintext

//************************************************************/
// 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);
}
}