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

1494 lines
51 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//**********************************************************
// 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);
}