mirror of
https://bitbucket.org/seefoe/dsrc.git
synced 2026-07-31 01:15:55 -04:00
470 lines
14 KiB
Plaintext
470 lines
14 KiB
Plaintext
//************************************************************/
|
|
// 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.
|
|
//************************************************************/
|
|
|
|
/********* 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);
|
|
}
|
|
}
|