mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-29 23:15:55 -04:00
1494 lines
51 KiB
Plaintext
1494 lines
51 KiB
Plaintext
//**********************************************************
|
||
// Copyright (c) ©2007 Sony Online Entertainment Inc.
|
||
// All Rights Reserved
|
||
//
|
||
// 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
|
||
//
|
||
//
|
||
// @author $Author: Mikkel Jensen
|
||
// @version $All Revisions:
|
||
//***********************************************************
|
||
/*
|
||
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);
|
||
debugConsoleMsg(self, text);
|
||
java.util.StringTokenizer tok = new java.util.StringTokenizer (text);
|
||
|
||
//pInv = players inventory
|
||
obj_id pInv = utils.getInventoryContainer(self);
|
||
|
||
if (text == "qasetup")
|
||
{
|
||
sendSystemMessage(self, "QA-Setup Commands - Say 'qasetup' to show this list", null);
|
||
sendSystemMessage(self, "Using a template code will set you character to level 90 with a preset expertise template, suitable weapon, ", 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, "", null);
|
||
sendSystemMessage(self, "'qa_buff' to grant your character a full set of buffs (Entertainer, Medic, Food and Mustafarian Injector buff", 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_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_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_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_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_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_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_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_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_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_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_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_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_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);
|
||
|
||
}
|
||
|