mirror of
https://bitbucket.org/seefoe/dsrc.git
synced 2026-07-31 01:15:55 -04:00
You can now rename your beast as much as you would like. Police officers will no longer harass corpses. Static NPC's conversing will now successfully converse with one another. When a player dies, the pet will go invulnerable and be immediately packed up. When respecing professions, your weapon will now be unequiped. Fixed the chat system for some NPC's. You can now only mount your vehicle from less than 5 meters. Quest items that can be clicked on cannot be used from less than 5 meters. Added a message to the QaSetup script, notifying the QA that they have received their items.
1648 lines
60 KiB
Plaintext
1648 lines
60 KiB
Plaintext
//**********************************************************
|
|
// Title: qasetup.script
|
|
// Version: Version 1.00
|
|
// Description: QA Character Setup Tool
|
|
// - Lets the user select one of several predefined expertise templates
|
|
// - Sets the character to level 90 and grants the expertise setup
|
|
// - Outfits the character with modded armor, weapons, clothes and jewelry
|
|
// - Creates powerups and GCW base stims
|
|
// - In addition the tool can instantly grant the character buffs equivilant to that of a high end player
|
|
//***********************************************************
|
|
/*
|
|
Todo list
|
|
Restructure Armor generation to combine recon, battle and assault armor into one method
|
|
Create more 'generic' item packages for weapon / equipment (instead of creating most items in the initial call)
|
|
*/
|
|
|
|
/***** INCLUDES ********************************************************/
|
|
include library.armor;
|
|
include library.skill;
|
|
include library.utils;
|
|
include library.create;
|
|
include library.respec;
|
|
include library.static_item;
|
|
include library.skill_template;
|
|
|
|
include java.util.HashSet;
|
|
include java.util.StringTokenizer;
|
|
include java.util.Vector;
|
|
include java.util.Arrays;
|
|
include library.qa;
|
|
include library.sui;
|
|
include library.utils;
|
|
include library.pclib;
|
|
include library.weapons;
|
|
include library.skill;
|
|
include library.gm;
|
|
include library.respec;
|
|
include library.buff;
|
|
include library.performance;
|
|
|
|
/********************************************* CONSTANTS *******************************************************/
|
|
const float CONDITION = 1.0f; //variable has no effect on gameplay since the removal of decay.
|
|
const float GENERAL_PROTECTION = 1.0f; //general protection on armor range from 0 - 1.0
|
|
|
|
/****************************************** ARMOR AND ITEM TEMPLATES ****************************************/
|
|
|
|
const string ARMOR_SET_PREFIX = "object/tangible/wearables/armor/";
|
|
const string[] ARMOR_SET_ASSAULT_1 = {
|
|
"composite/armor_composite_bicep_l.iff",
|
|
"composite/armor_composite_chest_plate.iff",
|
|
"composite/armor_composite_bicep_r.iff",
|
|
"composite/armor_composite_gloves.iff",
|
|
"composite/armor_composite_boots.iff",
|
|
"composite/armor_composite_helmet.iff",
|
|
"composite/armor_composite_bracer_l.iff",
|
|
"composite/armor_composite_leggings.iff",
|
|
"composite/armor_composite_bracer_r.iff"
|
|
};
|
|
const string[] ARMOR_SET_ASSAULT_2 = {
|
|
"chitin/armor_chitin_s01_bicep_l.iff",
|
|
"chitin/armor_chitin_s01_bicep_r.iff",
|
|
"chitin/armor_chitin_s01_boots.iff",
|
|
"chitin/armor_chitin_s01_bracer_l.iff",
|
|
"chitin/armor_chitin_s01_bracer_r.iff",
|
|
"chitin/armor_chitin_s01_chest_plate.iff",
|
|
"chitin/armor_chitin_s01_gloves.iff",
|
|
"chitin/armor_chitin_s01_helmet.iff",
|
|
"chitin/armor_chitin_s01_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_ASSAULT_3 = {
|
|
"marauder/armor_marauder_s03_bicep_l.iff",
|
|
"marauder/armor_marauder_s03_bicep_r.iff",
|
|
"marauder/armor_marauder_s03_boots.iff",
|
|
"marauder/armor_marauder_s03_bracer_l.iff",
|
|
"marauder/armor_marauder_s03_bracer_r.iff",
|
|
"marauder/armor_marauder_s03_chest_plate.iff",
|
|
"marauder/armor_marauder_s03_gloves.iff",
|
|
"marauder/armor_marauder_s03_helmet.iff",
|
|
"marauder/armor_marauder_s03_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_ASSAULT_4 = {
|
|
"bounty_hunter/armor_bounty_hunter_crafted_bicep_l.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_bicep_r.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_boots.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_bracer_l.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_bracer_r.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_chest_plate.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_gloves.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_helmet.iff",
|
|
"bounty_hunter/armor_bounty_hunter_crafted_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_1 = {
|
|
"bone/armor_bone_s01_bicep_l.iff",
|
|
"bone/armor_bone_s01_bicep_r.iff",
|
|
"bone/armor_bone_s01_boots.iff",
|
|
"bone/armor_bone_s01_bracer_l.iff",
|
|
"bone/armor_bone_s01_bracer_r.iff",
|
|
"bone/armor_bone_s01_chest_plate.iff",
|
|
"bone/armor_bone_s01_gloves.iff",
|
|
"bone/armor_bone_s01_helmet.iff",
|
|
"bone/armor_bone_s01_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_2 = {
|
|
"marauder/armor_marauder_s01_bicep_l.iff",
|
|
"marauder/armor_marauder_s01_bicep_r.iff",
|
|
"marauder/armor_marauder_s01_boots.iff",
|
|
"marauder/armor_marauder_s01_bracer_l.iff",
|
|
"marauder/armor_marauder_s01_bracer_r.iff",
|
|
"marauder/armor_marauder_s01_chest_plate.iff",
|
|
"marauder/armor_marauder_s01_gloves.iff",
|
|
"marauder/armor_marauder_s01_helmet.iff",
|
|
"marauder/armor_marauder_s01_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_3 = {
|
|
"padded/armor_padded_s01_bicep_l.iff",
|
|
"padded/armor_padded_s01_bicep_r.iff",
|
|
"padded/armor_padded_s01_boots.iff",
|
|
"padded/armor_padded_s01_bracer_l.iff",
|
|
"padded/armor_padded_s01_bracer_r.iff",
|
|
"padded/armor_padded_s01_chest_plate.iff",
|
|
"padded/armor_padded_s01_gloves.iff",
|
|
"padded/armor_padded_s01_helmet.iff",
|
|
"padded/armor_padded_s01_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_4 = {
|
|
"ris/armor_ris_bicep_l.iff",
|
|
"ris/armor_ris_bracer_l.iff",
|
|
"ris/armor_ris_gloves.iff",
|
|
"ris/armor_ris_bicep_r.iff",
|
|
"ris/armor_ris_bracer_r.iff",
|
|
"ris/armor_ris_helmet.iff",
|
|
"ris/armor_ris_boots.iff",
|
|
"ris/armor_ris_chest_plate.iff",
|
|
"ris/armor_ris_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_1 = {
|
|
"zam/armor_zam_wesell_helmet.iff",
|
|
"zam/armor_zam_wesell_boots.iff",
|
|
"zam/armor_zam_wesell_chest_plate.iff",
|
|
"zam/armor_zam_wesell_pants.iff",
|
|
"zam/armor_zam_wesell_gloves.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_2 = {
|
|
"marauder/armor_marauder_s02_bicep_l.iff",
|
|
"marauder/armor_marauder_s02_bicep_r.iff",
|
|
"marauder/armor_marauder_s02_boots.iff",
|
|
"marauder/armor_marauder_s02_bracer_l.iff",
|
|
"marauder/armor_marauder_s02_bracer_r.iff",
|
|
"marauder/armor_marauder_s02_chest_plate.iff",
|
|
"marauder/armor_marauder_s02_gloves.iff",
|
|
"marauder/armor_marauder_s02_helmet.iff",
|
|
"marauder/armor_marauder_s02_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_3 = {
|
|
"tantel/armor_tantel_skreej_bicep_l.iff",
|
|
"tantel/armor_tantel_skreej_chest_plate.iff",
|
|
"tantel/armor_tantel_skreej_bicep_r.iff",
|
|
"tantel/armor_tantel_skreej_boots.iff",
|
|
"tantel/armor_tantel_skreej_gloves.iff",
|
|
"tantel/armor_tantel_skreej_helmet.iff",
|
|
"tantel/armor_tantel_skreej_bracer_l.iff",
|
|
"tantel/armor_tantel_skreej_bracer_r.iff",
|
|
"tantel/armor_tantel_skreej_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_4 = {
|
|
"ubese/armor_ubese_boots.iff",
|
|
"ubese/armor_ubese_jacket.iff",
|
|
"ubese/armor_ubese_bracer_l.iff",
|
|
"ubese/armor_ubese_bracer_r.iff",
|
|
"ubese/armor_ubese_pants.iff",
|
|
"ubese/armor_ubese_gloves.iff",
|
|
"ubese/armor_ubese_helmet.iff",
|
|
"ubese/armor_ubese_shirt.iff"
|
|
};
|
|
|
|
// Disabled for now. Tool will not support Ithorian and Wookies
|
|
/*
|
|
const string[] ARMOR_SET_ASSAULT_ITHORIAN = {
|
|
"ithorian_sentinel/ith_armor_s03_bicep_l.iff",
|
|
"ithorian_sentinel/ith_armor_s03_chest_plate.iff",
|
|
"ithorian_sentinel/ith_armor_s03_bicep_r.iff",
|
|
"ithorian_sentinel/ith_armor_s03_gloves.iff",
|
|
"ithorian_sentinel/ith_armor_s03_boots.iff",
|
|
"ithorian_sentinel/ith_armor_s03_helmet.iff",
|
|
"ithorian_sentinel/ith_armor_s03_bracer_l.iff",
|
|
"ithorian_sentinel/ith_armor_s03_leggings.iff",
|
|
"ithorian_sentinel/ith_armor_s03_bracer_r.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_ITHORIAN = {
|
|
"ithorian_defender/ith_armor_s01_bicep_l.iff",
|
|
"ithorian_defender/ith_armor_s01_chest_plate.iff",
|
|
"ithorian_defender/ith_armor_s01_bicep_r.iff",
|
|
"ithorian_defender/ith_armor_s01_gloves.iff",
|
|
"ithorian_defender/ith_armor_s01_boots.iff",
|
|
"ithorian_defender/ith_armor_s01_helmet.iff",
|
|
"ithorian_defender/ith_armor_s01_bracer_l.iff",
|
|
"ithorian_defender/ith_armor_s01_leggings.iff",
|
|
"ithorian_defender/ith_armor_s01_bracer_r.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_ITHORIAN = {
|
|
"ithorian_guardian/ith_armor_s02_bicep_l.iff",
|
|
"ithorian_guardian/ith_armor_s02_chest_plate.iff",
|
|
"ithorian_guardian/ith_armor_s02_bicep_r.iff",
|
|
"ithorian_guardian/ith_armor_s02_gloves.iff",
|
|
"ithorian_guardian/ith_armor_s02_boots.iff",
|
|
"ithorian_guardian/ith_armor_s02_helmet.iff",
|
|
"ithorian_guardian/ith_armor_s02_bracer_l.iff",
|
|
"ithorian_guardian/ith_armor_s02_leggings.iff",
|
|
"ithorian_guardian/ith_armor_s02_bracer_r.iff"
|
|
};
|
|
const string[] ARMOR_SET_ASSAULT_WOOKIEE = {
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_bicep_l.iff",
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_bicep_r.iff",
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_bracer_l.iff",
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_bracer_r.iff",
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_chestplate.iff",
|
|
"kashyyykian_hunting/armor_kashyyykian_hunting_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_BATTLE_WOOKIEE = {
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bicep_l.iff",
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bicep_r.iff",
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bracer_l.iff",
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bracer_r.iff",
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_chestplate.iff",
|
|
"kashyyykian_black_mtn/armor_kashyyykian_black_mtn_leggings.iff"
|
|
};
|
|
const string[] ARMOR_SET_RECON_WOOKIEE = {
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bicep_l.iff",
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bicep_r.iff",
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bracer_l.iff",
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bracer_r.iff",
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_chestplate.iff",
|
|
"kashyyykian_ceremonial/armor_kashyyykian_ceremonial_leggings.iff"
|
|
};
|
|
*/
|
|
|
|
const string[] CLOTHES = {
|
|
"object/tangible/wearables/shirt/shirt_s03.iff",
|
|
"object/tangible/wearables/pants/pants_s05.iff",
|
|
"object/tangible/wearables/gloves/gloves_s14.iff",
|
|
"object/tangible/wearables/boots/boots_s05.iff",
|
|
"object/tangible/wearables/ring/ring_s04.iff",
|
|
"object/tangible/wearables/ring/ring_s04.iff",
|
|
"object/tangible/wearables/bracelet/bracelet_s04_l.iff",
|
|
"object/tangible/wearables/bracelet/bracelet_s04_r.iff",
|
|
"object/tangible/wearables/necklace/necklace_s01.iff"
|
|
|
|
};
|
|
|
|
|
|
const string[] POWERUP_ITEMS = { "item_reverse_engineering_powerup_armor_02_01",
|
|
"item_reverse_engineering_powerup_clothing_02_01",
|
|
"item_reverse_engineering_powerup_weapon_02_01"
|
|
};
|
|
|
|
// Weapon Values
|
|
const float WEAPON_SPEED = 1.0f;
|
|
const float WEAPON_DAMAGE = 1.0f;
|
|
const float WEAPON_ELEMENTAL = 1.0f;
|
|
const float WEAPON_EFFECIENCY = 1.0f;
|
|
// WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL) to float speed, float damage, float effeciency, float elementalVal)
|
|
|
|
/****************************************** BUFF VARIABLES **********************************************/
|
|
const string[] buffComponentKeys = {
|
|
"kinetic",
|
|
"energy",
|
|
"action_cost_reduction",
|
|
"dodge"
|
|
};
|
|
const int[] buffComponentValues = {
|
|
15, 15, 1, 2
|
|
};
|
|
|
|
|
|
/****************************************** EXPERTISE TEMPLATES ****************************************/
|
|
//BH Expertise Rifle Base, No shield special
|
|
|
|
const string[] BH_RIFLE =
|
|
{
|
|
"expertise_bh_stun_1",
|
|
"expertise_bh_amb_cool_1",
|
|
"expertise_bh_amb_cool_2",
|
|
"expertise_bh_surprise_1",
|
|
"expertise_bh_trap_duration_1",
|
|
"expertise_bh_trap_duration_2",
|
|
"expertise_bh_ass_act_1",
|
|
"expertise_bh_ass_act_2",
|
|
"expertise_bh_ass_act_3",
|
|
"expertise_bh_ass_act_4",
|
|
"expertise_bh_ass_dam_1",
|
|
"expertise_bh_ass_dam_2",
|
|
"expertise_bh_ass_dam_3",
|
|
"expertise_bh_return_fire_1",
|
|
"expertise_bh_ass_cool_1",
|
|
"expertise_bh_ass_cool_2",
|
|
"expertise_bh_innate_1",
|
|
"expertise_bh_taunt_1",
|
|
"expertise_bh_fumble_1",
|
|
"expertise_bh_trap_duration_3",
|
|
"expertise_bh_intimidate_1",
|
|
"expertise_bh_dread_strike_1",
|
|
"expertise_bh_precision_1",
|
|
"expertise_bh_precision_2",
|
|
"expertise_bh_precision_3",
|
|
"expertise_bh_precision_4",
|
|
"expertise_bh_rifle_act_1",
|
|
"expertise_bh_rifle_act_2",
|
|
"expertise_bh_rifle_act_3",
|
|
"expertise_bh_rifle_act_4",
|
|
"expertise_bh_rifle_dam_1",
|
|
"expertise_bh_rifle_dam_2",
|
|
"expertise_bh_sniper_1",
|
|
"expertise_bh_cover_1",
|
|
"expertise_bh_armor_mgb_1",
|
|
"expertise_bh_armor_mgb_2",
|
|
"expertise_bh_armor_mgb_3",
|
|
"expertise_bh_armor_sprint_1",
|
|
"expertise_bh_armor_eng_1",
|
|
"expertise_bh_armor_eng_2",
|
|
"expertise_bh_armor_eng_3",
|
|
"expertise_bh_armor_rgb_1",
|
|
"expertise_bh_armor_rgb_2",
|
|
"expertise_bh_armor_rgb_3",
|
|
"expertise_bh_armor_duelist_1",
|
|
};
|
|
|
|
//Carbine build, focuses on tanking and defense
|
|
const string[] BH_CARBINE =
|
|
{
|
|
"expertise_bh_stun_1",
|
|
"expertise_bh_absorbtion_1",
|
|
"expertise_bh_absorbtion_2",
|
|
"expertise_bh_absorbtion_3",
|
|
"expertise_bh_absorbtion_4",
|
|
"expertise_bh_deflection_1",
|
|
"expertise_bh_deflection_2",
|
|
"expertise_bh_deflection_3",
|
|
"expertise_bh_deflection_4",
|
|
"expertise_bh_shields_1",
|
|
"expertise_bh_surprise_1",
|
|
"expertise_bh_ass_act_1",
|
|
"expertise_bh_ass_act_2",
|
|
"expertise_bh_ass_dam_1",
|
|
"expertise_bh_ass_dam_2",
|
|
"expertise_bh_ass_dam_3",
|
|
"expertise_bh_return_fire_1",
|
|
"expertise_bh_ass_cool_1",
|
|
"expertise_bh_ass_cool_2",
|
|
"expertise_bh_innate_1",
|
|
"expertise_bh_taunt_1",
|
|
"expertise_bh_fumble_1",
|
|
"expertise_bh_constitution_1",
|
|
"expertise_bh_constitution_2",
|
|
"expertise_bh_constitution_3",
|
|
"expertise_bh_constitution_4",
|
|
"expertise_bh_carbine_act_1",
|
|
"expertise_bh_carbine_act_2",
|
|
"expertise_bh_carbine_act_3",
|
|
"expertise_bh_carbine_act_4",
|
|
"expertise_bh_carbine_dam_1",
|
|
"expertise_bh_carbine_dam_2",
|
|
"expertise_bh_carbine_crit_1",
|
|
"expertise_bh_relentless_1",
|
|
"expertise_bh_armor_mgb_1",
|
|
"expertise_bh_armor_mgb_2",
|
|
"expertise_bh_armor_mgb_3",
|
|
"expertise_bh_armor_sprint_1",
|
|
"expertise_bh_armor_eng_1",
|
|
"expertise_bh_armor_eng_2",
|
|
"expertise_bh_armor_eng_3",
|
|
"expertise_bh_armor_rgb_1",
|
|
"expertise_bh_armor_rgb_2",
|
|
"expertise_bh_armor_rgb_3",
|
|
"expertise_bh_armor_duelist_1",
|
|
};
|
|
|
|
|
|
//Commando
|
|
const string[] COMMANDO =
|
|
{
|
|
"expertise_co_suppressing_fire_1",
|
|
"expertise_co_suppression_efficiency_1",
|
|
"expertise_co_suppression_efficiency_2",
|
|
"expertise_co_suppression_efficiency_3",
|
|
"expertise_co_suppression_efficiency_4",
|
|
"expertise_co_powered_armor_1",
|
|
"expertise_co_powered_armor_2",
|
|
"expertise_co_powered_armor_3",
|
|
"expertise_co_powered_armor_4",
|
|
"expertise_co_pinpoint_shielding_1",
|
|
"expertise_co_pinpoint_shielding_2",
|
|
"expertise_co_pinpoint_shielding_3",
|
|
"expertise_co_pinpoint_shielding_4",
|
|
"expertise_co_deflective_armor_1",
|
|
"expertise_co_deflective_armor_2",
|
|
"expertise_co_deflective_armor_3",
|
|
"expertise_co_deflective_armor_4",
|
|
"expertise_co_riddle_armor_1",
|
|
"expertise_co_armor_cracker_1",
|
|
"expertise_co_armor_cracker_2",
|
|
"expertise_co_armor_cracker_3",
|
|
"expertise_co_armor_cracker_4",
|
|
"expertise_co_killing_grimace_1",
|
|
"expertise_co_stim_armor_1",
|
|
"expertise_co_diagnostic_armor_1",
|
|
"expertise_co_diagnostic_armor_2",
|
|
"expertise_co_enhanced_precision_1",
|
|
"expertise_co_enhanced_precision_2",
|
|
"expertise_co_enhanced_constitution_1",
|
|
"expertise_co_enhanced_constitution_2",
|
|
"expertise_co_enhanced_stamina_1",
|
|
"expertise_co_enhanced_stamina_2",
|
|
"expertise_co_position_secured_1",
|
|
"expertise_co_burst_fire_1",
|
|
"expertise_co_burst_fire_2",
|
|
"expertise_co_on_target_1",
|
|
"expertise_co_on_target_2",
|
|
"expertise_co_on_target_3",
|
|
"expertise_co_on_target_4",
|
|
"expertise_co_base_of_operations_1",
|
|
"expertise_co_shock_tracer_1",
|
|
"expertise_co_voltage_overload_1",
|
|
"expertise_co_voltage_overload_2",
|
|
"expertise_co_muscle_spasm_1",
|
|
"expertise_co_muscle_spasm_2",
|
|
};
|
|
|
|
//Officer with Melee Line
|
|
const string[] OFFICER_MELEE =
|
|
{
|
|
"expertise_of_aoe_dam_1",
|
|
"expertise_of_group_buff_duration_1",
|
|
"expertise_of_group_buff_duration_2",
|
|
"expertise_of_group_buff_duration_3",
|
|
"expertise_of_group_buff_duration_4",
|
|
"expertise_of_group_buff_act_1",
|
|
"expertise_of_group_buff_act_2",
|
|
"expertise_of_group_buff_act_3",
|
|
"expertise_of_advanced_tactics_1",
|
|
"expertise_of_focus_fire_1",
|
|
"expertise_of_inspiration_1",
|
|
"expertise_of_scatter_1",
|
|
"expertise_of_charge_1",
|
|
"expertise_of_last_words_1",
|
|
"expertise_of_aoe_act_1",
|
|
"expertise_of_aoe_crit_1",
|
|
"expertise_of_aoe_crit_2",
|
|
"expertise_of_aoe_crit_3",
|
|
"expertise_of_aoe_dam_2",
|
|
"expertise_of_firepower_1",
|
|
"expertise_of_firepower_cool_1",
|
|
"expertise_of_firepower_cool_2",
|
|
"expertise_of_firepower_cool_3",
|
|
"expertise_of_advanced_paint_1",
|
|
"expertise_of_stamina_1",
|
|
"expertise_of_stamina_2",
|
|
"expertise_of_stamina_3",
|
|
"expertise_of_stamina_4",
|
|
"expertise_of_1h_dam_1",
|
|
"expertise_of_1h_dam_2",
|
|
"expertise_of_1h_dam_3",
|
|
"expertise_of_1h_dam_4",
|
|
"expertise_of_1h_crit_1",
|
|
"expertise_of_1h_crit_2",
|
|
"expertise_of_decapitate_1",
|
|
"expertise_of_vortex_1",
|
|
"expertise_of_armor_eng_1",
|
|
"expertise_of_armor_eng_2",
|
|
"expertise_of_stimulator_1",
|
|
"expertise_of_heal_dam_1",
|
|
"expertise_of_heal_dam_2",
|
|
"expertise_of_armor_kin_1",
|
|
"expertise_of_purge_1",
|
|
"expertise_of_heal_cool_1",
|
|
"expertise_of_heal_cool_2",
|
|
};
|
|
|
|
//Officer ranged, supply drop
|
|
const string[] OFFICER_RANGED =
|
|
{
|
|
"expertise_of_aoe_dam_1",
|
|
"expertise_of_group_buff_duration_1",
|
|
"expertise_of_group_buff_duration_2",
|
|
"expertise_of_group_buff_duration_3",
|
|
"expertise_of_group_buff_duration_4",
|
|
"expertise_of_group_buff_act_1",
|
|
"expertise_of_group_buff_act_2",
|
|
"expertise_of_group_buff_act_3",
|
|
"expertise_of_advanced_tactics_1",
|
|
"expertise_of_inspiration_1",
|
|
"expertise_of_charge_1",
|
|
"expertise_of_sup_cool_1",
|
|
"expertise_of_sup_cool_2",
|
|
"expertise_of_sup_cool_3",
|
|
"expertise_of_sup_cool_4",
|
|
"expertise_of_medical_sup_1",
|
|
"expertise_of_tactical_sup_1",
|
|
"expertise_of_reinforcements_1",
|
|
"expertise_of_aoe_crit_1",
|
|
"expertise_of_aoe_crit_2",
|
|
"expertise_of_aoe_crit_3",
|
|
"expertise_of_aoe_dam_2",
|
|
"expertise_of_firepower_1",
|
|
"expertise_of_paint_act_1",
|
|
"expertise_of_paint_act_2",
|
|
"expertise_of_paint_act_3",
|
|
"expertise_of_advanced_paint_1",
|
|
"expertise_of_precision_1",
|
|
"expertise_of_precision_2",
|
|
"expertise_of_precision_3",
|
|
"expertise_of_precision_4",
|
|
"expertise_of_constitution_1",
|
|
"expertise_of_constitution_2",
|
|
"expertise_of_stamina_1",
|
|
"expertise_of_stamina_2",
|
|
"expertise_of_stamina_3",
|
|
"expertise_of_stamina_4",
|
|
"expertise_of_armor_eng_1",
|
|
"expertise_of_armor_eng_2",
|
|
"expertise_of_stimulator_1",
|
|
"expertise_of_heal_dam_1",
|
|
"expertise_of_heal_dam_2",
|
|
"expertise_of_armor_kin_1",
|
|
"expertise_of_armor_kin_2",
|
|
"expertise_of_purge_1",
|
|
};
|
|
|
|
//Jedi Tank
|
|
const string[] JEDI_TANK =
|
|
{
|
|
"expertise_fs_general_enhanced_strength_1",
|
|
"expertise_fs_general_enhanced_strength_2",
|
|
"expertise_fs_general_enhanced_agility_1",
|
|
"expertise_fs_general_enhanced_agility_2",
|
|
"expertise_fs_general_alacrity_1",
|
|
"expertise_fs_general_alacrity_2",
|
|
"expertise_fs_general_alacrity_3",
|
|
"expertise_fs_general_alacrity_4",
|
|
"expertise_fs_general_force_cloak_1",
|
|
"expertise_fs_general_exacting_strikes_1",
|
|
"expertise_fs_general_exacting_strikes_2",
|
|
"expertise_fs_general_exacting_strikes_3",
|
|
"expertise_fs_general_stance_saber_block_1",
|
|
"expertise_fs_general_improved_saber_block_1",
|
|
"expertise_fs_general_improved_saber_block_2",
|
|
"expertise_fs_general_improved_saber_block_3",
|
|
"expertise_fs_path_cautious_nature_1",
|
|
"expertise_fs_path_cautious_nature_2",
|
|
"expertise_fs_path_cautious_nature_3",
|
|
"expertise_fs_path_cautious_nature_4",
|
|
"expertise_fs_path_practiced_fluidity_1",
|
|
"expertise_fs_path_practiced_fluidity_2",
|
|
"expertise_fs_path_practiced_fluidity_3",
|
|
"expertise_fs_path_practiced_fluidity_4",
|
|
"expertise_fs_path_reactive_response_1",
|
|
"expertise_fs_path_reactive_response_2",
|
|
"expertise_fs_path_force_clarity_1",
|
|
"expertise_fs_path_anticipate_aggression_1",
|
|
"expertise_fs_path_soothing_aura_1",
|
|
"expertise_fs_path_soothing_aura_2",
|
|
"expertise_fs_path_soothing_aura_3",
|
|
"expertise_fs_path_soothing_aura_4",
|
|
"expertise_fs_path_hermetic_touch_1",
|
|
"expertise_fs_path_remorseless_nature_1",
|
|
"expertise_fs_path_remorseless_nature_2",
|
|
"expertise_fs_path_remorseless_nature_3",
|
|
"expertise_fs_path_remorseless_nature_4",
|
|
"expertise_fs_path_brutality_1",
|
|
"expertise_fs_path_brutality_2",
|
|
"expertise_fs_path_brutality_3",
|
|
"expertise_fs_path_brutality_4",
|
|
"expertise_fs_path_dark_lightning_1",
|
|
"expertise_fs_path_wracking_energy_1",
|
|
"expertise_fs_path_force_choke_1",
|
|
"expertise_fs_path_cloud_minds_1"
|
|
};
|
|
|
|
//Jedi Solo / PvE
|
|
const string[] JEDI_SOLO =
|
|
{
|
|
"expertise_fs_general_enhanced_strength_1",
|
|
"expertise_fs_general_enhanced_strength_2",
|
|
"expertise_fs_general_enhanced_agility_1",
|
|
"expertise_fs_general_enhanced_agility_2",
|
|
"expertise_fs_general_alacrity_1",
|
|
"expertise_fs_general_alacrity_2",
|
|
"expertise_fs_general_alacrity_3",
|
|
"expertise_fs_general_alacrity_4",
|
|
"expertise_fs_general_force_cloak_1",
|
|
"expertise_fs_general_exacting_strikes_1",
|
|
"expertise_fs_general_exacting_strikes_2",
|
|
"expertise_fs_general_exacting_strikes_3",
|
|
"expertise_fs_general_exacting_strikes_4",
|
|
"expertise_fs_general_stance_saber_block_1",
|
|
"expertise_fs_general_improved_saber_block_1",
|
|
"expertise_fs_general_improved_saber_block_2",
|
|
"expertise_fs_general_improved_saber_block_3",
|
|
"expertise_fs_path_cautious_nature_1",
|
|
"expertise_fs_path_cautious_nature_2",
|
|
"expertise_fs_path_cautious_nature_3",
|
|
"expertise_fs_path_cautious_nature_4",
|
|
"expertise_fs_path_soothing_aura_1",
|
|
"expertise_fs_path_soothing_aura_2",
|
|
"expertise_fs_path_soothing_aura_3",
|
|
"expertise_fs_path_soothing_aura_4",
|
|
"expertise_fs_path_hermetic_touch_1",
|
|
"expertise_fs_path_lasting_aura_1",
|
|
"expertise_fs_path_lasting_aura_2",
|
|
"expertise_fs_path_remorseless_nature_1",
|
|
"expertise_fs_path_remorseless_nature_2",
|
|
"expertise_fs_path_remorseless_nature_3",
|
|
"expertise_fs_path_remorseless_nature_4",
|
|
"expertise_fs_path_brutality_1",
|
|
"expertise_fs_path_brutality_2",
|
|
"expertise_fs_path_brutality_3",
|
|
"expertise_fs_path_brutality_4",
|
|
"expertise_fs_path_dark_lightning_1",
|
|
"expertise_fs_path_wracking_energy_1",
|
|
"expertise_fs_path_wracking_energy_2",
|
|
"expertise_fs_path_wracking_energy_3",
|
|
"expertise_fs_path_maelstrom_1",
|
|
"expertise_fs_path_force_choke_1",
|
|
"expertise_fs_path_cloud_minds_1",
|
|
"expertise_fs_path_expansive_trickery_1",
|
|
"expertise_fs_path_expansive_trickery_2"
|
|
};
|
|
|
|
//medic support
|
|
|
|
const string[] MEDIC_SUPPORT =
|
|
{
|
|
"expertise_me_hot_duration_1",
|
|
"expertise_me_hot_duration_2",
|
|
"expertise_me_hot_duration_3",
|
|
"expertise_me_hot_duration_4",
|
|
"expertise_me_revive_duration_1",
|
|
"expertise_me_revive_duration_2",
|
|
"expertise_me_revive_duration_3",
|
|
"expertise_me_blood_cleaners_1",
|
|
"expertise_me_bacta_bomb_1",
|
|
"expertise_me_heal_damage_1",
|
|
"expertise_me_heal_damage_2",
|
|
"expertise_me_heal_damage_3",
|
|
"expertise_me_heal_damage_4",
|
|
"expertise_me_cure_affliction_1",
|
|
"expertise_me_heal_action_1",
|
|
"expertise_me_heal_action_2",
|
|
"expertise_me_heal_action_3",
|
|
"expertise_me_serotonin_boost_1",
|
|
"expertise_me_bacta_grenade_1",
|
|
"expertise_me_enhance_duration_1",
|
|
"expertise_me_enhance_duration_2",
|
|
"expertise_me_enhance_duration_3",
|
|
"expertise_me_enhancement_specialist_1",
|
|
"expertise_me_reckless_stimulation_1",
|
|
"expertise_me_stasis_1",
|
|
"expertise_me_vital_action_1",
|
|
"expertise_me_vital_action_2",
|
|
"expertise_me_vital_action_3",
|
|
"expertise_me_vital_action_4",
|
|
"expertise_me_bacta_resistance_1",
|
|
"expertise_me_dot_damage_1",
|
|
"expertise_me_dot_damage_2",
|
|
"expertise_me_dot_damage_3",
|
|
"expertise_me_serotonin_purge_1",
|
|
"expertise_me_induce_insanity_1",
|
|
"expertise_me_vital_damage_1",
|
|
"expertise_me_vital_damage_2",
|
|
"expertise_me_vital_damage_3",
|
|
"expertise_me_vital_damage_4",
|
|
"expertise_me_electrolyte_drain_1",
|
|
"expertise_me_dot_duration_1",
|
|
"expertise_me_dot_duration_2",
|
|
"expertise_me_dot_duration_3",
|
|
"expertise_me_traumatize_1",
|
|
"expertise_me_thyroid_rupture_1",
|
|
};
|
|
|
|
//Medic Carbine offensive / defensive mix
|
|
const string[] MEDIC_CARBINE =
|
|
{
|
|
"expertise_me_hot_duration_1",
|
|
"expertise_me_hot_duration_2",
|
|
"expertise_me_hot_duration_3",
|
|
"expertise_me_hot_duration_4",
|
|
"expertise_me_drag",
|
|
"expertise_me_revive_duration_1",
|
|
"expertise_me_revive_duration_2",
|
|
"expertise_me_revive_duration_3",
|
|
"expertise_me_blood_cleaners_1",
|
|
"expertise_me_bacta_bomb_1",
|
|
"expertise_me_heal_damage_1",
|
|
"expertise_me_heal_damage_2",
|
|
"expertise_me_heal_damage_3",
|
|
"expertise_me_heal_damage_4",
|
|
"expertise_me_cure_affliction_1",
|
|
"expertise_me_heal_action_1",
|
|
"expertise_me_heal_action_2",
|
|
"expertise_me_heal_action_3",
|
|
"expertise_me_serotonin_boost_1",
|
|
"expertise_me_bacta_grenade_1",
|
|
"expertise_me_enhance_duration_1",
|
|
"expertise_me_enhance_duration_2",
|
|
"expertise_me_enhance_duration_3",
|
|
"expertise_me_enhancement_specialist_1",
|
|
"expertise_me_reckless_stimulation_1",
|
|
"expertise_me_stasis_1",
|
|
"expertise_me_dot_damage_1",
|
|
"expertise_me_dot_damage_2",
|
|
"expertise_me_dot_damage_3",
|
|
"expertise_me_serotonin_purge_1",
|
|
"expertise_me_dot_duration_1",
|
|
"expertise_me_dot_duration_2",
|
|
"expertise_me_carbine_damage_1",
|
|
"expertise_me_carbine_damage_2",
|
|
"expertise_me_carbine_damage_3",
|
|
"expertise_me_carbine_damage_4",
|
|
"expertise_me_dueterium_rounds_1",
|
|
"expertise_me_agility_1",
|
|
"expertise_me_agility_2",
|
|
"expertise_me_agility_3",
|
|
"expertise_me_agility_4",
|
|
"expertise_me_agro_healing_1",
|
|
"expertise_me_agro_healing_2",
|
|
"expertise_me_agro_healing_3",
|
|
"expertise_me_evasion_1"
|
|
};
|
|
|
|
//Spy Melee / Ambush
|
|
|
|
const string[] SPY_MELEE =
|
|
{
|
|
"expertise_sp_improved_first_aid_1",
|
|
"expertise_sp_improved_first_aid_2",
|
|
"expertise_sp_cloaked_recovery_1",
|
|
"expertise_sp_rapid_concealment_1",
|
|
"expertise_sp_rapid_concealment_2",
|
|
"expertise_sp_rapid_concealment_3",
|
|
"expertise_sp_rapid_concealment_4",
|
|
"expertise_sp_smoke_screen_1",
|
|
"expertise_sp_smoke_screen_2",
|
|
"expertise_sp_smoke_screen_3",
|
|
"expertise_sp_smoke_screen_4",
|
|
"expertise_sp_burst_of_shadows_1",
|
|
"expertise_sp_without_a_trace_1",
|
|
"expertise_sp_cloaked_attacks_1",
|
|
"expertise_sp_cloak_and_dagger_1",
|
|
"expertise_sp_cloak_and_dagger_2",
|
|
"expertise_sp_cloak_and_dagger_3",
|
|
"expertise_sp_cloak_and_dagger_4",
|
|
"expertise_sp_initiative_1",
|
|
"expertise_sp_initiative_2",
|
|
"expertise_sp_initiative_3",
|
|
"expertise_sp_initiative_4",
|
|
"expertise_sp_puncturing_strikes_1",
|
|
"expertise_sp_puncturing_strikes_2",
|
|
"expertise_sp_puncturing_strikes_3",
|
|
"expertise_sp_puncturing_strikes_4",
|
|
"expertise_sp_undercover_1",
|
|
"expertise_sp_undercover_2",
|
|
"expertise_sp_undercover_3",
|
|
"expertise_sp_improved_spys_fang_1",
|
|
"expertise_sp_hidden_daggers_1",
|
|
"expertise_sp_improved_arachnids_web_1",
|
|
"expertise_sp_noxious_traps_1",
|
|
"expertise_sp_noxious_traps_2",
|
|
"expertise_sp_deadly_toxins_1",
|
|
"expertise_sp_increased_strength_1",
|
|
"expertise_sp_increased_strength_2",
|
|
"expertise_sp_increased_strength_3",
|
|
"expertise_sp_increased_strength_4",
|
|
"expertise_sp_close_quarters_1",
|
|
"expertise_sp_close_quarters_2",
|
|
"expertise_sp_close_quarters_3",
|
|
"expertise_sp_cheap_strikes_1",
|
|
"expertise_sp_cheap_strikes_2",
|
|
"expertise_sp_cheap_strikes_3",
|
|
};
|
|
|
|
//Spy Ranged
|
|
const string[] SPY_RANGED =
|
|
{
|
|
"expertise_sp_improved_first_aid_1",
|
|
"expertise_sp_improved_first_aid_2",
|
|
"expertise_sp_cloaked_recovery_1",
|
|
"expertise_sp_rapid_concealment_1",
|
|
"expertise_sp_rapid_concealment_2",
|
|
"expertise_sp_rapid_concealment_3",
|
|
"expertise_sp_rapid_concealment_4",
|
|
"expertise_sp_smoke_screen_1",
|
|
"expertise_sp_smoke_screen_2",
|
|
"expertise_sp_smoke_screen_3",
|
|
"expertise_sp_smoke_screen_4",
|
|
"expertise_sp_burst_of_shadows_1",
|
|
"expertise_sp_without_a_trace_1",
|
|
"expertise_sp_cloaked_attacks_1",
|
|
"expertise_sp_cloak_and_dagger_1",
|
|
"expertise_sp_cloak_and_dagger_2",
|
|
"expertise_sp_cloak_and_dagger_3",
|
|
"expertise_sp_cloak_and_dagger_4",
|
|
"expertise_sp_initiative_1",
|
|
"expertise_sp_initiative_2",
|
|
"expertise_sp_initiative_3",
|
|
"expertise_sp_initiative_4",
|
|
"expertise_sp_undercover_1",
|
|
"expertise_sp_undercover_2",
|
|
"expertise_sp_undercover_3",
|
|
"expertise_sp_improved_spys_fang_1",
|
|
"expertise_sp_protective_armor_1",
|
|
"expertise_sp_improved_arachnids_web_1",
|
|
"expertise_sp_noxious_traps_1",
|
|
"expertise_sp_noxious_traps_2",
|
|
"expertise_sp_opportunity_1",
|
|
"expertise_sp_opportunity_2",
|
|
"expertise_sp_opportunity_3",
|
|
"expertise_sp_opportunity_4",
|
|
"expertise_sp_cheap_shots_1",
|
|
"expertise_sp_cheap_shots_2",
|
|
"expertise_sp_cheap_shots_3",
|
|
"expertise_sp_cheap_shots_4",
|
|
"expertise_sp_precision_1",
|
|
"expertise_sp_precision_2",
|
|
"expertise_sp_precision_3",
|
|
"expertise_sp_precision_4",
|
|
"expertise_sp_deadly_pistols_1",
|
|
"expertise_sp_deadly_pistols_2",
|
|
"expertise_sp_deadly_pistols_3",
|
|
};
|
|
|
|
//Smuggler Pistol / Melee Hybrid
|
|
|
|
const string[] SMUGGLER_HYBRID =
|
|
{
|
|
"expertise_sm_general_hidden_padding_1",
|
|
"expertise_sm_general_hidden_padding_2",
|
|
"expertise_sm_general_lined_pockets_1",
|
|
"expertise_sm_general_lined_pockets_2",
|
|
"expertise_sm_general_gun_oil_1",
|
|
"expertise_sm_general_hair_trigger_1",
|
|
"expertise_sm_general_hair_trigger_2",
|
|
"expertise_sm_general_hair_trigger_3",
|
|
"expertise_sm_general_hair_trigger_4",
|
|
"expertise_sm_general_precise_bead_1",
|
|
"expertise_sm_general_precise_bead_2",
|
|
"expertise_sm_general_precise_bead_3",
|
|
"expertise_sm_general_precise_bead_4",
|
|
"expertise_sm_general_hammer_fanning_1",
|
|
"expertise_sm_general_hammer_fanning_2",
|
|
"expertise_sm_general_hammer_fanning_3",
|
|
"expertise_sm_general_hammer_fanning_4",
|
|
"expertise_sm_general_break_the_deal_1",
|
|
"expertise_sm_general_elbow_grease_1",
|
|
"expertise_sm_general_switcheroo_1",
|
|
"expertise_sm_general_switcheroo_2",
|
|
"expertise_sm_general_switcheroo_3",
|
|
"expertise_sm_general_switcheroo_4",
|
|
"expertise_sm_general_head_crack_1",
|
|
"expertise_sm_general_head_crack_2",
|
|
"expertise_sm_general_head_crack_3",
|
|
"expertise_sm_general_head_crack_4",
|
|
"expertise_sm_general_one_two_pummel_1",
|
|
"expertise_sm_general_one_two_pummel_2",
|
|
"expertise_sm_general_one_two_pummel_3",
|
|
"expertise_sm_general_one_two_pummel_4",
|
|
"expertise_sm_general_bad_odds_1",
|
|
"expertise_sm_general_spot_a_sucker_1",
|
|
"expertise_sm_general_meager_fortune_1",
|
|
"expertise_sm_general_meager_fortune_2",
|
|
"expertise_sm_general_wretched_fate_1",
|
|
"expertise_sm_general_wretched_fate_2",
|
|
"expertise_sm_general_poor_prospect_1",
|
|
"expertise_sm_general_poor_prospect_2",
|
|
"expertise_sm_general_off_the_cuff_1",
|
|
"expertise_sm_general_double_deal_1",
|
|
"expertise_sm_general_double_deal_2",
|
|
"expertise_sm_general_end_of_the_line_1",
|
|
"expertise_sm_general_narrow_escape_1",
|
|
"expertise_sm_path_healthy_profits_1"
|
|
};
|
|
|
|
// Smuggler Melee
|
|
const string[] SMUGGLER_MELEE =
|
|
{
|
|
"expertise_sm_general_hidden_padding_1",
|
|
"expertise_sm_general_hidden_padding_2",
|
|
"expertise_sm_general_gun_oil_1",
|
|
"expertise_sm_general_elbow_grease_1",
|
|
"expertise_sm_general_switcheroo_1",
|
|
"expertise_sm_general_switcheroo_2",
|
|
"expertise_sm_general_switcheroo_3",
|
|
"expertise_sm_general_switcheroo_4",
|
|
"expertise_sm_general_head_crack_1",
|
|
"expertise_sm_general_head_crack_2",
|
|
"expertise_sm_general_head_crack_3",
|
|
"expertise_sm_general_head_crack_4",
|
|
"expertise_sm_general_one_two_pummel_1",
|
|
"expertise_sm_general_one_two_pummel_2",
|
|
"expertise_sm_general_one_two_pummel_3",
|
|
"expertise_sm_general_one_two_pummel_4",
|
|
"expertise_sm_general_bad_odds_1",
|
|
"expertise_sm_general_off_the_cuff_1",
|
|
"expertise_sm_general_double_deal_1",
|
|
"expertise_sm_general_double_deal_2",
|
|
"expertise_sm_general_end_of_the_line_1",
|
|
"expertise_sm_general_narrow_escape_1",
|
|
"expertise_sm_path_easy_money_1",
|
|
"expertise_sm_path_easy_money_2",
|
|
"expertise_sm_path_ploy_1",
|
|
"expertise_sm_path_ploy_2",
|
|
"expertise_sm_path_scandal_1",
|
|
"expertise_sm_path_scandal_2",
|
|
"expertise_sm_path_scandal_3",
|
|
"expertise_sm_path_scandal_4",
|
|
"expertise_sm_path_smooth_move_1",
|
|
"expertise_sm_path_smooth_move_2",
|
|
"expertise_sm_path_smooth_move_3",
|
|
"expertise_sm_path_smooth_move_4",
|
|
"expertise_sm_path_false_hope_1",
|
|
"expertise_sm_path_fake_goods_1",
|
|
"expertise_sm_path_fake_goods_2",
|
|
"expertise_sm_path_healthy_profits_1",
|
|
"expertise_sm_path_underworld_boss_1",
|
|
"expertise_sm_path_inside_information_1",
|
|
"expertise_sm_path_long_odds_1",
|
|
"expertise_sm_path_quick_fix_1",
|
|
"expertise_sm_path_quick_fix_2",
|
|
"expertise_sm_path_quick_fix_3",
|
|
"expertise_sm_path_quick_fix_4"
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/***** TRIGGERS *******************************************************/
|
|
// Checks the character godLevel and detaches itself if the player dosent have sufficient admin privs.
|
|
|
|
trigger OnAttach()
|
|
{
|
|
if (isGod(self))
|
|
{
|
|
if(getGodLevel(self) < 10)
|
|
{
|
|
detachScript(self, "test.qasetup");
|
|
sendSystemMessage(self, "You do not have the appropriate access level to use this script.", null);
|
|
}
|
|
}
|
|
else if (!isGod(self))
|
|
{
|
|
detachScript(self, "test.qasetup");
|
|
}
|
|
|
|
sendSystemMessage(self, "QA-Setup attached.", null);
|
|
sendSystemMessage(self, "For available commands type 'qasetup'.", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
/************************ CONTAINS THE VARIABLES FOR THE DIFFRENT TEMPLATES ******************/
|
|
// Listens for spoken keywords. When the player speaks the appropriate keyword, the script is activated
|
|
trigger OnSpeaking(string text)
|
|
{
|
|
//obj_id player = sui.getPlayerId(params);
|
|
//obj_id pInv = utils.getInventoryContainer(player);
|
|
java.util.StringTokenizer tok = new java.util.StringTokenizer (text);
|
|
|
|
//pInv = players inventory
|
|
obj_id pInv = utils.getInventoryContainer(self);
|
|
|
|
if (text == "qasetup")
|
|
{
|
|
sendSystemMessage(self, "*******************************************************", null);
|
|
sendSystemMessage(self, "QA-Setup Commands - Say 'qasetup' to show this list", null);
|
|
sendSystemMessage(self, "Using a template code will set your character to level 90 with a preset expertise template, suitable weapon(s), ", null);
|
|
sendSystemMessage(self, "modded armor and clothing as well as some generic items that high level players would normally carry.", null);
|
|
sendSystemMessage(self, "Use on of the following key phrases to set you template:", null);
|
|
sendSystemMessage(self, "qa_bh_rifle, An offensive BH build that focuses on a high damage output.", null);
|
|
sendSystemMessage(self, "qa_bh_carbine, A BH build using the Carbine line and most of the available defensive options. A strong tank.", null);
|
|
sendSystemMessage(self, "qa_commando, A typical commando build with strong defense and debuff abilities.", null);
|
|
sendSystemMessage(self, "qa_officer_Melee, An officer build with the officer melee line. Probably the the highest burst damage template available.", null);
|
|
sendSystemMessage(self, "qa_officer_Ranged, This build focuses more on support through the supply line, group buffs and ranged abilities", null);
|
|
sendSystemMessage(self, "qa_jedi_tank, Jedi with a full defensive setup. Very strong tank.", null);
|
|
sendSystemMessage(self, "qa_jedi_solo, sacrifices some defense for more damage and versatility", null);
|
|
sendSystemMessage(self, "qa_medic_support, Set up with full heals and debuff abilities. No weapon skills or threat reduction", null);
|
|
sendSystemMessage(self, "qa_medic_carbine, This template drops some of the less popular debuffs in favor of carbine skills and threat reduction", null);
|
|
sendSystemMessage(self, "qa_spy_melee, Melee spy with very high 'out of stealth' damage. The tradeoff is the risk of being in close with the spys low defense", null);
|
|
sendSystemMessage(self, "qa_spy_ranged, Less damage potential but the ranged spy has the benifit of being effective at long range", null);
|
|
sendSystemMessage(self, "qa_smuggler_hybrid, A smuggler build with both the melee and pistol lines. Very high damage potential, but suffers from high action costs", null);
|
|
sendSystemMessage(self, "qa_smuggler_melee, This build uses the smuggler melee line in addition to improved heals and armor", null);
|
|
sendSystemMessage(self, "'qa_buff' to grant your character a full set of buffs (Entertainer, Medic, Food and Mustafarian Injector buff", null);
|
|
sendSystemMessage(self, "", null);
|
|
sendSystemMessage(self, "For a list of commands to gain ONLY modded armor, clothing, and weapons, say 'qaobjects'", null);
|
|
sendSystemMessage(self, "*******************************************************", null);
|
|
|
|
}
|
|
|
|
if (text == "qaobjects")
|
|
{
|
|
sendSystemMessage(self, "*******************************************************", null);
|
|
sendSystemMessage(self, "QA-Objects Commands - Say 'qaobjects' to show this list", null);
|
|
sendSystemMessage(self, "Using a template code will set your character with suitable weapon(s), ", null);
|
|
sendSystemMessage(self, "modded armor and clothing as well as some generic items that high level players would normally carry.", null);
|
|
sendSystemMessage(self, "Use on of the following key phrases to set you template:", null);
|
|
sendSystemMessage(self, "qa_objects_bh_rifle, An offensive BH build that focuses on a high damage output.", null);
|
|
sendSystemMessage(self, "qa_objects_bh_carbine, A BH build using the Carbine line and most of the available defensive options. A strong tank.", null);
|
|
sendSystemMessage(self, "qa_objects_commando, A typical commando build with strong defense and debuff abilities.", null);
|
|
sendSystemMessage(self, "qa_objects_officer_Melee, An officer build with the officer melee line. Probably the the highest burst damage template available.", null);
|
|
sendSystemMessage(self, "qa_objects_officer_Ranged, This build focuses more on support through the supply line, group buffs and ranged abilities", null);
|
|
sendSystemMessage(self, "qa_objects_jedi_tank, Jedi with a full defensive setup. Very strong tank.", null);
|
|
sendSystemMessage(self, "qa_objects_jedi_solo, sacrifices some defense for more damage and versatility", null);
|
|
sendSystemMessage(self, "qa_objects_medic_support, Set up with full heals and debuff abilities. No weapon skills or threat reduction", null);
|
|
sendSystemMessage(self, "qa_objects_medic_carbine, This template drops some of the less popular debuffs in favor of carbine skills and threat reduction", null);
|
|
sendSystemMessage(self, "qa_objects_spy_melee, Melee spy with very high 'out of stealth' damage. The tradeoff is the risk of being in close with the spys low defense", null);
|
|
sendSystemMessage(self, "qa_objects_spy_ranged, Less damage potential but the ranged spy has the benifit of being effective at long range", null);
|
|
sendSystemMessage(self, "qa_objects_smuggler_hybrid, A smuggler build with both the melee and pistol lines. Very high damage potential, but suffers from high action costs", null);
|
|
sendSystemMessage(self, "qa_objects_smuggler_melee, This build uses the smuggler melee line in addition to improved heals and armor", null);
|
|
sendSystemMessage(self, "", null);
|
|
sendSystemMessage(self, "'qa_buff' to grant your character a full set of buffs (Entertainer, Medic, Food and Mustafarian Injector buff", null);
|
|
sendSystemMessage(self, "", null);
|
|
sendSystemMessage(self, "For a list of commands to set your character to level 90 with a preset expertise template, say 'qasetup'", null);
|
|
sendSystemMessage(self, "*******************************************************", null);
|
|
|
|
}
|
|
|
|
if (text == "qa_bh_rifle")
|
|
{
|
|
setTemplate((self), BH_RIFLE, "bounty_hunter_1a");
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_4, "rangedDps", "shirtRifle");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtRifle");
|
|
createPup ((self), "expertise_action_weapon_0", POWERUP_ITEMS, 10);
|
|
static_item.createNewItemFunction("weapon_tow_rifle_lightning_cannon_04_01", pInv);
|
|
}
|
|
|
|
if (text == "qa_objects_bh_rifle")
|
|
{
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_4, "rangedDps", "shirtRifle");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtRifle");
|
|
createPup ((self), "expertise_action_weapon_0", POWERUP_ITEMS, 10);
|
|
static_item.createNewItemFunction("weapon_tow_rifle_lightning_cannon_04_01", pInv);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_bh_carbine")
|
|
{
|
|
setTemplate((self), BH_CARBINE, "bounty_hunter_1a");
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_4, "rangedDps", "shirtCarbine");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtCarbine");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
}
|
|
|
|
if (text == "qa_objects_bh_carbine")
|
|
{
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_4, "rangedDps", "shirtCarbine");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtCarbine");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_commando")
|
|
{
|
|
setTemplate((self), COMMANDO, "commando_1a");
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_1, "rangedTank", "shirtTank");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtTank");
|
|
createPup ((self), "expertise_critical_heavy", POWERUP_ITEMS, 10);
|
|
static_item.createNewItemFunction("weapon_tow_heavy_acid_beam_04_01", pInv);
|
|
static_item.createNewItemFunction("weapon_tow_cannon_04_02", pInv);
|
|
static_item.createNewItemFunction("weapon_mandalorian_heavy_04_01",pInv);
|
|
}
|
|
|
|
if (text == "qa_objects_commando")
|
|
{
|
|
issueAssaultArmorSet((self), ARMOR_SET_ASSAULT_1, "rangedTank", "shirtTank");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtTank");
|
|
createPup ((self), "expertise_critical_heavy", POWERUP_ITEMS, 10);
|
|
static_item.createNewItemFunction("weapon_tow_heavy_acid_beam_04_01", pInv);
|
|
static_item.createNewItemFunction("weapon_tow_cannon_04_02", pInv);
|
|
static_item.createNewItemFunction("weapon_mandalorian_heavy_04_01",pInv);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_officer_Melee")
|
|
{
|
|
setTemplate((self), OFFICER_MELEE, "officer_1a");
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_4, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirt1h");
|
|
createPup ((self), "expertise_critical_1h", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
}
|
|
|
|
if (text == "qa_objects_officer_Melee")
|
|
{
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_4, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirt1h");
|
|
createPup ((self), "expertise_critical_1h", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_officer_Ranged")
|
|
{
|
|
setTemplate((self), OFFICER_RANGED, "officer_1a");
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_4, "rangedDps", "shirtTank");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtTank");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
}
|
|
|
|
if (text == "qa_objects_officer_Ranged")
|
|
{
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_4, "rangedDps", "shirtTank");
|
|
issueClothes((self), CLOTHES, "rangedDps", "shirtTank");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_jedi_tank")
|
|
{
|
|
setTemplate((self), JEDI_TANK, "force_sensitive_1a");
|
|
static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
|
|
issueClothes((self), CLOTHES, "tank", "shirtTank");
|
|
createPup ((self), "combat_parry", POWERUP_ITEMS, 6);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_tow_lava_crystal_06_01", pInv);
|
|
obj_id lightsaber = createObject("object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen4_must.iff", pInv, "");
|
|
attachMods(lightsaber, "shirtTank");
|
|
}
|
|
|
|
if (text == "qa_objects_jedi_tank")
|
|
{
|
|
static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
|
|
issueClothes((self), CLOTHES, "tank", "shirtTank");
|
|
createPup ((self), "combat_parry", POWERUP_ITEMS, 6);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_tow_lava_crystal_06_01", pInv);
|
|
obj_id lightsaber = createObject("object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen4_must.iff", pInv, "");
|
|
attachMods(lightsaber, "shirtTank");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_jedi_solo")
|
|
{
|
|
setTemplate((self), JEDI_SOLO, "force_sensitive_1a");
|
|
static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
|
|
issueClothes((self), CLOTHES, "tank", "shirtTank");
|
|
createPup ((self), "combat_parry", POWERUP_ITEMS, 6);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_tow_lava_crystal_06_01", pInv);
|
|
obj_id lightsaber = createObject("object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen4_must.iff", pInv, "");
|
|
attachMods(lightsaber, "shirtTank");
|
|
}
|
|
|
|
if (text == "qa_objects_jedi_solo")
|
|
{
|
|
static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
|
|
issueClothes((self), CLOTHES, "tank", "shirtTank");
|
|
createPup ((self), "combat_parry", POWERUP_ITEMS, 6);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
|
|
static_item.createNewItemFunction("item_tow_lava_crystal_06_01", pInv);
|
|
obj_id lightsaber = createObject("object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen4_must.iff", pInv, "");
|
|
attachMods(lightsaber, "shirtTank");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_medic_support")
|
|
{
|
|
setTemplate((self), MEDIC_SUPPORT, "medic_1a");
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_3, "healer", "shirtHealer");
|
|
issueClothes((self), CLOTHES, "healer", "shirtHealer");
|
|
createPup ((self), "expertise_healing_all", POWERUP_ITEMS, 8);
|
|
}
|
|
|
|
if (text == "qa_objects_medic_support")
|
|
{
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_3, "healer", "shirtHealer");
|
|
issueClothes((self), CLOTHES, "healer", "shirtHealer");
|
|
createPup ((self), "expertise_healing_all", POWERUP_ITEMS, 8);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_medic_carbine")
|
|
{
|
|
setTemplate((self), MEDIC_CARBINE, "medic_1a");
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_3, "healer", "shirtTank");
|
|
issueClothes((self), CLOTHES, "healer", "shirtTank");
|
|
createPup ((self), "expertise_healing_all", POWERUP_ITEMS, 8);
|
|
}
|
|
|
|
if (text == "qa_objects_medic_carbine")
|
|
{
|
|
issueBattleArmorSet((self), ARMOR_SET_BATTLE_3, "healer", "shirtTank");
|
|
issueClothes((self), CLOTHES, "healer", "shirtTank");
|
|
createPup ((self), "expertise_healing_all", POWERUP_ITEMS, 8);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_spy_melee")
|
|
{
|
|
setTemplate((self), SPY_MELEE, "spy_1a");
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_2, "meleeSpy", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeSpy", "shirt1h");
|
|
createPup ((self), "expertise_critical_1h", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
}
|
|
|
|
if (text == "qa_objects_spy_melee")
|
|
{
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_2, "meleeSpy", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeSpy", "shirt1h");
|
|
createPup ((self), "expertise_critical_1h", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
|
|
if (text == "qa_spy_ranged")
|
|
{
|
|
setTemplate((self), SPY_RANGED, "spy_1a");
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_2, "rangedSpy", "shirtCarbine");
|
|
issueClothes((self), CLOTHES, "rangedSpy", "shirtCarbine");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
}
|
|
|
|
if (text == "qa_objects_spy_ranged")
|
|
{
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_2, "rangedSpy", "shirtCarbine");
|
|
issueClothes((self), CLOTHES, "rangedSpy", "shirtCarbine");
|
|
createPup ((self), "expertise_action_weapon_1", POWERUP_ITEMS, 10);
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
|
|
if (text == "qa_smuggler_hybrid")
|
|
{
|
|
setTemplate((self), SMUGGLER_HYBRID, "smuggler_1a");
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_3, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirtTank");
|
|
createPup ((self), "combat_dodge", POWERUP_ITEMS, 8);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
}
|
|
|
|
if (text == "qa_objects_smuggler_hybrid")
|
|
{
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_3, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirtTank");
|
|
createPup ((self), "combat_dodge", POWERUP_ITEMS, 8);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
|
|
if (text == "qa_smuggler_melee")
|
|
{
|
|
setTemplate((self), SMUGGLER_MELEE, "smuggler_1a");
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_3, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirtTank");
|
|
createPup ((self), "expertise_action_weapon_4", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
}
|
|
|
|
if (text == "qa_objects_smuggler_melee")
|
|
{
|
|
issueReconArmorSet((self), ARMOR_SET_RECON_3, "meleeDps", "shirt1h");
|
|
issueClothes((self), CLOTHES, "meleeDps", "shirtTank");
|
|
createPup ((self), "expertise_action_weapon_4", POWERUP_ITEMS, 10);
|
|
obj_id melee = weapons.createWeapon("object/weapon/melee/sword/sword_acid.iff", pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
|
|
attachMods(melee, "shirt1h");
|
|
sendSystemMessage(self, "You have received your objects.", null);
|
|
}
|
|
|
|
if (text == "qa_buff")
|
|
{
|
|
|
|
addEntBuff(self);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
|
|
/********************************** RESPEC TO LEVEL 90 *************************/
|
|
|
|
void handleProfessionLevelToNinety(obj_id player, string roadmap)
|
|
{
|
|
revokeAllSkills(player);
|
|
|
|
int currentCombatXp = getExperiencePoints(player, "combat_general");
|
|
grantExperiencePoints(player, "combat_general", -currentCombatXp);
|
|
skill.recalcPlayerPools(player, true);
|
|
|
|
setSkillTemplate(player, roadmap);
|
|
|
|
respec.autoLevelPlayer(player, 90, false);
|
|
|
|
//reset the expertise
|
|
utils.fullExpertiseReset(player, false);
|
|
|
|
skill.setPlayerStatsForLevel(player, 90);
|
|
|
|
// expertise.autoAllocateExpertiseByLevel(player, false);
|
|
// handleRoadmapSkills(player);
|
|
}
|
|
|
|
void revokeAllSkills(obj_id player)
|
|
{
|
|
string[] skillList = getSkillListingForPlayer(player);
|
|
int attempts = skillList.length;
|
|
|
|
if ((skillList != null) && (skillList.length != 0))
|
|
{
|
|
while(skillList.length > 0 && attempts > 0)
|
|
{
|
|
for (int i = 0; i < skillList.length; i++)
|
|
{
|
|
string skillName = skillList[i];
|
|
if (!skillName.startsWith ("species_")&& //don't revoke species skills
|
|
!skillName.startsWith("social_language_")&&
|
|
!skillName.startsWith("utility_")&&
|
|
!skillName.startsWith("common_")&&
|
|
!skillName.startsWith("demo_")&&
|
|
!skillName.startsWith("force_title_")&&
|
|
!skillName.startsWith("force_sensitive_")&&
|
|
!skillName.startsWith("combat_melee_basic")&&
|
|
!skillName.startsWith("pilot_")&&
|
|
!skillName.startsWith("internal_expertise_") &&
|
|
!skillName.startsWith("class_chronicles_") &&
|
|
!skillName.startsWith("combat_ranged_weapon_basic"))
|
|
{
|
|
skill.revokeSkillSilent(player, skillName);
|
|
}
|
|
}
|
|
|
|
// The new skill list is the remaining skills.
|
|
skillList = getSkillListingForPlayer(player);
|
|
|
|
// Prevent data from creating an infinite loop.
|
|
--attempts;
|
|
}
|
|
}
|
|
skill.recalcPlayerPools(player, true);
|
|
}
|
|
|
|
|
|
// Grants expertise skills to the player based on the template skillList
|
|
void setTemplate(obj_id player, string[] skillList, string baseClass)
|
|
{
|
|
handleProfessionLevelToNinety(player, baseClass);
|
|
|
|
//reset the expertise
|
|
utils.fullExpertiseReset(player, false);
|
|
|
|
for (int j = 0; j < skillList.length; j++)
|
|
{
|
|
string expertiseSkill = skillList[j];
|
|
skill.grantSkillToPlayer(player, expertiseSkill);
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************** ARMOR AND CLOTHES MODIFIER ****************************************/
|
|
// Generates assault armor and calls the attachMods for each armor piece. The armor is generated by calling the
|
|
// armor.script in the script library.
|
|
|
|
|
|
void issueAssaultArmorSet(obj_id player, string[] armorPieces, string modType, string specialModType)
|
|
{
|
|
obj_id pInv = utils.getInventoryContainer(player);
|
|
for ( int j = 0; j < armorPieces.length; ++j )
|
|
{
|
|
string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
|
|
obj_id armorItem = createObject(armorTemplate, pInv, "");
|
|
if ( isIdValid(armorItem) )
|
|
{
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_body))
|
|
{
|
|
attachMods(armorItem, modType);
|
|
}
|
|
|
|
else
|
|
{
|
|
attachMods(armorItem, specialModType);
|
|
}
|
|
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
|
|
{
|
|
armor.setArmorDataPercent(armorItem, 2, 2, GENERAL_PROTECTION, CONDITION);
|
|
armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_ASSAULT_LAYER, 1.0f);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Generates battle armor and calls the attachMods for each armor piece
|
|
void issueBattleArmorSet(obj_id player, string[] armorPieces, string modType, string specialModType)
|
|
{
|
|
obj_id pInv = utils.getInventoryContainer(player);
|
|
for ( int j = 0; j < armorPieces.length; ++j )
|
|
{
|
|
string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
|
|
obj_id armorItem = createObject(armorTemplate, pInv, "");
|
|
if ( isIdValid(armorItem) )
|
|
{
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_body))
|
|
{
|
|
attachMods(armorItem, modType);
|
|
}
|
|
|
|
else
|
|
{
|
|
attachMods(armorItem, specialModType);
|
|
}
|
|
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
|
|
{
|
|
armor.setArmorDataPercent(armorItem, 2, 1, GENERAL_PROTECTION, CONDITION);
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// Generates recon armor and calls the attachMods for each armor piece
|
|
void issueReconArmorSet(obj_id player, string[] armorPieces, string modType, string specialModType)
|
|
{
|
|
obj_id pInv = utils.getInventoryContainer(player);
|
|
for ( int j = 0; j < armorPieces.length; ++j )
|
|
{
|
|
string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
|
|
obj_id armorItem = createObject(armorTemplate, pInv, "");
|
|
if ( isIdValid(armorItem) )
|
|
{
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_body))
|
|
{
|
|
attachMods(armorItem, modType);
|
|
}
|
|
|
|
else
|
|
{
|
|
attachMods(armorItem, specialModType);
|
|
}
|
|
|
|
if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
|
|
{
|
|
armor.setArmorDataPercent(armorItem, 2, 0, GENERAL_PROTECTION, CONDITION);
|
|
armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_RECON_LAYER, 1.0f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void issueClothes(obj_id player, string[] clothesPieces, string modType, string specialModType)
|
|
{
|
|
obj_id pInv = utils.getInventoryContainer(player);
|
|
|
|
//static_item.createNewItemFunction("item_tow_proc_generic_03_01", pInv);
|
|
static_item.createNewItemFunction("item_gcw_base_health_c_03_01", pInv);
|
|
static_item.createNewItemFunction("item_gcw_base_health_c_03_01", pInv);
|
|
|
|
//Creates a PSG
|
|
obj_id PSGitem = createObject("object/tangible/component/armor/shield_generator_personal_c.iff", pInv, "");
|
|
armor.initializePsg(PSGitem, 2.5f, 2500, 10000);
|
|
|
|
//Creates highend Carbine for each toon.
|
|
static_item.createNewItemFunction("weapon_tow_carbine_05_01", pInv);
|
|
|
|
|
|
for ( int j = 0; j < clothesPieces.length; ++j )
|
|
{
|
|
string clothesTemplate = clothesPieces[j];
|
|
obj_id clothesItem = createObject(clothesTemplate, pInv, "");
|
|
if (!isGameObjectTypeOf(clothesItem, GOT_clothing_shirt))
|
|
{
|
|
attachMods(clothesItem, modType);
|
|
}
|
|
|
|
else
|
|
{
|
|
attachMods(clothesItem, specialModType);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/****************************************** ADD MODIFIERS ****************************************/
|
|
|
|
//Returns diffrent RE mods based on the template specified.
|
|
void attachMods(obj_id item, string template)
|
|
{
|
|
if (template == "rangedDps")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.precision_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.luck_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.stamina_modified", 35);
|
|
}
|
|
|
|
if (template == "rangedTank")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.precision_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.agility_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.luck_modified", 35);
|
|
}
|
|
|
|
else if (template == "meleeDps")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.strength_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.agility_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.stamina_modified", 35);
|
|
}
|
|
|
|
else if (template == "healer")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.constitution_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.agility_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.stamina_modified", 35);
|
|
}
|
|
|
|
else if (template == "tank")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.constitution_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.agility_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.strength_modified", 35);
|
|
}
|
|
|
|
else if (template == "rangedSpy")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.camouflage", 35);
|
|
setObjVar (item, "skillmod.bonus.precision_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.stamina_modified", 35);
|
|
}
|
|
|
|
else if (template == "meleeSpy")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.camouflage", 35);
|
|
setObjVar (item, "skillmod.bonus.strength_modified", 35);
|
|
setObjVar (item, "skillmod.bonus.stamina_modified", 35);
|
|
}
|
|
|
|
else if (template == "shirtTank")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.combat_dodge", 4);
|
|
setObjVar (item, "skillmod.bonus.combat_parry", 5);
|
|
setObjVar (item, "skillmod.bonus.combat_critical_hit_reduction", 8);
|
|
}
|
|
|
|
else if (template == "shirtRifle")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.expertise_action_weapon_0", 3);
|
|
setObjVar (item, "skillmod.bonus.expertise_critical_rifle", 3);
|
|
setObjVar (item, "skillmod.bonus.combat_strikethrough_chance", 6);
|
|
}
|
|
|
|
else if (template == "shirtCarbine")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.expertise_action_weapon_1", 3);
|
|
setObjVar (item, "skillmod.bonus.expertise_critical_carbine", 3);
|
|
setObjVar (item, "skillmod.bonus.combat_strikethrough_chance", 6);
|
|
}
|
|
|
|
else if (template == "shirtPistol")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.expertise_action_weapon_2", 3);
|
|
setObjVar (item, "skillmod.bonus.expertise_critical_pistol", 3);
|
|
setObjVar (item, "skillmod.bonus.combat_strikethrough_chance", 6);
|
|
}
|
|
|
|
else if (template == "shirt1h")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.expertise_action_weapon_4", 3);
|
|
setObjVar (item, "skillmod.bonus.expertise_critical_1h", 3);
|
|
setObjVar (item, "skillmod.bonus.combat_strikethrough_chance", 6);
|
|
}
|
|
|
|
else if (template == "shirtHealer")
|
|
{
|
|
setObjVar (item, "skillmod.bonus.expertise_healing_all", 4);
|
|
setObjVar (item, "skillmod.bonus.combat_parry", 5);
|
|
setObjVar (item, "skillmod.bonus.combat_critical_hit_reduction", 8);
|
|
}
|
|
|
|
}
|
|
|
|
/****************************************** CREATES POWERUPS ****************************************/
|
|
void createPup (obj_id player, String mod, string[] pup_items, int r)
|
|
{
|
|
obj_id pInv = utils.getInventoryContainer(player);
|
|
for ( int j = 0; j < pup_items.length; ++j )
|
|
{
|
|
int numPupCharges = 100;
|
|
int power = 90;
|
|
int ratio = r;
|
|
|
|
string pupString = pup_items[j];
|
|
obj_id powerup = static_item.createNewItemFunction(pupString, pInv);
|
|
setObjVar(powerup, "reverse_engineering.reverse_engineering_power", power);
|
|
setObjVar(powerup, "reverse_engineering.reverse_engineering_modifier", mod);
|
|
setObjVar(powerup, "reverse_engineering.reverse_engineering_ratio", ratio);
|
|
setCount(powerup, numPupCharges);
|
|
setName(powerup, "[QA] Powerup - " + mod);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
/******************************* GRANT ENTERTAINER AND MEDIC BUFFS ************************************/
|
|
|
|
void addEntBuff (obj_id recipientId)
|
|
{
|
|
obj_id bufferId = recipientId;
|
|
float currentBuffTime = performance.inspireGetMaxDuration(recipientId);
|
|
buff.applyBuff(recipientId, "buildabuff_inspiration", 3600);
|
|
utils.setScriptVar(recipientId, "performance.buildabuff.buffComponentKeys", buffComponentKeys);
|
|
utils.setScriptVar(recipientId, "performance.buildabuff.buffComponentValues", buffComponentValues);
|
|
utils.setScriptVar(recipientId, "performance.buildabuff.bufferId", bufferId);
|
|
|
|
buff.applyBuff((recipientId), "me_buff_health_2", 3600);
|
|
buff.applyBuff((recipientId), "me_buff_action_3", 3600);
|
|
buff.applyBuff((recipientId), "me_buff_strength_3", 3600);
|
|
buff.applyBuff((recipientId), "me_buff_agility_3", 3600);
|
|
buff.applyBuff((recipientId), "me_buff_precision_3", 3600);
|
|
buff.applyBuff((recipientId), "towPoisonResistAbsorb_3", 3600);
|
|
buff.applyBuff((recipientId), "drink_flameout", 3600);
|
|
sendSystemMessage(recipientId, "Buffs granted.", null);
|
|
|
|
}
|
|
|