1 /* Title: terminal_character_builder.script
2 * Description: Script that drives the Character Builder Terminals
6 /***** INCLUDES ********************************************************/
7 include library.ai_lib;
9 include library.beast_lib;
11 include library.callable;
13 include library.consumable;
14 include library.craftinglib;
15 include library.create;
16 include library.expertise;
17 include library.factions;
19 include library.healing;
20 include library.incubator;
21 include library.instance;
23 include library.money;
24 include library.pet_lib;
25 include library.player_stomach;
26 include library.prose;
27 include library.resource;
28 include library.respec;
29 include library.skill;
30 include library.skill_template;
31 include library.space_crafting;
32 include library.space_flags;
33 include library.space_skill;
34 include library.space_transition;
35 include library.space_utils;
36 include library.static_item;
37 include library.stealth;
39 include library.utils;
40 include library.weapons;
41 include library.performance;
46 Old Republic one/two handed lightsaber
53 /***** INHERITS ********************************************************/
55 //inherits terminal.base.terminal_add_use;
58 /***** CONSTANTS *******************************************************/
60 const int CASH_AMOUNT = 100000000;
61 const int AMT = 1000000;
62 const int FACTION_AMT = 250000;
65 const float WEAPON_SPEED = 1.0f;
66 const float WEAPON_DAMAGE = 1.0f;
67 const float WEAPON_ELEMENTAL = 1.0f;
68 const float WEAPON_EFFECIENCY = 1.0f;
69 // WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL) to float speed, float damage, float effeciency, float elementalVal)
71 const float CONDITION = 1.0f;
72 const float GENERAL_PROTECTION = 0.94f; //general protection on armor range from 0 - 1.0
73 const string SKILL_TBL = "datatables/skill/skills.iff";
74 const string HEROIC_JEWELRY_SETS = "datatables/skill/character_builder_heroic_jewelry.iff";
75 const string SKILL_LOADOUT_TBL = "datatables/skill/loadout.iff";
76 const string EXOTIC_SKILL_MODS = "datatables/crafting/reverse_engineering_mods.iff";
78 const string SHIP_CHASSIS_TBL = "datatables/ship/components/character_builder/frog_chassis.iff";
79 const string SHIPCOMPONENT_ARMOR_TBL = "datatables/ship/components/character_builder/frog_armor.iff";
80 const string SHIPCOMPONENT_BOOSTER_TBL = "datatables/ship/components/character_builder/frog_booster.iff";
81 const string SHIPCOMPONENT_DROIDINTERFACE_TBL = "datatables/ship/components/character_builder/frog_droid_interface.iff";
82 const string SHIPCOMPONENT_ENGINE_TBL = "datatables/ship/components/character_builder/frog_engine.iff";
83 const string SHIPCOMPONENT_REACTOR_TBL = "datatables/ship/components/character_builder/frog_reactor.iff";
84 const string SHIPCOMPONENT_SHIELD_TBL = "datatables/ship/components/character_builder/frog_shield.iff";
85 const string SHIPCOMPONENT_WEAPON_TBL = "datatables/ship/components/character_builder/frog_weapon.iff";
86 const string SHIPCOMPONENT_CAPACITOR_TBL = "datatables/ship/components/character_builder/frog_capacitor.iff";
88 const string GENERIC_PROMPT = "Select the desired option";
89 const string GENERIC_TITLE = "Character Builder Terminal";
91 const string_id SID_TERMINAL_PROMPT = new string_id("skill_teacher","skill_terminal_prompt");
92 const string_id SID_TERMINAL_TITLE = new string_id("skill_teacher","skill_terminal_title");
93 const string_id SID_TERMINAL_DISABLED = new string_id("skill_teacher","skill_terminal_disabled");
94 const string_id SID_TERMINAL_DENIED = new string_id("skill_teacher","skill_terminal_denied");
95 const string_id SID_TERMINAL_MAX_SKILLS = new string_id("skill_teacher","skill_terminal_max_skills");
96 const string_id PROSE_GRANT_SKILL = new string_id("skill_teacher","skill_terminal_grant");
97 const string_id PROSE_GRANT_SKILL_FAIL = new string_id("skill_teacher","skill_terminal_grant_fail");
99 const string[] CHARACTER_BUILDER_OPTIONS = {
102 "Roadmap Skill Builder",
106 "Vehicles/Mounts/Beasts",
111 "Misc Items/Medicines",
114 "Flag for All Heroic Instances",
117 const string[] RESOURCE_TYPES = {
118 "Creature Resources",
128 const string[] BEST_RESOURCE_TYPES = {
129 "Creature Resources",
137 "Filter by specific attribute"
140 const string[] SPACE_RESOURCE_LOCALIZED =
142 "@resource/resource_names:space_chemical_acid",
143 "@resource/resource_names:space_chemical_cyanomethanic",
144 "@resource/resource_names:space_chemical_petrochem",
145 "@resource/resource_names:space_chemical_sulfuric",
146 "@resource/resource_names:space_gas_methane",
147 "@resource/resource_names:space_gas_organometallic",
148 "@resource/resource_names:space_gem_crystal",
149 "@resource/resource_names:space_gem_diamond",
150 "@resource/resource_names:space_metal_carbonaceous",
151 "@resource/resource_names:space_metal_ice",
152 "@resource/resource_names:space_metal_iron",
153 "@resource/resource_names:space_metal_obsidian",
154 "@resource/resource_names:space_metal_silicaceous"
158 const string[] SPACE_RESOURCE_CONST =
160 "space_chemical_acid",
161 "space_chemical_cyanomethanic",
162 "space_chemical_petrochem",
163 "space_chemical_sulfuric",
165 "space_gas_organometallic",
168 "space_metal_carbonaceous",
171 "space_metal_obsidian",
172 "space_metal_silicaceous"
175 const string[] RESOURCE_BASE_TYPES = {
176 "creature_resources",
185 const string[] VEHICLE_MOUNT_OPTIONS = {
189 "Make Beast Level 90",
190 "Increase Beast Loyalty",
191 "Master Taming Necklace"
193 const string[] VEHICLE_OPTIONS = {
206 "Merr-Sonn JT-12 Jetpack",
211 const string[] MOUNT_OPTIONS = {
218 "Cu Pa - Creature Handler Version",
219 "Bantha - Creature Handler Version"
222 const string[] BEAST_OPTIONS_FOR_PLAYERS = {
246 "corellian_butterfly",
247 "corellian_sand_panther",
248 "corellian_slice_hound",
316 "mutated_slice_hound",
317 "mutated_varasquactyl",
375 const string[] BEAST_OPTIONS = {
399 "corellian_butterfly",
400 "corellian_sand_panther",
401 "corellian_slice_hound",
469 "mutated_slice_hound",
470 "mutated_varasquactyl",
527 const string[] SHIP_OPTIONS = {
535 const string[] REBEL_SHIP_OPTIONS = {
544 "YKL-37R Nova Courier"
546 const string[] REBEL_SHIP_TYPES = {
557 const string[] IMPERIAL_SHIP_OPTIONS = {
558 "Imperial YE-4 Gunship",
559 "TIE Fighter (Light Duty)",
566 "TIE Interceptor (Imperial Guard)",
569 const string[] IMPERIAL_SHIP_TYPES = {
578 "tieinterceptor_imperial_guard",
581 const string[] FREELANCE_SHIP_OPTIONS = {
582 "Blacksun AEG-77 Vigo Gunship",
593 const string[] FREELANCE_SHIP_TYPES = {
599 "blacksun_light_s01",
600 "blacksun_medium_s01",
601 "blacksun_heavy_s01",
605 const string[] OTHER_SHIP_OPTIONS = {
607 "Eta-2 Actis (Jedi Starfighter)",
608 "Belbullab-22 (Grievous' Starship)",
615 const string[] OTHER_SHIP_TYPES = {
616 "sorosuub_space_yacht",
625 const string[] MAIN_SHIP_OPTIONS = {
628 "Gunship Collection Reward Schematics",
629 "Component Schematics",
633 const string[] PILOT_SKILLS = { "Master Imperial Pilot",
634 "Master Rebel Pilot",
639 const string[] DEED_CRAFTING_OPTIONS = {
643 const string[] DEED_OPTIONS = {
649 "Small Tatooine House",
651 "Small Corellia House",
653 "Heavy Mineral Harvester",
654 "Heavy Flora Harvester",
655 "Heavy Gas Harvester",
656 "Heavy Chemical Harvester",
657 "Heavy Moisture Vaporator",
659 "Corellia City Pack",
665 const string[] CRAFTING_OPTIONS = {
666 "Weapon Crafting Station",
667 "Structure Crafting Station",
668 "Clothing Crafting Station",
669 "Food Crafting Station",
670 "Generic Crafting Tool",
671 "Weapon Crafting Tool",
672 "Structure Crafting Tool",
673 "Clothing Crafting Tool",
674 "Food Crafting Tool",
675 "Ship Crafting Tool",
676 "Ship Crafting Station"
679 const string[] PA_OPTIONS = {
684 "Tatooine City Hall",
689 const string[] WEAPON_OPTIONS = {
695 "One-Handed Weapons",
696 "Two-Handed Weapons",
698 "Battlefield Weapons"
701 const string[] PISTOL_OPTIONS = {
704 "Geonosian Sonic Blaster",
707 "High Capacity Scatter Pistol",
719 "Alliance Disruptor",
733 const string[] CARBINE_OPTIONS = {
738 "E11 Carbine Mark 2",
749 "Czerka Dart Carbine",
754 const string[] RIFLE_OPTIONS = {
755 "BWDL19 Rifle (Death Trooper)",
756 "TC-22 Blaster Rifle Replica (GCW Rifle)",
757 "Jinkins J-1 Rifle (Nym's Themepark)",
762 "Advanced Laser Rifle",
775 "High Velocity Sniper Rifle",
777 "Massassi Ink Rifle",
781 "Heavy Lightning Rifle",
783 "Mustafar Disruptor Rifle",
787 const string[] HEAVY_WEAPON_OPTIONS = {
789 "Plasma Flame Thrower",
791 "Light Lightning Canon",
793 "Heavy Lighting Beam",
794 "Heavy Particle Beam",
796 "Heavy Republic Flame Thrower",
798 "Crusader M-XX Heavy Rifle",
799 "C-M 'Frag Storm' Heavy Shotgun",
800 "Devastator Acid Launcher",
801 "CC-V 'Legion' Cryo Projector"
803 const string[] UNARMED_OPTIONS = {
808 "Guardian Blaster Fist"
811 const string[] ONEHANDED_OPTIONS = {
831 "Mustafar Bandit Sword",
835 const string[] TWOHANDED_OPTIONS = {
846 "Black Sun Executioner's Hack",
849 "Massassi Enforcer Blade"
852 const string[] POLEARM_OPTIONS = {
859 "Kaminoan Great Staff",
863 "Kashyyk BladeStick",
865 "Nightsister Energy Lance",
869 "Acidic Paragon Vibro Axe"
871 const string[] GRENADE_OPTIONS = {
872 "Light Fragmentation Grenade",
873 "Fragmentation Grenade",
874 "Imperial Detonator",
882 const string[] BATTLEFIELD_WEAPON_OPTIONS = {
883 "Westar-34 Blaster Pistol",
884 "NGant-Zarvel 9118 Carbine",
885 "Westar-M5 Blaster Rifle",
890 "Magnaguard Electrostaff",
891 "One-Handed Sith-Saber Hilt",
892 "Two-Handed Mysterious Lightsaber Hilt",
893 "Double-Bladed Darth Phobos Lightsaber Hilt"
896 const string[] ARMOR_OPTIONS = {
897 "Assault Armor, For Classes: Commando, Bounty Hunter",
898 "Battle Armor, For Classes: Spy, Officer",
899 "Reconnaissance Armor, For Classes: Medic, Smuggler",
900 "Personal Shield Generators",
901 "Combat Enhancement Items",
906 const string[] ARMOR_ASSAULT_OPTIONS = {
907 "Composite Armor Set",
908 "Marauder Assault Armor Set",
910 "Crafted Bounty Hunter Armor Set",
911 "Kashyyykian Hunting Armor Set",
912 "Ithorian Sentinel Armor Set",
913 "Shocktrooper (Imperial Factional) Armor Set",
914 "Rebel Assault (Rebel Factional) Armor Set"
916 const string[] ARMOR_BATTLE_OPTIONS = {
918 "Marauder Battle Armor Set",
921 "Kashyyykian Black Mountain Armor Set",
922 "Ithorian Defender Armor Set",
923 "Stormtrooper (Imperial Factional) Armor Set",
924 "Rebel Battle (Rebel Factional) Armor Set",
925 "Imperial Snowtrooper Armor Set"
927 const string[] ARMOR_RECON_OPTIONS = {
931 "Recon Marauder Set",
932 "Kashyyykian Ceremonial Armor Set",
933 "Ithorian Guardian Armor Set",
934 "Scout Trooper (Imperial Factional) Armor Set",
935 "Marine Rebel (Rebel Factional) Armor Set",
936 "Alliance Cold Weather Armor set"
938 const string[] ARMOR_PROTECTION_AMOUNT = {
943 const string[] ARMOR_PSG_OPTIONS = {
948 const string[] ARMOR_ENHANCEMENT_OPTIONS = {
949 "Combat Enhancement Ring"
953 const string[] ARMOR_PVP_SETS = {
954 "Imperial Black PvP",
955 "Imperial White PvP",
958 "Galactic Marine Armor Set",
959 "Rebel SpecForce Armor Set"
962 const string[] MISCITEM_OPTIONS = {
967 "Exotic Attachments",
969 "Basic Armor Attachments",
970 "Basic Clothing Attachments",
974 const string[] CLOTHING_OPTIONS = {
985 const string[] ATTACHMENT_OPTIONS = {
992 const string[] MISC_OPTIONS = {
997 "Snowtrooper Backpack",
998 "Alliance Cold Weather Backpack",
999 "Arakyd Probe Droid",
1001 "Master Crafted EE3 Schematic",
1002 "Master Crafted DC-15 Schematic",
1003 "Vet 30k Resource Deed",
1004 "Biological Focus Crystal",
1005 "Synapse Focus Crystal",
1006 "Mustafarian Injector",
1007 "Naboo Signaling Unit",
1010 const string[] MEDICINE_OPTIONS = {
1011 "High Charge Stimpack-A",
1012 "High Charge Stimpack-B",
1013 "High Charge Stimpack-C",
1014 "High Charge Stimpack-D"
1016 // "Bacta Infusion Enhancer",
1017 // "Bacta Jab Enhancer",
1018 // "Bacta Shot Enhancer",
1019 // "Bacta Spray Enhancer",
1020 // "Bacta Toss Enhancer",
1021 // "Deuterium Toss Enhancer",
1022 // "Disinfect Enhancer",
1023 // "Endorphone Injection Enhancer",
1024 // "Neurotoxin Enhancer",
1025 // "Nutrient Injection Enhancer",
1026 // "Stabilizer Enhancer",
1027 // "Thyroid Rupture Enhancer",
1028 // "Traumatize Enhancer"
1030 const string[] HEAL_OPTIONS = {
1032 "Heal Battle Fatigue"
1035 const string[] SMUGGLER_TOOLS_OPTIONS = {
1037 "Finely Crafted Toolset",
1038 "Trandoshan Interframe",
1040 "Illegal Core Booster",
1041 "Mandalorian Interframe",
1045 const string[] FACTION_OPTIONS = {
1046 "Receive Faction Points",
1047 "Declare Faction Rebel",
1048 "Declare Faction Imperial",
1049 // "Declare [OVERT] Faction Status",
1050 // "Declare (COVERT) Faction Status",
1051 "Gain One Faction Rank",
1052 "Lose One Faction Rank",
1053 "Resign From Current Faction"
1055 //const string[] FACTION_OPTIONS = {
1056 // "Receive Imperial Faction Points",
1057 // "Receive Rebel Faction Points"
1060 const string[] ROADMAP_SKILL_OPTIONS = {
1062 "Earn Current Skill",
1064 "Level 90 - Reset respecs"
1067 const string[] JEDI_OPTIONS = {
1071 // "Designer Playtest"
1072 // "DEPRECATING DO NOT USE: Enable Jedi Skills"
1074 const string[] PUBLISH_OPTIONS = {
1078 "Death Watch Bunker Entrance Flag",
1079 "Spy Camouflage Gear"
1082 const string[] CRYSTAL_OPTIONS = {
1086 "Ancient Krayt Pearls"
1089 const string[] SABER_OPTIONS = {
1091 "Generation One Sabers",
1092 "Generation Two Sabers",
1093 "Generation Three Sabers",
1094 "Generation Four Sabers",
1095 "Generation Five Sabers"
1097 const string[] JEDI_PLAYTEST_OPTIONS = {
1098 "Level 26 Playtest",
1101 const string[] ROBE_OPTIONS = {
1103 "(40)Light Acolyte Robe",
1104 "(40)Dark Acolyte Robe",
1105 "(60)Light Apprentice Robe",
1106 "(60)Dark Apprentice Robe",
1107 "(80)Light Jedi Knight Robe",
1108 "(80)Dark Jedi Knight Robe",
1109 "(80)Jedi Master Cloak Brown",
1110 "(80)Jedi Master Cloak Black",
1111 "(80)Elder Jedi Arbiter Robe",
1112 "(80)Elder Jedi Oppressor Robe",
1113 "Reset Jedi Statue Slots for Master Jedi Cloaks Collection"
1115 const string ARMOR_SET_PREFIX = "object/tangible/wearables/armor/";
1116 const string[] ARMOR_SET_ASSAULT_1 = {
1117 "composite/armor_composite_bicep_l.iff",
1118 "composite/armor_composite_chest_plate.iff",
1119 "composite/armor_composite_bicep_r.iff",
1120 "composite/armor_composite_gloves.iff",
1121 "composite/armor_composite_boots.iff",
1122 "composite/armor_composite_helmet.iff",
1123 "composite/armor_composite_bracer_l.iff",
1124 "composite/armor_composite_leggings.iff",
1125 "composite/armor_composite_bracer_r.iff"
1127 const string[] ARMOR_SET_ASSAULT_2 = {
1128 "chitin/armor_chitin_s01_bicep_l.iff",
1129 "chitin/armor_chitin_s01_bicep_r.iff",
1130 "chitin/armor_chitin_s01_boots.iff",
1131 "chitin/armor_chitin_s01_bracer_l.iff",
1132 "chitin/armor_chitin_s01_bracer_r.iff",
1133 "chitin/armor_chitin_s01_chest_plate.iff",
1134 "chitin/armor_chitin_s01_gloves.iff",
1135 "chitin/armor_chitin_s01_helmet.iff",
1136 "chitin/armor_chitin_s01_leggings.iff"
1138 const string[] ARMOR_SET_ASSAULT_3 = {
1139 "marauder/armor_marauder_s03_bicep_l.iff",
1140 "marauder/armor_marauder_s03_bicep_r.iff",
1141 "marauder/armor_marauder_s03_boots.iff",
1142 "marauder/armor_marauder_s03_bracer_l.iff",
1143 "marauder/armor_marauder_s03_bracer_r.iff",
1144 "marauder/armor_marauder_s03_chest_plate.iff",
1145 "marauder/armor_marauder_s03_gloves.iff",
1146 "marauder/armor_marauder_s03_helmet.iff",
1147 "marauder/armor_marauder_s03_leggings.iff"
1149 const string[] ARMOR_SET_ASSAULT_4 = {
1150 "bounty_hunter/armor_bounty_hunter_crafted_bicep_l.iff",
1151 "bounty_hunter/armor_bounty_hunter_crafted_bicep_r.iff",
1152 "bounty_hunter/armor_bounty_hunter_crafted_boots.iff",
1153 "bounty_hunter/armor_bounty_hunter_crafted_bracer_l.iff",
1154 "bounty_hunter/armor_bounty_hunter_crafted_bracer_r.iff",
1155 "bounty_hunter/armor_bounty_hunter_crafted_chest_plate.iff",
1156 "bounty_hunter/armor_bounty_hunter_crafted_gloves.iff",
1157 "bounty_hunter/armor_bounty_hunter_crafted_helmet.iff",
1158 "bounty_hunter/armor_bounty_hunter_crafted_leggings.iff"
1160 const string[] ARMOR_SET_BATTLE_1 = {
1161 "bone/armor_bone_s01_bicep_l.iff",
1162 "bone/armor_bone_s01_bicep_r.iff",
1163 "bone/armor_bone_s01_boots.iff",
1164 "bone/armor_bone_s01_bracer_l.iff",
1165 "bone/armor_bone_s01_bracer_r.iff",
1166 "bone/armor_bone_s01_chest_plate.iff",
1167 "bone/armor_bone_s01_gloves.iff",
1168 "bone/armor_bone_s01_helmet.iff",
1169 "bone/armor_bone_s01_leggings.iff"
1171 const string[] ARMOR_SET_BATTLE_2 = {
1172 "marauder/armor_marauder_s01_bicep_l.iff",
1173 "marauder/armor_marauder_s01_bicep_r.iff",
1174 "marauder/armor_marauder_s01_boots.iff",
1175 "marauder/armor_marauder_s01_bracer_l.iff",
1176 "marauder/armor_marauder_s01_bracer_r.iff",
1177 "marauder/armor_marauder_s01_chest_plate.iff",
1178 "marauder/armor_marauder_s01_gloves.iff",
1179 "marauder/armor_marauder_s01_helmet.iff",
1180 "marauder/armor_marauder_s01_leggings.iff"
1182 const string[] ARMOR_SET_BATTLE_3 = {
1183 "padded/armor_padded_s01_bicep_l.iff",
1184 "padded/armor_padded_s01_bicep_r.iff",
1185 "padded/armor_padded_s01_boots.iff",
1186 "padded/armor_padded_s01_bracer_l.iff",
1187 "padded/armor_padded_s01_bracer_r.iff",
1188 "padded/armor_padded_s01_chest_plate.iff",
1189 "padded/armor_padded_s01_gloves.iff",
1190 "padded/armor_padded_s01_helmet.iff",
1191 "padded/armor_padded_s01_leggings.iff"
1193 const string[] ARMOR_SET_BATTLE_4 = {
1194 "ris/armor_ris_bicep_l.iff",
1195 "ris/armor_ris_bracer_l.iff",
1196 "ris/armor_ris_gloves.iff",
1197 "ris/armor_ris_bicep_r.iff",
1198 "ris/armor_ris_bracer_r.iff",
1199 "ris/armor_ris_helmet.iff",
1200 "ris/armor_ris_boots.iff",
1201 "ris/armor_ris_chest_plate.iff",
1202 "ris/armor_ris_leggings.iff"
1204 const string[] ARMOR_SET_RECON_1 = {
1205 "zam/armor_zam_wesell_helmet.iff",
1206 "zam/armor_zam_wesell_boots.iff",
1207 "zam/armor_zam_wesell_chest_plate.iff",
1208 "zam/armor_zam_wesell_pants.iff",
1209 "zam/armor_zam_wesell_gloves.iff"
1211 const string[] ARMOR_SET_RECON_2 = {
1212 "marauder/armor_marauder_s02_bicep_l.iff",
1213 "marauder/armor_marauder_s02_bicep_r.iff",
1214 "marauder/armor_marauder_s02_boots.iff",
1215 "marauder/armor_marauder_s02_bracer_l.iff",
1216 "marauder/armor_marauder_s02_bracer_r.iff",
1217 "marauder/armor_marauder_s02_chest_plate.iff",
1218 "marauder/armor_marauder_s02_gloves.iff",
1219 "marauder/armor_marauder_s02_helmet.iff",
1220 "marauder/armor_marauder_s02_leggings.iff"
1222 const string[] ARMOR_SET_RECON_3 = {
1223 "tantel/armor_tantel_skreej_bicep_l.iff",
1224 "tantel/armor_tantel_skreej_chest_plate.iff",
1225 "tantel/armor_tantel_skreej_bicep_r.iff",
1226 "tantel/armor_tantel_skreej_boots.iff",
1227 "tantel/armor_tantel_skreej_gloves.iff",
1228 "tantel/armor_tantel_skreej_helmet.iff",
1229 "tantel/armor_tantel_skreej_bracer_l.iff",
1230 "tantel/armor_tantel_skreej_bracer_r.iff",
1231 "tantel/armor_tantel_skreej_leggings.iff"
1233 const string[] ARMOR_SET_RECON_4 = {
1234 "ubese/armor_ubese_boots.iff",
1235 "ubese/armor_ubese_jacket.iff",
1236 "ubese/armor_ubese_bracer_l.iff",
1237 "ubese/armor_ubese_bracer_r.iff",
1238 "ubese/armor_ubese_pants.iff",
1239 "ubese/armor_ubese_gloves.iff",
1240 "ubese/armor_ubese_helmet.iff",
1241 "ubese/armor_ubese_shirt.iff"
1243 const string[] ARMOR_SET_ASSAULT_ITHORIAN = {
1244 "ithorian_sentinel/ith_armor_s03_bicep_l.iff",
1245 "ithorian_sentinel/ith_armor_s03_chest_plate.iff",
1246 "ithorian_sentinel/ith_armor_s03_bicep_r.iff",
1247 "ithorian_sentinel/ith_armor_s03_gloves.iff",
1248 "ithorian_sentinel/ith_armor_s03_boots.iff",
1249 "ithorian_sentinel/ith_armor_s03_helmet.iff",
1250 "ithorian_sentinel/ith_armor_s03_bracer_l.iff",
1251 "ithorian_sentinel/ith_armor_s03_leggings.iff",
1252 "ithorian_sentinel/ith_armor_s03_bracer_r.iff"
1254 const string[] ARMOR_SET_BATTLE_ITHORIAN = {
1255 "ithorian_defender/ith_armor_s01_bicep_l.iff",
1256 "ithorian_defender/ith_armor_s01_chest_plate.iff",
1257 "ithorian_defender/ith_armor_s01_bicep_r.iff",
1258 "ithorian_defender/ith_armor_s01_gloves.iff",
1259 "ithorian_defender/ith_armor_s01_boots.iff",
1260 "ithorian_defender/ith_armor_s01_helmet.iff",
1261 "ithorian_defender/ith_armor_s01_bracer_l.iff",
1262 "ithorian_defender/ith_armor_s01_leggings.iff",
1263 "ithorian_defender/ith_armor_s01_bracer_r.iff"
1265 const string[] ARMOR_SET_RECON_ITHORIAN = {
1266 "ithorian_guardian/ith_armor_s02_bicep_l.iff",
1267 "ithorian_guardian/ith_armor_s02_chest_plate.iff",
1268 "ithorian_guardian/ith_armor_s02_bicep_r.iff",
1269 "ithorian_guardian/ith_armor_s02_gloves.iff",
1270 "ithorian_guardian/ith_armor_s02_boots.iff",
1271 "ithorian_guardian/ith_armor_s02_helmet.iff",
1272 "ithorian_guardian/ith_armor_s02_bracer_l.iff",
1273 "ithorian_guardian/ith_armor_s02_leggings.iff",
1274 "ithorian_guardian/ith_armor_s02_bracer_r.iff"
1276 const string[] ARMOR_SET_ASSAULT_WOOKIEE = {
1277 "kashyyykian_hunting/armor_kashyyykian_hunting_bicep_l.iff",
1278 "kashyyykian_hunting/armor_kashyyykian_hunting_bicep_r.iff",
1279 "kashyyykian_hunting/armor_kashyyykian_hunting_bracer_l.iff",
1280 "kashyyykian_hunting/armor_kashyyykian_hunting_bracer_r.iff",
1281 "kashyyykian_hunting/armor_kashyyykian_hunting_chestplate.iff",
1282 "kashyyykian_hunting/armor_kashyyykian_hunting_leggings.iff"
1284 const string[] ARMOR_SET_BATTLE_WOOKIEE = {
1285 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bicep_l.iff",
1286 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bicep_r.iff",
1287 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bracer_l.iff",
1288 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_bracer_r.iff",
1289 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_chestplate.iff",
1290 "kashyyykian_black_mtn/armor_kashyyykian_black_mtn_leggings.iff"
1292 const string[] ARMOR_SET_RECON_WOOKIEE = {
1293 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bicep_l.iff",
1294 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bicep_r.iff",
1295 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bracer_l.iff",
1296 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_bracer_r.iff",
1297 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_chestplate.iff",
1298 "kashyyykian_ceremonial/armor_kashyyykian_ceremonial_leggings.iff"
1300 const string[] ARMOR_SET_ASSAULT_IMPERIAL = {
1301 "assault_trooper/armor_assault_trooper_chest_plate.iff",
1302 "assault_trooper/armor_assault_trooper_leggings.iff",
1303 "assault_trooper/armor_assault_trooper_helmet.iff",
1304 "assault_trooper/armor_assault_trooper_bicep_l.iff",
1305 "assault_trooper/armor_assault_trooper_bicep_r.iff",
1306 "assault_trooper/armor_assault_trooper_bracer_l.iff",
1307 "assault_trooper/armor_assault_trooper_bracer_r.iff",
1308 "assault_trooper/armor_assault_trooper_boots.iff",
1309 "assault_trooper/armor_assault_trooper_gloves.iff"
1311 const string[] ARMOR_SET_BATTLE_IMPERIAL = {
1312 "stormtrooper/armor_stormtrooper_chest_plate.iff",
1313 "stormtrooper/armor_stormtrooper_leggings.iff",
1314 "stormtrooper/armor_stormtrooper_helmet.iff",
1315 "stormtrooper/armor_stormtrooper_bicep_l.iff",
1316 "stormtrooper/armor_stormtrooper_bicep_r.iff",
1317 "stormtrooper/armor_stormtrooper_bracer_l.iff",
1318 "stormtrooper/armor_stormtrooper_bracer_r.iff",
1319 "stormtrooper/armor_stormtrooper_boots.iff",
1320 "stormtrooper/armor_stormtrooper_gloves.iff"
1322 const string[] ARMOR_SET_RECON_IMPERIAL = {
1323 "scout_trooper/armor_scout_trooper_chest_plate.iff",
1324 "scout_trooper/armor_scout_trooper_leggings.iff",
1325 "scout_trooper/armor_scout_trooper_helmet.iff",
1326 "scout_trooper/armor_scout_trooper_bicep_l.iff",
1327 "scout_trooper/armor_scout_trooper_bicep_r.iff",
1328 "scout_trooper/armor_scout_trooper_bracer_l.iff",
1329 "scout_trooper/armor_scout_trooper_bracer_r.iff",
1330 "scout_trooper/armor_scout_trooper_boots.iff",
1331 "scout_trooper/armor_scout_trooper_gloves.iff"
1333 const string[] ARMOR_SET_ASSAULT_REBEL = {
1334 "rebel_assault/armor_rebel_assault_chest_plate.iff",
1335 "rebel_assault/armor_rebel_assault_leggings.iff",
1336 "rebel_assault/armor_rebel_assault_helmet.iff",
1337 "rebel_assault/armor_rebel_assault_bicep_l.iff",
1338 "rebel_assault/armor_rebel_assault_bicep_r.iff",
1339 "rebel_assault/armor_rebel_assault_bracer_l.iff",
1340 "rebel_assault/armor_rebel_assault_bracer_r.iff",
1341 "rebel_assault/armor_rebel_assault_boots.iff",
1342 "rebel_assault/armor_rebel_assault_gloves.iff"
1344 const string[] ARMOR_SET_BATTLE_REBEL = {
1345 "rebel_battle/armor_rebel_battle_chest_plate.iff",
1346 "rebel_battle/armor_rebel_battle_leggings.iff",
1347 "rebel_battle/armor_rebel_battle_helmet.iff",
1348 "rebel_battle/armor_rebel_battle_bicep_l.iff",
1349 "rebel_battle/armor_rebel_battle_bicep_r.iff",
1350 "rebel_battle/armor_rebel_battle_bracer_l.iff",
1351 "rebel_battle/armor_rebel_battle_bracer_r.iff",
1352 "rebel_battle/armor_rebel_battle_boots.iff",
1353 "rebel_battle/armor_rebel_battle_gloves.iff"
1355 const string[] ARMOR_SET_BATTLE_SNOWTROOPER = {
1356 "snowtrooper/armor_snowtrooper_chest_plate.iff",
1357 "snowtrooper/armor_snowtrooper_leggings.iff",
1358 "snowtrooper/armor_snowtrooper_helmet.iff",
1359 "snowtrooper/armor_snowtrooper_bicep_l.iff",
1360 "snowtrooper/armor_snowtrooper_bicep_r.iff",
1361 "snowtrooper/armor_snowtrooper_bracer_l.iff",
1362 "snowtrooper/armor_snowtrooper_bracer_r.iff",
1363 "snowtrooper/armor_snowtrooper_boots.iff",
1364 "snowtrooper/armor_snowtrooper_gloves.iff",
1365 "snowtrooper/armor_snowtrooper_belt.iff"
1367 const string[] ARMOR_SET_RECON_REBEL = {
1368 "marine/armor_marine_chest_plate_rebel.iff",
1369 "marine/armor_marine_leggings.iff",
1370 "marine/armor_marine_helmet.iff",
1371 "marine/armor_marine_bicep_l.iff",
1372 "marine/armor_marine_bicep_r.iff",
1373 "marine/armor_marine_bracer_l.iff",
1374 "marine/armor_marine_bracer_r.iff",
1375 "marine/armor_marine_boots.iff",
1376 "marine/armor_marine_gloves.iff"
1379 const string[] ARMOR_SET_REBEL_SNOW = {
1380 "rebel_snow/armor_rebel_snow_chest_plate.iff",
1381 "rebel_snow/armor_rebel_snow_leggings.iff",
1382 "rebel_snow/armor_rebel_snow_helmet.iff",
1383 "rebel_snow/armor_rebel_snow_bicep_l.iff",
1384 "rebel_snow/armor_rebel_snow_bicep_r.iff",
1385 "rebel_snow/armor_rebel_snow_bracer_l.iff",
1386 "rebel_snow/armor_rebel_snow_bracer_r.iff",
1387 "rebel_snow/armor_rebel_snow_boots.iff",
1388 "rebel_snow/armor_rebel_snow_gloves.iff",
1389 "rebel_snow/armor_rebel_snow_belt.iff"
1393 const string[] ARMOR_SET_PVP_IMPERIAL_BLACK = {
1394 "armor_pvp_spec_ops_imperial_black_bicep_l_05_01",
1395 "armor_pvp_spec_ops_imperial_black_bicep_r_05_01",
1396 "armor_pvp_spec_ops_imperial_black_boots_05_01",
1397 "armor_pvp_spec_ops_imperial_black_bracer_l_05_01",
1398 "armor_pvp_spec_ops_imperial_black_bracer_r_05_01",
1399 "armor_pvp_spec_ops_imperial_black_chest_plate_orange_pad_05_01",
1400 "armor_pvp_spec_ops_imperial_black_chest_plate_red_pad_05_01",
1401 "armor_pvp_spec_ops_imperial_black_chest_plate_yellow_pad_05_01",
1402 "armor_pvp_spec_ops_imperial_black_chest_plate_blue_pad_05_01",
1403 "armor_pvp_spec_ops_imperial_black_chest_plate_white_pad_05_01",
1404 "armor_pvp_spec_ops_imperial_black_chest_plate_black_pad_05_01",
1405 "armor_pvp_spec_ops_imperial_black_gloves_05_01",
1406 "armor_pvp_spec_ops_imperial_black_helmet_05_01",
1407 "armor_pvp_spec_ops_imperial_black_leggings_05_01"
1410 const string[] ARMOR_SET_PVP_IMPERIAL_WHITE = {
1411 "armor_pvp_spec_ops_imperial_white_bicep_l_05_01",
1412 "armor_pvp_spec_ops_imperial_white_bicep_r_05_01",
1413 "armor_pvp_spec_ops_imperial_white_boots_05_01",
1414 "armor_pvp_spec_ops_imperial_white_bracer_l_05_01",
1415 "armor_pvp_spec_ops_imperial_white_bracer_r_05_01",
1416 "armor_pvp_spec_ops_imperial_white_chest_plate_orange_pad_05_01",
1417 "armor_pvp_spec_ops_imperial_white_chest_plate_red_pad_05_01",
1418 "armor_pvp_spec_ops_imperial_white_chest_plate_yellow_pad_05_01",
1419 "armor_pvp_spec_ops_imperial_white_chest_plate_blue_pad_05_01",
1420 "armor_pvp_spec_ops_imperial_white_chest_plate_white_pad_05_01",
1421 "armor_pvp_spec_ops_imperial_white_chest_plate_black_pad_05_01",
1422 "armor_pvp_spec_ops_imperial_white_gloves_05_01",
1423 "armor_pvp_spec_ops_imperial_white_helmet_05_01",
1424 "armor_pvp_spec_ops_imperial_white_leggings_05_01"
1427 const string[] ARMOR_SET_PVP_REBEL_GREY = {
1428 "armor_pvp_spec_ops_rebel_black_grey_bicep_l_05_01",
1429 "armor_pvp_spec_ops_rebel_black_grey_bicep_r_05_01",
1430 "armor_pvp_spec_ops_rebel_black_grey_boots_05_01",
1431 "armor_pvp_spec_ops_rebel_black_grey_bracer_l_05_01",
1432 "armor_pvp_spec_ops_rebel_black_grey_bracer_r_05_01",
1433 "armor_pvp_spec_ops_rebel_black_grey_gloves_05_01",
1434 "armor_pvp_spec_ops_rebel_black_grey_helmet_05_01",
1435 "armor_pvp_spec_ops_rebel_black_grey_leggings_05_01",
1436 "armor_pvp_spec_ops_rebel_black_grey_chest_plate_05_01",
1437 "armor_pvp_spec_ops_rebel_black_black_chest_plate_05_01"
1440 const string[] ARMOR_SET_PVP_REBEL_GREEN = {
1441 "armor_pvp_spec_ops_rebel_black_green_bicep_l_05_01",
1442 "armor_pvp_spec_ops_rebel_black_green_bicep_r_05_01",
1443 "armor_pvp_spec_ops_rebel_black_green_boots_05_01",
1444 "armor_pvp_spec_ops_rebel_black_green_bracer_l_05_01",
1445 "armor_pvp_spec_ops_rebel_black_green_bracer_r_05_01",
1446 "armor_pvp_spec_ops_rebel_black_green_gloves_05_01",
1447 "armor_pvp_spec_ops_rebel_black_green_helmet_05_01",
1448 "armor_pvp_spec_ops_rebel_black_green_leggings_05_01",
1449 "armor_pvp_spec_ops_rebel_black_green_chest_plate_05_01",
1450 "armor_pvp_spec_ops_rebel_black_black_chest_plate_05_01"
1453 const string[] ARMOR_SET_ASSUALT_GALACTIC_MARINE = {
1454 "armor_galactic_marine_bicep_l",
1455 "armor_galactic_marine_bicep_r",
1456 "armor_galactic_marine_boots",
1457 "armor_galactic_marine_bracer_l",
1458 "armor_galactic_marine_bracer_r",
1459 "armor_galactic_marine_chest_plate",
1460 "armor_galactic_marine_gloves",
1461 "armor_galactic_marine_helmet",
1462 "armor_galactic_marine_leggings",
1463 "armor_galactic_marine_belt"
1466 const string[] ARMOR_SET_ASSUALT_REBEL_SPECFORCE = {
1467 "armor_rebel_spec_force_bicep_l",
1468 "armor_rebel_spec_force_bicep_r",
1469 "armor_rebel_spec_force_boots",
1470 "armor_rebel_spec_force_bracer_l",
1471 "armor_rebel_spec_force_bracer_r",
1472 "armor_rebel_spec_force_chest_plate",
1473 "armor_rebel_spec_force_gloves",
1474 "armor_rebel_spec_force_helmet",
1475 "armor_rebel_spec_force_leggings",
1476 "armor_rebel_spec_force_belt"
1480 const string[][] ARMOR_SETS_ASSAULT = {
1481 ARMOR_SET_ASSAULT_1,
1482 ARMOR_SET_ASSAULT_2,
1485 const string[][] ARMOR_SETS_BATTLE = {
1491 const string[][] ARMOR_SETS_RECON = {
1498 const string[] CYBERNETIC_ITEMS = {
1499 "object/tangible/wearables/cybernetic/s02/cybernetic_s02_arm_l.iff",
1500 "object/tangible/wearables/cybernetic/s02/cybernetic_s02_arm_r.iff",
1501 "object/tangible/wearables/cybernetic/s02/cybernetic_s02_legs.iff",
1502 "object/tangible/wearables/cybernetic/s03/cybernetic_s03_arm_l.iff",
1503 "object/tangible/wearables/cybernetic/s03/cybernetic_s03_arm_r.iff",
1504 "object/tangible/wearables/cybernetic/s05/cybernetic_s05_arm_l.iff",
1505 "object/tangible/wearables/cybernetic/s05/cybernetic_s05_arm_r.iff",
1506 "object/tangible/wearables/cybernetic/s05/cybernetic_s05_legs.iff"
1509 const string[] PUB27_HEAVYPACK = {
1510 "object/weapon/ranged/heavy/ep3_loot_void.iff",
1511 "object/weapon/ranged/heavy/heavy_rocket_launcher.iff",
1512 "weapon_tow_heavy_rocket_launcher_05_01",
1513 /*"object/weapon/ranged/heavy/quest_heavy_rocket_launcher.iff",*/
1514 "object/weapon/ranged/rifle/rifle_odararissl.iff",
1515 "object/weapon/ranged/rifle/rifle_proton.iff",
1516 "object/weapon/ranged/heavy/som_lava_cannon.iff",
1517 "weapon_tow_cannon_03_02",
1518 "object/weapon/ranged/heavy/som_republic_flamer.iff",
1519 "weapon_tow_flamer_01_01",
1520 "weapon_publish_gift_27_04_01",
1521 "object/weapon/ranged/pistol/pistol_launcher.iff",
1522 "object/weapon/ranged/pistol/pistol_launcher_elite.iff",
1523 /*"object/weapon/ranged/pistol/pistol_launcher_generic.iff", */
1524 "object/weapon/ranged/pistol/pistol_launcher_medium.iff",
1525 "object/weapon/ranged/pistol/quest_pistol_launcher.iff",
1526 "object/weapon/ranged/rifle/rifle_acid_beam.iff",
1527 "object/weapon/ranged/rifle/rifle_flame_thrower.iff",
1528 "object/weapon/ranged/rifle/rifle_flame_thrower_light.iff"
1532 const string[] PUB27_TRAPS = {
1536 "prx_trapFlashbang",
1537 "tmr_trapFlashbang",
1538 "rmt_trapFlashbang",
1547 const string[] PUB27_CAMOSTUFF = {
1548 "item_clothing_spy_stealth_shirt_02_01",
1549 "item_clothing_spy_stealth_pants_02_01",
1550 "item_clothing_spy_stealth_duster_02_01",
1551 "item_clothing_spy_stealth_gloves_02_01",
1552 "item_clothing_spy_stealth_boots_02_01"
1555 const string[] SPACE_LOOT_CATEGORIES =
1565 "Looted Droid Interface"
1568 const string[] CRAFTING_PROFESSIONS = {
1576 // These are in order for Domestics, Engineering, Structure, and Weaponsmith
1577 const string[] CRAFTING_SKILL_TEMPLATES = {
1585 const string[] COLLECTION_COMPONENT_SCHEMS = {
1586 "Collection Boosters",
1587 "Collection Capacitors",
1588 "Collection Engines",
1589 "Collection Reactors",
1590 "Nova Orion Weapons and Engines",
1594 const string[] BASIC_MOD_STRINGS= { "precision_modified",
1595 "strength_modified",
1598 "constitution_modified",
1601 "combat_block_value"
1604 const string[] BASIC_MOD_LIST = { "Precision",
1614 const string[] HEROIC_JEWELRY_LIST = { "Bounty Hunter Enforcer (DPS)",
1615 "Bounty Hunter Flawless (Utility A)",
1616 "Bounty Hunter Dire Fate (PvP)",
1617 "Medic Striker's (DPS)",
1618 "Medic First Responder's (Healing)",
1619 "Medic Blackbar's Doom (PvP)",
1620 "Jedi Duelist (Saber DPS)",
1621 "Jedi Dark Fury (Force Power DPS)",
1622 "Jedi Guardian (Tanking)",
1623 "Commando Grenadier (Grenade DPS)",
1624 "Commando Frontman (Tanking)",
1625 "Commando Juggernaut (Weapon DPS)",
1626 "Smuggler Scoundrel (DPS)",
1627 "Smuggler Rogue (PvP)",
1628 "Smuggler Gambler's (PvE)",
1629 "Spy Assassin's (DPS)",
1631 "Spy Razor Cat (DPS)",
1632 "Officer Dead Eye (DPS)",
1633 "Officer Hellstorm (AoE DPS)",
1634 "Officer General's (Group PvE)",
1637 const string[] AURILIA_CRYSTALS = {
1638 "Small Aurilian Crystal",
1639 "Medium Aurilian Crystal",
1640 "Large Aurilian Crystal"
1643 const string[] CRAFTING_SUIT = {
1644 "Blixtev's Ultra Crafting Suit"
1645 "Blixtev's Body Spray"
1650 const string[] buffComponentKeys = {
1653 "action_cost_reduction",
1656 const int[] buffComponentValues = {
1660 /***** TRIGGERS ********************************************************/
1662 boolean checkConfigSetting(string configString)
1664 string enabled = toLower(getConfigSetting("CharacterBuilder", configString));
1665 if (enabled == null)
1668 if (enabled.equals("true") || enabled.equals("1"))
1674 trigger OnObjectMenuRequest(obj_id player, menu_info mi)
1676 menu_info_data data = mi.getMenuItemByType (menu_info_types.ITEM_USE);
1679 data.setServerNotify (true);
1681 mi.addRootMenu (menu_info_types.ITEM_USE, new string_id("",""));
1683 return SCRIPT_CONTINUE;
1686 trigger OnObjectMenuSelect(obj_id player, int item)
1688 if (isGod(player) || checkConfigSetting("builderEnabled"))
1691 if ( item == menu_info_types.ITEM_USE )
1693 startCharacterBuilder(player);
1695 return SCRIPT_CONTINUE;
1699 sendSystemMessageTestingOnly(player, "Only authorized users may access this terminal.");
1700 return SCRIPT_CONTINUE;
1705 void startCharacterBuilder(obj_id player)
1707 obj_id self = getSelf();
1709 string prompt = "Select the desired character option";
1710 string title = "Character Builder Terminal";
1712 closeOldWindow(player);
1714 int pid = sui.listbox(self, player, prompt, sui.OK_CANCEL, title, CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true, false);
1715 setWindowPid(player, pid);
1719 messageHandler handleOptionSelect()
1721 if ( (params == null) || (params.isEmpty()) )
1723 //cleanScriptVars(player);
1724 return SCRIPT_CONTINUE;
1727 obj_id player = sui.getPlayerId(params);
1728 int btn = sui.getIntButtonPressed(params);
1729 int idx = sui.getListboxSelectedRow(params);
1731 if ( btn == sui.BP_CANCEL )
1733 cleanScriptVars(player);
1734 return SCRIPT_CONTINUE;
1737 if ( idx == -1 || idx > CHARACTER_BUILDER_OPTIONS.length)
1739 cleanScriptVars(player);
1740 return SCRIPT_CONTINUE;
1747 if (isGod(player) || checkConfigSetting("weaponsEnabled"))
1748 handleWeaponOption(player);
1751 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1752 return SCRIPT_CONTINUE;
1756 if (isGod(player) || checkConfigSetting("armorEnabled"))
1757 handleArmorOption(player);
1760 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1761 return SCRIPT_CONTINUE;
1764 case 2: // roadmap skills
1765 if (isGod(player) || checkConfigSetting("skillsEnabled"))
1766 handleRoadmapSkills(player);
1769 sendSystemMessageTestingOnly(player, "The Roadmap Skill Builder option is DISABLED.");
1770 return SCRIPT_CONTINUE;
1773 /* case 3 : // skill loadout
1774 if (isGod(player) || checkConfigSetting("skillsLoadoutEnabled"))
1775 handleSkillLoadoutOption(player);
1778 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1779 return SCRIPT_CONTINUE;
1783 if (isGod(player) || checkConfigSetting("buffsEnabled"))
1784 handleBuffOption(player);
1787 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1788 return SCRIPT_CONTINUE;
1791 */ case 3: // resources
1792 if (isGod(player) || checkConfigSetting("resourcesEnabled"))
1793 handleResourceOption(player);
1796 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1797 return SCRIPT_CONTINUE;
1801 if (isGod(player) || checkConfigSetting("creditsEnabled"))
1802 handleCreditOption(player);
1805 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1806 return SCRIPT_CONTINUE;
1810 case 5: // faction options
1811 if (isGod(player) || checkConfigSetting("factionEnabled"))
1812 handleFactionOption(player);
1815 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1816 return SCRIPT_CONTINUE;
1819 case 6: // vehicles/mounts/beasts
1820 handleVehicleOption(player);
1823 if (isGod(player) || checkConfigSetting("shipsEnabled"))
1824 handleShipMenuSelect(player);
1827 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1828 return SCRIPT_CONTINUE;
1831 case 8: // crafting items
1832 if (isGod(player) || checkConfigSetting("craftingEnabled"))
1833 handleCraftingOption(player);
1836 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1837 return SCRIPT_CONTINUE;
1841 if (isGod(player) || checkConfigSetting("deedsEnabled"))
1842 handleDeedOption(player);
1845 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1846 return SCRIPT_CONTINUE;
1849 case 10: // PA halls
1850 if (isGod(player) || checkConfigSetting("pahallEnabled"))
1851 handlePAOption(player);
1854 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1855 return SCRIPT_CONTINUE;
1858 case 11: // misc items
1859 if (isGod(player) || checkConfigSetting("miscitemEnabled"))
1860 handleMiscOption(player);
1863 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1864 return SCRIPT_CONTINUE;
1868 if (isGod(player) || checkConfigSetting("jediEnabled"))
1869 handleJediOption(player);
1872 sendSystemMessageTestingOnly(player, "You Are Not Authorized to use the Jedi Options!.");
1873 return SCRIPT_CONTINUE;
1876 case 13: // Best Resource
1878 handleBestResourceOption(player);
1881 sendSystemMessageTestingOnly(player, "This is for developers only.");
1882 return SCRIPT_CONTINUE;
1886 case 14: // Flag all Heroic Instances
1888 flagAllHeroicInstances(player);
1891 sendSystemMessageTestingOnly(player, "This is for developers only.");
1892 return SCRIPT_CONTINUE;
1895 case 15: // Draft Schematics
1898 handleDraftSchematicsOption(player);
1902 sendSystemMessageTestingOnly(player, "This is for developers only.");
1903 return SCRIPT_CONTINUE;
1907 case 15: // heal options
1908 if (isGod(player) || checkConfigSetting("healingEnabled"))
1909 handleHealOption(player);
1912 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1913 return SCRIPT_CONTINUE;
1916 case 19: // Pet Abilities
1917 if (isGod(player) || checkConfigSetting("petAbilitiesEnabled"))
1918 handlePetAbilityOption(player);
1921 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1922 return SCRIPT_CONTINUE;
1927 cleanScriptVars(player);
1928 return SCRIPT_CONTINUE;
1932 return SCRIPT_CONTINUE;
1935 void cleanScriptVars(obj_id player)
1937 obj_id self = getSelf();
1939 utils.removeScriptVarTree(player, "character_builder");
1940 utils.removeScriptVarTree(self, "character_builder");
1942 setObjVar(player, "character_builder", true);
1945 void closeOldWindow(obj_id player)
1947 string playerPath = "character_builder.";
1948 if ( utils.hasScriptVar(player, "character_builder.pid"))
1950 int oldpid = utils.getIntScriptVar(player, "character_builder.pid");
1951 forceCloseSUIPage (oldpid);
1952 utils.removeScriptVar(player, "character_builder.pid");
1956 void setWindowPid(obj_id player, int pid)
1958 if (pid > -1) utils.setScriptVar(player, "character_builder.pid", pid);
1961 //===================================================================
1962 // Skill Section //==================================================
1964 string[] convertSkillListNames(string[] skillList)
1966 for (int i = 0; i < skillList.length; i++)
1968 skillList[i] = "@skl_n:" + skillList[i];
1975 //===================================================================
1976 // Loadout Section //================================================
1979 * Creates equipment in the player's inventory based on what master skills they have. NOTE: if the player
1980 * already has an item of the type in the datatable, they will not be given a new one.
1982 void handleSkillLoadoutOption(obj_id player)
1984 // create a fast lookup set of the player's inventory
1985 if ( !isIdValid(player) )
1987 obj_id inventoryId = utils.getInventoryContainer(player);
1988 if ( !isIdValid(inventoryId) )
1990 obj_id[] inventoryArray = getInventoryAndEquipment(player);
1991 if ( inventoryArray == null)
1992 inventoryArray = new obj_id[0];
1993 java.util.HashSet inventoryLookup = new java.util.HashSet(inventoryArray.length > 8 ? inventoryArray.length * 2 : 16);
1994 for ( int i = 0; i < inventoryArray.length; ++i )
1996 string itemTemplate = getTemplateName(inventoryArray[i]);
1997 if ( itemTemplate != null )
1998 inventoryLookup.add(itemTemplate);
2001 // get the loadout for each skill the player has
2004 string[] skills = getSkillListingForPlayer(player);
2005 if ( skills != null )
2007 for ( int i = 0; i < skills.length; ++i )
2009 if (space_transition.isPlayerBelowShipLimit(player))
2011 obj_id shipId = null;
2012 if (skills[i].equals("pilot_rebel_navy_master"))
2014 shipId = space_utils.createShipControlDevice(player, "advanced_xwing", false);
2016 else if (skills[i].equals("pilot_imperial_navy_master"))
2018 shipId = space_utils.createShipControlDevice(player, "tieinterceptor_imperial_guard", false);
2020 else if (skills[i].equals("pilot_neutral_master"))
2022 shipId = space_utils.createShipControlDevice(player, "yt1300", false);
2024 else if (skills[i].equals("pilot_rebel_navy_novice"))
2026 shipId = space_utils.createShipControlDevice(player, "z95", false);
2028 else if (skills[i].equals("pilot_imperial_navy_novice"))
2030 shipId = space_utils.createShipControlDevice(player, "tie_light_duty", false);
2032 else if (skills[i].equals("pilot_neutral_novice"))
2034 shipId = space_utils.createShipControlDevice(player, "basic_hutt_light", false);
2036 if (isValidId(shipId))
2042 dictionary items = dataTableGetRow(SKILL_LOADOUT_TBL, skills[i]);
2043 if ( items != null )
2045 // if the player doesn't already have an item of the given template, create one and put it in his inventory
2046 java.util.Enumeration keys = items.keys();
2047 while ( keys.hasMoreElements() )
2049 string key = (String)(keys.nextElement());
2050 if ( key == "skill" )
2053 Object value = items.get(key);
2054 if ( value != null && value instanceof string && ((string)value).length() > 0 )
2056 if ( key == "armor" )
2058 // armor needs to be handled specially due to not all species being able to equip all armor
2059 string armorSetName = (string)(value);
2060 string armorCategoryName = armorSetName.substring(0, armorSetName.length()-1);
2061 string armorLevelName = armorSetName.substring(armorSetName.length()-1, armorSetName.length());
2062 if ( armorCategoryName != "assault" &&
2063 armorCategoryName != "battle" &&
2064 armorCategoryName != "recon" )
2066 sendSystemMessageTestingOnly(player, "Invalid armor category " + armorCategoryName +
2067 " for skill entry " + skills[i]);
2070 if ( armorLevelName != "1" &&
2071 armorLevelName != "2" &&
2072 armorLevelName != "3" )
2074 sendSystemMessageTestingOnly(player, "Invalid armor level " + armorLevelName +
2075 " for skill entry " + skills[i]);
2078 int armorCategory = AC_none;
2079 int armorLevel = Integer.parseInt(armorLevelName) - 1;
2080 int playerSpecies = getSpecies(player);
2081 string[] armorSet = null;
2082 if ( armorCategoryName == "assault" )
2084 armorCategory = AC_assault;
2085 if ( playerSpecies == SPECIES_WOOKIEE )
2086 armorSet = ARMOR_SET_ASSAULT_WOOKIEE;
2087 else if ( playerSpecies == SPECIES_ITHORIAN )
2088 armorSet = ARMOR_SET_ASSAULT_ITHORIAN;
2090 armorSet = ARMOR_SETS_ASSAULT[rand(0, ARMOR_SETS_ASSAULT.length-1)];
2092 else if ( armorCategoryName == "battle" )
2094 armorCategory = AC_battle;
2095 if ( playerSpecies == SPECIES_WOOKIEE )
2096 armorSet = ARMOR_SET_BATTLE_WOOKIEE;
2097 else if ( playerSpecies == SPECIES_ITHORIAN )
2098 armorSet = ARMOR_SET_BATTLE_ITHORIAN;
2100 armorSet = ARMOR_SETS_BATTLE[rand(0, ARMOR_SETS_BATTLE.length-1)];
2104 armorCategory = AC_reconnaissance;
2105 if ( playerSpecies == SPECIES_WOOKIEE )
2106 armorSet = ARMOR_SET_RECON_WOOKIEE;
2107 else if ( playerSpecies == SPECIES_ITHORIAN )
2108 armorSet = ARMOR_SET_RECON_ITHORIAN;
2110 armorSet = ARMOR_SETS_RECON[rand(0, ARMOR_SETS_RECON.length-1)];
2112 if ( armorSet == null )
2114 sendSystemMessageTestingOnly(player, "Unable to get armor set for armor category " + armorCategoryName);
2117 for ( int j = 0; j < armorSet.length; ++j )
2119 string armorTemplate = ARMOR_SET_PREFIX + armorSet[j];
2120 if ( !inventoryLookup.contains(armorTemplate) )
2122 obj_id newItem = createObject(armorTemplate, inventoryId, "");
2123 if ( isIdValid(newItem) )
2126 if (!isGameObjectTypeOf(newItem, GOT_armor_foot) && !isGameObjectTypeOf(newItem, GOT_armor_hand))
2128 armor.setArmorDataPercent(newItem, armorLevel, armorCategory, GENERAL_PROTECTION, CONDITION);
2130 inventoryLookup.add(armorTemplate);
2138 if ( !inventoryLookup.contains(value) )
2140 string itemTemplate = (string)(value);
2141 obj_id newItem = null;
2142 int itemGot = getGameObjectTypeFromTemplate(itemTemplate);
2143 if ( isGameObjectTypeOf(itemGot, GOT_weapon) )
2144 newItem = weapons.createWeapon(itemTemplate, inventoryId, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
2146 newItem = createObject(itemTemplate, inventoryId, "");
2147 if ( isIdValid(newItem) )
2149 inventoryLookup.add(itemTemplate);
2160 if (itemCount > 0 || shipCount > 0)
2164 sendSystemMessageTestingOnly(player, shipCount + " ships were placed in your datapad.");
2168 sendSystemMessageTestingOnly(player, itemCount + " items were placed in your inventory.");
2170 sendSystemMessageTestingOnly(player, "Have fun storming the castle!");
2174 sendSystemMessageTestingOnly(player, "No new items were placed in your inventory. You've got everything you need.");
2177 startCharacterBuilder(player);
2180 //===================================================================
2181 // Credit Section //===============================================
2182 void handleCreditOption(obj_id player)
2185 if ( getCashBalance(player) < 100000000 )
2187 dictionary d = new dictionary();
2188 d.put("payoutTarget", player);
2189 money.systemPayout(money.ACCT_BETA_TEST, player, CASH_AMOUNT, "handlePayoutToPlayer", d);
2193 sendSystemMessageTestingOnly(player, "You already have 100,000,000+ credits. Why do you need any more money?");
2195 startCharacterBuilder(player);
2200 messageHandler handlePayoutToPlayer()
2202 obj_id player = params.getObjId("payoutTarget");
2203 if ( !isIdValid(player) )
2204 return SCRIPT_CONTINUE;
2206 int retCode = params.getInt(money.DICT_CODE);
2207 if ( retCode == money.RET_SUCCESS )
2209 string terminal = "Character Builder Terminal";
2210 sendSystemMessageTestingOnly(player, "You receive " + CASH_AMOUNT + " credits from the " + terminal);
2212 else if ( retCode == money.RET_FAIL )
2214 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2217 return SCRIPT_CONTINUE;
2219 //===================================================================
2220 // Buffs Section //===============================================
2221 void handleBuffOption(obj_id player)
2223 buff.applyBuff(player, "frogBuff");
2224 sendSystemMessageTestingOnly(player, "Buffs applied!");
2225 startCharacterBuilder(player);
2227 //===================================================================
2228 // Resource Section //===============================================
2229 void handleResourceOption(obj_id player)
2231 obj_id self = getSelf();
2233 refreshMenu ( player, "Select the desired resource category", "Character Builder Terminal", RESOURCE_TYPES, "handleCategorySelection", false);
2238 messageHandler handleCategorySelection()
2240 if ( (params == null) || (params.isEmpty()) )
2242 //cleanScriptVars(player);
2243 return SCRIPT_CONTINUE;
2246 obj_id player = sui.getPlayerId(params);
2247 int btn = sui.getIntButtonPressed(params);
2248 int idx = sui.getListboxSelectedRow(params);
2250 if ( btn == sui.BP_REVERT )
2252 startCharacterBuilder(player);
2253 return SCRIPT_CONTINUE;
2256 if(btn == sui.BP_CANCEL)
2258 cleanScriptVars(player);
2259 closeOldWindow(player);
2260 return SCRIPT_CONTINUE;
2265 cleanScriptVars(player);
2266 return SCRIPT_CONTINUE;
2269 location loc = getLocation(player);
2270 string planet = "current";
2272 string[] resourceList = buildAvailableResourceTree(self, loc, RESOURCE_BASE_TYPES[idx]);
2275 refreshMenu ( player, "Select the desired resource category", "Character Builder Terminal", resourceList, "handleResourceSelection", false);
2276 if(resourceList[0].startsWith("@resource/resource_names"))
2278 utils.setScriptVar(player, "character_builder.resourceList", SPACE_RESOURCE_CONST);
2281 utils.setScriptVar(player, "character_builder.resourceList", resourceList);
2283 return SCRIPT_CONTINUE;
2286 messageHandler handleResourceSelection()
2288 if ( (params == null) || (params.isEmpty()) )
2290 //cleanScriptVars(player);
2291 return SCRIPT_CONTINUE;
2294 obj_id player = sui.getPlayerId(params);
2295 int btn = sui.getIntButtonPressed(params);
2296 int idx = sui.getListboxSelectedRow(params);
2298 if ( btn == sui.BP_REVERT )
2300 refreshMenu ( player, "Select the desired resource category", "Character Builder Terminal", RESOURCE_TYPES, "handleCategorySelection", false);
2301 return SCRIPT_CONTINUE;
2304 if(btn == sui.BP_CANCEL)
2306 cleanScriptVars(player);
2307 closeOldWindow(player);
2308 return SCRIPT_CONTINUE;
2313 cleanScriptVars(player);
2314 return SCRIPT_CONTINUE;
2317 string[] resourceList = utils.getStringArrayScriptVar(player, "character_builder.resourceList");
2319 string resourceName = resourceList[idx].trim();
2320 if (resourceName.startsWith("\\#"))
2321 resourceName = resourceName.substring(13, resourceName.length()-3);
2323 if(resourceName.startsWith("space"))
2325 makeSpaceResource(player, resourceName);
2326 return SCRIPT_CONTINUE;
2330 obj_id resourceId = getResourceTypeByName(resourceName);
2332 if (isIdNull(resourceId))
2334 resourceId = pickRandomNonDepeletedResource(resourceName);
2337 obj_id inv = utils.getInventoryContainer(player);
2338 obj_id resourceCrate = createResourceCrate(resourceId, AMT, inv);
2340 if (isIdNull(resourceCrate))
2342 sendSystemMessageTestingOnly(player, "Resource grant failed. It is likely your inventory is full.");
2346 resourceName = " \\#pcontrast1 "+getResourceName(resourceId)+"\\#. a type of " + getClassString(getResourceClass(resourceId));
2347 prose_package proseSuccess = prose.getPackage(resource.SID_SAMPLE_LOCATED, resourceName, AMT);
2348 sendSystemMessageProse(player, proseSuccess);
2352 refreshMenu ( player, "Select the desired resource category", "Character Builder Terminal", resourceList, "handleResourceSelection", false);
2353 return SCRIPT_CONTINUE;
2356 void makeSpaceResource(obj_id self, string rclass)
2358 obj_id[] rtypes = getResourceTypes(rclass);
2359 sendSystemMessageTestingOnly(self, "Types are..." + rtypes[0].toString());
2360 obj_id rtype = rtypes[0];
2361 if(!isIdValid(rtype))
2363 sendSystemMessageTestingOnly(self, "No id found");
2364 sendSystemMessageTestingOnly(self, "Type was "+rclass);
2368 string crateTemplate = getResourceContainerForType(rtype);
2370 if ( !crateTemplate.equals("") )
2372 obj_id pInv = utils.getInventoryContainer(self);
2373 if ( isIdValid(pInv))
2375 obj_id crate = createObject(crateTemplate, pInv, "");
2376 if ( addResourceToContainer (crate, rtype, AMT, self) )
2378 sendSystemMessageTestingOnly(self, "Resource of class "+rclass+" added");
2384 string[] buildAvailableResourceTree(obj_id self, location loc, string topParent)
2386 resizeable resource_density[] allResources = new resource_density[0];
2389 if(topParent.equals("Asteroid"))
2391 return SPACE_RESOURCE_LOCALIZED;
2395 if(hasObjVar(self, "allPlanetResources"))
2397 string[] planetNames = { "corellia", "dantooine", "lok", "naboo", "rori", "talus", "tatooine" };
2399 for(int i = 0; i < planetNames.length; i++)
2401 loc.area = planetNames[i];
2403 resource_density[] resources = requestResourceList(loc, 0.0f, 1.0f, topParent);
2405 for(int j = 0; j < resources.length; j++)
2407 allResources.add(resources[j]);
2413 resource_density[] resources = requestResourceList(loc, 0.0f, 1.0f, topParent);
2415 for(int j = 0; j < resources.length; j++)
2417 allResources.add(resources[j]);
2421 string[] resourceTree = buildSortedResourceTree(allResources, topParent, 0);
2423 return resourceTree;
2426 string[] buildSortedResourceTree(resizeable resource_density[] resources, string topParent, int branchLevel)
2428 resizeable string[] resourceTree = new string[0];
2430 if(resources != null)
2432 for (int i = 0; i < resources.length; i++)
2434 if (!isResourceDerivedFrom(resources[i].getResourceType(), topParent))
2437 string parent = getResourceClass(resources[i].getResourceType());
2438 string child = null;
2443 while (parent != topParent)
2446 parent = getResourceParentClass(child);
2450 child = "\\#pcontrast1 "+getResourceName(resources[i].getResourceType())+"\\#.";
2452 for (int j = 0; j < branchLevel; j++)
2454 child = " " + child;
2458 if (resourceTree.indexOf(child) == -1)
2460 resourceTree.add(child);
2465 for (int i = 0; i < resourceTree.size(); i++)
2467 string parent = resourceTree[i].trim();
2468 string[] childBranch = buildSortedResourceTree(resources, parent, branchLevel+1);
2470 for (int j = 0; j < childBranch.length; j++)
2472 resourceTree.add(++i, childBranch[j]);
2476 return resourceTree;
2479 string getClassString(string className)
2481 const string resourceTable = "datatables/resource/resource_tree.iff";
2483 string classString = "";
2485 int row = dataTableSearchColumnForString(className, 1, resourceTable);
2487 while ((classString == null || classString.length() == 0) && column <= 9)
2489 classString = dataTableGetString(resourceTable, row, column);
2496 //===================================================================
2497 // Best Resource Section //===============================================
2498 void handleBestResourceOption(obj_id player)
2500 obj_id self = getSelf();
2502 refreshMenu(player, "Select the desired resource category", "Character Builder Terminal", BEST_RESOURCE_TYPES, "handleBestCategorySelection", false);
2507 messageHandler handleBestCategorySelection()
2509 if ( (params == null) || (params.isEmpty()) )
2511 //cleanScriptVars(player);
2512 return SCRIPT_CONTINUE;
2515 obj_id player = sui.getPlayerId(params);
2516 int btn = sui.getIntButtonPressed(params);
2517 int idx = sui.getListboxSelectedRow(params);
2519 if ( btn == sui.BP_REVERT )
2521 startCharacterBuilder(player);
2522 return SCRIPT_CONTINUE;
2525 if(btn == sui.BP_CANCEL)
2527 cleanScriptVars(player);
2528 closeOldWindow(player);
2529 return SCRIPT_CONTINUE;
2534 cleanScriptVars(player);
2535 return SCRIPT_CONTINUE;
2538 if(idx > RESOURCE_BASE_TYPES.length - 1)
2540 utils.setScriptVar(player, "character_builder.specificFilter", -1);
2541 refreshMenu(player, "Select the desired resource category", "Character Builder Terminal", RESOURCE_TYPES, "handleBestCategorySelection", false);
2542 return SCRIPT_CONTINUE;
2545 location loc = getLocation(player);
2546 string planet = "current";
2548 string[] resourceList = getResourceChildClasses(RESOURCE_BASE_TYPES[idx]);
2550 int goodResources = 0;
2552 for(int i = 0; i < resourceList.length; ++i)
2554 if(!hasResourceType(resourceList[i]))
2555 resourceList[i] = null;
2560 string[] temp = new string[goodResources];
2563 for(int i = 0; i < resourceList.length; ++i)
2565 if ( resourceList[i] != null )
2566 temp[goodResources++] = resourceList[i];
2569 resourceList = temp;
2572 refreshMenu(player, "Select the desired resource category", "Character Builder Terminal", resourceList, "handleBestResourceSelection", false);
2573 utils.setScriptVar(player, "character_builder.resourceList", resourceList);
2575 return SCRIPT_CONTINUE;
2578 messageHandler handleBestResourceSelection()
2580 if(params == null || params.isEmpty())
2582 //cleanScriptVars(player);
2583 return SCRIPT_CONTINUE;
2586 obj_id player = sui.getPlayerId(params);
2587 int btn = sui.getIntButtonPressed(params);
2588 int idx = sui.getListboxSelectedRow(params);
2590 if(btn == sui.BP_REVERT)
2592 startCharacterBuilder(player);
2593 return SCRIPT_CONTINUE;
2596 if(btn == sui.BP_CANCEL)
2598 cleanScriptVars(player);
2599 closeOldWindow(player);
2600 return SCRIPT_CONTINUE;
2605 cleanScriptVars(player);
2606 return SCRIPT_CONTINUE;
2609 string[] resourceList = utils.getStringArrayScriptVar(player, "character_builder.resourceList");
2611 if(utils.hasScriptVar(player, "character_builder.specificFilter"))
2613 string [] attribs = craftinglib.getAttribNamesByResourceClass(resourceList[idx]);
2617 debugSpeakMsg(player, "attribs null");
2618 return SCRIPT_CONTINUE;
2621 utils.setScriptVar(player, "character_builder.resourceIndex", idx);
2623 refreshMenu(player, "Select the desired attribute", "Character Builder Terminal", attribs, "handleBestResourceSelectionWithAttribute", false);
2625 return SCRIPT_CONTINUE;
2628 craftinglib.makeBestResource(player, resourceList[idx], AMT);
2630 refreshMenu(player, "Select the desired resource category", "Character Builder Terminal", resourceList, "handleBestResourceSelection", false);
2632 return SCRIPT_CONTINUE;
2635 messageHandler handleBestResourceSelectionWithAttribute()
2637 if(params == null || params.isEmpty())
2639 //cleanScriptVars(player);
2640 return SCRIPT_CONTINUE;
2643 obj_id player = sui.getPlayerId(params);
2644 int btn = sui.getIntButtonPressed(params);
2645 int idx = sui.getListboxSelectedRow(params);
2647 if(btn == sui.BP_REVERT)
2649 startCharacterBuilder(player);
2650 return SCRIPT_CONTINUE;
2653 if(btn == sui.BP_CANCEL)
2655 cleanScriptVars(player);
2656 closeOldWindow(player);
2657 return SCRIPT_CONTINUE;
2662 cleanScriptVars(player);
2663 return SCRIPT_CONTINUE;
2666 string[] resourceList = utils.getStringArrayScriptVar(player, "character_builder.resourceList");
2667 int resourceListIndex = utils.getIntScriptVar(player, "character_builder.resourceIndex");
2669 string [] attribs = craftinglib.getAttribNamesByResourceClass(resourceList[resourceListIndex]);
2671 utils.removeScriptVar(player, "character_builder.specificFilter");
2672 utils.removeScriptVar(player, "character_builder.resourceIndex");
2674 craftinglib.makeBestResourceByAttribute(player, resourceList[resourceListIndex], attribs[idx], AMT);
2676 refreshMenu(player, "Select the desired resource category", "Character Builder Terminal", BEST_RESOURCE_TYPES, "handleBestCategorySelection", false);
2678 return SCRIPT_CONTINUE;
2681 //==================================================================
2682 // Vehicle Section //===============================================
2683 void handleVehicleOption(obj_id player)
2685 obj_id self = getSelf();
2687 refreshMenu ( player, "Select the desired vehicle or mount option", "Character Builder Terminal", VEHICLE_MOUNT_OPTIONS, "handleVehicleOptions", false);
2690 messageHandler handleVehicleOptions()
2692 if ( (params == null) || (params.isEmpty()) )
2694 //cleanScriptVars(player);
2695 return SCRIPT_CONTINUE;
2698 obj_id player = sui.getPlayerId(params);
2699 int btn = sui.getIntButtonPressed(params);
2700 int idx = sui.getListboxSelectedRow(params);
2702 if ( btn == sui.BP_REVERT )
2704 startCharacterBuilder(player);
2705 return SCRIPT_CONTINUE;
2708 if(btn == sui.BP_CANCEL)
2710 cleanScriptVars(player);
2711 closeOldWindow(player);
2712 return SCRIPT_CONTINUE;
2715 if ( idx == -1 || idx > VEHICLE_MOUNT_OPTIONS.length)
2717 cleanScriptVars(player);
2718 return SCRIPT_CONTINUE;
2721 //make sure player is Valid
2722 if(!isIdValid(player))
2724 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2725 cleanScriptVars(player);
2726 return SCRIPT_OVERRIDE;
2729 string prompt = "Select the desired option";
2730 string title = "Character Builder Terminal";
2737 if(isGod(player) || checkConfigSetting("vehiclesEnabled"))
2739 refreshMenu ( player, prompt, title, VEHICLE_OPTIONS, "handleVehicleSelect", false);
2743 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
2744 return SCRIPT_CONTINUE;
2750 if(isGod(player) || checkConfigSetting("vehiclesEnabled"))
2752 refreshMenu ( player, prompt, title, MOUNT_OPTIONS, "handleMountSelect", false);
2756 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
2757 return SCRIPT_CONTINUE;
2764 refreshMenu(player, prompt, title, BEAST_OPTIONS_FOR_PLAYERS, "handleBeastSelect", false);
2768 refreshMenu(player, prompt, title, BEAST_OPTIONS, "handleBeastSelect", false);
2772 obj_id beast = beast_lib.getBeastOnPlayer(player);
2773 if(!isIdValid(beast) || !beast_lib.isValidBeast(beast))
2775 sendSystemMessage(player, "Could not find a valid beast. Please make sure you've called your beast", null);
2776 return SCRIPT_CONTINUE;
2779 obj_id bcd = beast_lib.getBeastBCD(beast);
2781 if(!beast_lib.isValidBCD(bcd))
2783 return SCRIPT_CONTINUE;
2785 beast_lib.setBCDBeastLevel(bcd, 90);
2786 beast_lib.setBeastLevel(beast, 90);
2788 beast_lib.initializeBeastStats(bcd, beast);
2789 refreshMenu ( player, "Select the desired vehicle or mount option", "Character Builder Terminal", VEHICLE_MOUNT_OPTIONS, "handleVehicleOptions", false);
2793 obj_id playerBeast = beast_lib.getBeastOnPlayer(player);
2794 if(!isIdValid(playerBeast) || !beast_lib.isValidBeast(playerBeast))
2796 sendSystemMessage(player, "Could not find a valid beast. Please make sure you've called your beast", null);
2797 return SCRIPT_CONTINUE;
2800 obj_id beastBcd = beast_lib.getBeastBCD(playerBeast);
2802 if(!beast_lib.isValidBCD(beastBcd))
2804 return SCRIPT_CONTINUE;
2807 beast_lib.setBeastLoyalty(playerBeast, 300000f);
2808 beast_lib.setBCDBeastLoyaltyLevel(beastBcd, 5);
2809 refreshMenu ( player, "Select the desired vehicle or mount option", "Character Builder Terminal", VEHICLE_MOUNT_OPTIONS, "handleVehicleOptions", false);
2814 obj_id pInv = utils.getInventoryContainer(player);
2815 static_item.createNewItemFunction("item_tow_necklace_taming_03_05",pInv);
2816 refreshMenu ( player, "Select the desired vehicle or mount option", "Character Builder Terminal", VEHICLE_MOUNT_OPTIONS, "handleVehicleOptions", false);
2820 cleanScriptVars(player);
2821 return SCRIPT_CONTINUE;
2825 return SCRIPT_CONTINUE;
2829 messageHandler handleVehicleSelect()
2831 if ( (params == null) || (params.isEmpty()) )
2833 //cleanScriptVars(player);
2834 return SCRIPT_CONTINUE;
2837 obj_id player = sui.getPlayerId(params);
2838 obj_id pInv = utils.getInventoryContainer(player);
2840 int btn = sui.getIntButtonPressed(params);
2841 int idx = sui.getListboxSelectedRow(params);
2843 if ( btn == sui.BP_REVERT )
2845 handleVehicleOption(player);
2846 return SCRIPT_CONTINUE;
2849 if(btn == sui.BP_CANCEL)
2851 cleanScriptVars(player);
2852 closeOldWindow(player);
2853 return SCRIPT_CONTINUE;
2856 if ( idx == -1 || idx > VEHICLE_OPTIONS.length)
2858 cleanScriptVars(player);
2859 return SCRIPT_CONTINUE;
2862 //make sure player is Valid
2863 if(!isIdValid(player))
2865 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2866 cleanScriptVars(player);
2867 return SCRIPT_OVERRIDE;
2869 //make sure player's inventory is valid
2870 if (!isIdValid(pInv))
2872 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2873 cleanScriptVars(player);
2874 return SCRIPT_OVERRIDE;
2876 //make sure there is room in player's inventory
2877 if (getVolumeFree(pInv) <= 0)
2879 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
2880 cleanScriptVars(player);
2881 return SCRIPT_OVERRIDE;
2887 createObject("object/tangible/deed/vehicle_deed/speederbike_swoop_deed.iff", pInv, "");
2888 sendSystemMessageTestingOnly(player, "Swoop Deed Issued.");
2892 createObject("object/tangible/deed/vehicle_deed/speederbike_deed.iff", pInv, "");
2893 sendSystemMessageTestingOnly(player, "Speederbike Deed Issued.");
2896 createObject("object/tangible/deed/vehicle_deed/landspeeder_x34_deed.iff", pInv, "");
2897 sendSystemMessageTestingOnly(player, "X34 Landspeeder Deed Issued.");
2900 createObject("object/tangible/deed/vehicle_deed/landspeeder_ab1_deed.iff",pInv, "");
2901 sendSystemMessageTestingOnly(player, "AB1 Deed Issued.");
2904 createObject("object/tangible/deed/vehicle_deed/landspeeder_v35_deed.iff", pInv, "");
2905 sendSystemMessageTestingOnly(player, "V-35 SoroSuub Carrier Deed Issued.");
2908 createObject("object/tangible/deed/vehicle_deed/landspeeder_xp38_deed.iff", pInv, "");
2909 sendSystemMessageTestingOnly(player, "XP38 Landspeeder Deed Issued.");
2911 case 6: //Barc Speeder
2912 createObject("object/tangible/deed/vehicle_deed/barc_speeder_deed.iff", pInv, "");
2913 sendSystemMessageTestingOnly(player, "Barc Speeder Deed Issued.");
2916 createObject("object/tangible/deed/vehicle_deed/landspeeder_av21_deed.iff", pInv, "");
2917 sendSystemMessageTestingOnly(player, "AV21 Deed Issued.");
2920 createObject("object/tangible/deed/vehicle_deed/landspeeder_x31_deed.iff", pInv, "");
2921 sendSystemMessageTestingOnly(player, "X31 Deed Issued.");
2923 case 9: //Hover Chair
2924 static_item.createNewItemFunction("item_tcg_loot_reward_series1_mechno_chair",pInv);
2925 sendSystemMessageTestingOnly(player, "Mecho Chair Issued");
2927 case 10: //Sith Speeder
2928 static_item.createNewItemFunction("tem_tcg_loot_reward_series1_sith_speeder",pInv);
2929 sendSystemMessageTestingOnly(player, "Sith Speeder Issued.");
2931 case 11: //Merr-Sonn JT-12 Jetpack
2932 static_item.createNewItemFunction("item_tcg_merr_sonn_jt12_jetpack_deed",pInv);
2933 sendSystemMessageTestingOnly(player, "Merr-Sonn JT-12 Jetpack");
2936 static_item.createNewItemFunction("item_tcg_loot_reward_series6_ric_920_speeder",pInv);
2937 sendSystemMessageTestingOnly(player, "RIC-920 Issued");
2939 case 13: //Republic Gunship
2940 static_item.createNewItemFunction("item_tcg_loot_reward_series7_buildreward_republic_gunship",pInv);
2941 sendSystemMessageTestingOnly(player, "Republic Gunship Issued");
2943 static_item.createNewItemFunction("item_tcg_loot_reward_series1_organa_speeder",pInv);
2944 sendSystemMessageTestingOnly(player, "XJ-2 Issued");
2947 cleanScriptVars(player);
2948 return SCRIPT_CONTINUE;
2951 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", VEHICLE_OPTIONS, "handleVehicleSelect", false);
2952 return SCRIPT_CONTINUE;
2956 messageHandler handleMountSelect()
2958 if ( (params == null) || (params.isEmpty()) )
2960 //cleanScriptVars(player);
2961 return SCRIPT_CONTINUE;
2964 obj_id player = sui.getPlayerId(params);
2965 obj_id pInv = utils.getInventoryContainer(player);
2967 int btn = sui.getIntButtonPressed(params);
2968 int idx = sui.getListboxSelectedRow(params);
2970 if ( btn == sui.BP_REVERT )
2972 handleVehicleOption(player);
2973 return SCRIPT_CONTINUE;
2976 if(btn == sui.BP_CANCEL)
2978 cleanScriptVars(player);
2979 closeOldWindow(player);
2980 return SCRIPT_CONTINUE;
2983 if ( idx == -1 || idx > MOUNT_OPTIONS.length)
2985 cleanScriptVars(player);
2986 return SCRIPT_CONTINUE;
2989 //make sure player is Valid
2990 if(!isIdValid(player))
2992 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2993 cleanScriptVars(player);
2994 return SCRIPT_OVERRIDE;
2999 case 0: // cupa issed
3000 handleMount(player, "carrion_spat");
3002 case 1: // kaadu issued
3003 handleMount(player, "kaadu_motley");
3006 handleMount(player, "lesser_dewback");
3009 handleMount(player, "bol_lesser_plains");
3011 case 4: // falumpaset
3012 handleMount(player, "falumpaset_plodding");
3014 case 5: // brackaset
3015 handleMount(player, "brackaset_lowlands");
3018 handleMount(player, "cu_pa");
3021 handleMount(player, "dwarf_bantha");
3024 cleanScriptVars(player);
3025 return SCRIPT_CONTINUE;
3028 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", MOUNT_OPTIONS, "handleMountSelect", false);
3029 return SCRIPT_CONTINUE;
3033 messageHandler handleBeastSelect()
3035 if(params == null || params.isEmpty())
3037 return SCRIPT_CONTINUE;
3040 obj_id player = sui.getPlayerId(params);
3041 obj_id pInv = utils.getInventoryContainer(player);
3043 int btn = sui.getIntButtonPressed(params);
3044 int idx = sui.getListboxSelectedRow(params);
3046 if(btn == sui.BP_REVERT)
3048 handleVehicleOption(player);
3049 return SCRIPT_CONTINUE;
3052 if(btn == sui.BP_CANCEL)
3054 cleanScriptVars(player);
3055 closeOldWindow(player);
3056 return SCRIPT_CONTINUE;
3059 string [] beasts = (!isGod(player) ? BEAST_OPTIONS_FOR_PLAYERS : BEAST_OPTIONS);
3061 if(idx == -1 || idx > beasts.length)
3063 cleanScriptVars(player);
3064 return SCRIPT_CONTINUE;
3067 //make sure player is Valid
3068 if(!isIdValid(player))
3070 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3071 cleanScriptVars(player);
3072 return SCRIPT_OVERRIDE;
3075 string creatureName = "bm_" + beasts[idx];
3076 obj_id inv = utils.getInventoryContainer(player);
3078 obj_id egg = createObject("object/tangible/item/beast/bm_egg.iff", inv, "");
3080 int hashCreatureType = incubator.getHashType(creatureName);
3082 incubator.setUpEggWithDummyData(player, egg, hashCreatureType);
3085 refreshMenu(player, "Select the desired option", "Character Builder Terminal", beasts, "handleBeastSelect", false);
3087 return SCRIPT_CONTINUE;
3091 void handleMount(obj_id player, string mountType)
3093 location spawnLoc = getLocation(player);
3097 // Check player's taming ability
3098 int petType = pet_lib.getPetType(mountType);
3099 int level = dataTableGetInt(pet_lib.CREATURE_TABLE, mountType, "level");
3100 int chance = pet_lib.getChanceToTame(level, petType, player);
3104 // Check to see if this pet can be tamed by anyone
3105 if(petType == pet_lib.PET_TYPE_AGGRO)
3107 // Aggresive creatures can't be tamed by non-handlers
3108 sendSystemMessage(player, pet_lib.SID_SYS_LACK_SKILL);
3115 // Only creatures 15 or lower can be tamed by non-handlers.
3116 sendSystemMessage(player, pet_lib.SID_SYS_LACK_SKILL);
3122 obj_id mount = create.object(mountType, spawnLoc);
3124 if(!hasScript(player, "ai.pet_master"))
3126 attachScript(player, "ai.pet_master");
3129 if(!createNewMount(player, mount))
3131 destroyObject(mount);
3135 if(getMountsEnabled())
3137 if(couldPetBeMadeMountable(mount) == 0)
3139 if(makePetMountable(mount))
3141 obj_id petControlDevice = callable.getCallableCD(mount);
3142 setObjVar(petControlDevice, "ai.pet.trainedMount", 1);
3143 setObjVar(petControlDevice, "ai.pet.type", pet_lib.getPetType(mount));
3148 sendSystemMessageTestingOnly(player, "For some reason, the creature spawned can NOT be turned into a mount. Might be out of SCALE, could be several other things.");
3154 boolean createNewMount(obj_id master, obj_id pet)
3156 string creatureName = ai_lib.getCreatureName(pet);
3158 if(creatureName == null || creatureName == "")
3163 int petSpecies = ai_lib.aiGetSpecies(pet);
3165 if(petSpecies == -1)
3170 if(callable.hasCallable(master, callable.CALLABLE_TYPE_RIDEABLE))
3175 if(!pet_lib.hasMaxStoredPetsOfType(master, pet_lib.PET_TYPE_MOUNT))
3177 obj_id petControlDevice = null;
3179 if(!callable.hasCallableCD(pet))
3181 obj_id datapad = utils.getPlayerDatapad(master);
3183 if(!isIdValid(datapad))
3188 string controlTemplate = "object/intangible/pet/" + utils.dataTableGetString(create.CREATURE_TABLE, creatureName, "template");
3190 if(!controlTemplate.endsWith(".iff"))
3192 controlTemplate = pet_lib.PET_CTRL_DEVICE_TEMPLATE;
3195 petControlDevice = createObject(controlTemplate, datapad, "");
3197 if(!isIdValid(petControlDevice))
3199 petControlDevice = createObject(pet_lib.PET_CTRL_DEVICE_TEMPLATE, datapad, "");
3201 if(!isIdValid(petControlDevice))
3203 sendSystemMessage(master, pet_lib.SID_SYS_TOO_MANY_STORED_PETS);
3208 setObjVar(petControlDevice, "ai.pet.trainedMount", 1);
3210 pet_lib.setUpPetControlDevice(petControlDevice, pet);
3213 petControlDevice = callable.getCallableCD(pet);
3215 callable.setCallableLinks(master, petControlDevice, pet);
3217 dictionary params = new dictionary();
3218 params.put("pet", pet);
3219 params.put("master", master);
3220 messageTo(pet, "handleAddMaster", params, 1, false);
3222 sendSystemMessageTestingOnly(master, creatureName + " Issued and Stored on Your Datapad.");
3223 // pet_lib.storePet(pet);
3228 sendSystemMessage( master, pet_lib.SID_SYS_TOO_MANY_STORED_PETS );
3234 //==================================================================
3235 // Ship Section //===============================================
3236 void handleShipOption(obj_id player)
3238 obj_id self = getSelf();
3240 refreshMenu ( player, "Select the desired ship option", "Character Builder Terminal", SHIP_OPTIONS, "handleShipOptions", false);
3243 messageHandler handleShipOptions()
3245 if ( (params == null) || (params.isEmpty()) )
3247 //cleanScriptVars(player);
3248 return SCRIPT_CONTINUE;
3251 obj_id player = sui.getPlayerId(params);
3252 int btn = sui.getIntButtonPressed(params);
3253 int idx = sui.getListboxSelectedRow(params);
3255 if ( btn == sui.BP_REVERT )
3257 startCharacterBuilder(player);
3258 return SCRIPT_CONTINUE;
3261 if(btn == sui.BP_CANCEL)
3263 cleanScriptVars(player);
3264 closeOldWindow(player);
3265 return SCRIPT_CONTINUE;
3268 if ( idx == -1 || idx > SHIP_OPTIONS.length)
3270 cleanScriptVars(player);
3271 return SCRIPT_CONTINUE;
3274 //make sure player is Valid
3275 if(!isIdValid(player))
3277 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3278 cleanScriptVars(player);
3279 return SCRIPT_OVERRIDE;
3282 string prompt = "Select the desired option";
3283 string title = "Character Builder Terminal";
3290 refreshMenu ( player, prompt, title, REBEL_SHIP_OPTIONS, "handleRebelShipSelect", false);
3293 refreshMenu ( player, prompt, title, IMPERIAL_SHIP_OPTIONS, "handleImperialShipSelect", false);
3296 refreshMenu ( player, prompt, title, FREELANCE_SHIP_OPTIONS, "handleFreelanceShipSelect", false);
3299 refreshMenu ( player, prompt, title, OTHER_SHIP_OPTIONS, "handleOtherShipSelect", false);
3302 refreshMenu ( player, prompt, title, MAIN_SHIP_OPTIONS, "handlePartShipSelect", false);
3307 refreshMenu(player, prompt, title, PILOT_SKILLS, "handlePilotSkillSelect", false);
3311 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
3312 cleanScriptVars(player);
3316 cleanScriptVars(player);
3317 return SCRIPT_CONTINUE;
3321 return SCRIPT_CONTINUE;
3324 boolean revokePilotingSkills (obj_id player)
3326 if(hasSkill(player, "pilot_rebel_navy_novice") || hasSkill(player, "pilot_imperial_navy_novice") || hasSkill(player, "pilot_neutral_novice"))
3328 string pilotFaction = "";
3330 //we don't want the warning popup to happen. This scriptvar assists in removing the piloting skills without
3331 //needing godmode level 50. Refer to space_skill.scriptlib and base_player.script (OnSkillAboutToBeRevoked)
3332 if (!utils.hasScriptVar(player, "revokePilotSkill"))
3334 utils.setScriptVar(player, "revokePilotSkill", 1);
3337 //SNIFF OUT THE ACTUAL PILOT SKILL THE PLAYER HAS
3338 if(hasSkill(player, "pilot_rebel_navy_novice"))
3340 pilotFaction = "rebel_navy";
3342 else if (hasSkill(player, "pilot_imperial_navy_novice"))
3344 pilotFaction = "imperial_navy";
3346 else if (hasSkill(player, "pilot_neutral_novice"))
3348 pilotFaction = "neutral";
3351 if(!pilotFaction.equals(""))
3353 for (int i = 0; i < space_skill.SKILL_NAMES.length; i++)
3356 skill.revokeSkill(player, "pilot_" + pilotFaction + space_skill.SKILL_NAMES[i]);
3358 //remove script var for warning/retirement popup
3359 utils.removeScriptVar(player, "revokePilotSkill");
3360 sendSystemMessageTestingOnly(player, "Pilot Skills Revoked.");
3367 void handlePilotSkillSelect(obj_id player)
3369 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, PILOT_SKILLS, "handlePilotSkillSelect", false);
3372 messageHandler handlePilotSkillSelect()
3374 if ( (params == null) || (params.isEmpty()) )
3376 //cleanScriptVars(player);
3377 return SCRIPT_CONTINUE;
3380 obj_id player = sui.getPlayerId(params);
3381 int btn = sui.getIntButtonPressed(params);
3382 int idx = sui.getListboxSelectedRow(params);
3384 if ( btn == sui.BP_REVERT )
3386 handleShipMenuSelect(player);
3387 return SCRIPT_CONTINUE;
3390 if(btn == sui.BP_CANCEL)
3392 cleanScriptVars(player);
3393 closeOldWindow(player);
3394 return SCRIPT_CONTINUE;
3397 if ( idx == -1 || idx > PILOT_SKILLS.length)
3399 cleanScriptVars(player);
3400 return SCRIPT_CONTINUE;
3403 //make sure player is Valid
3404 if(!isIdValid(player))
3406 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3407 cleanScriptVars(player);
3408 return SCRIPT_OVERRIDE;
3411 boolean pilotRevoked = true;
3413 if(space_skill.hasSpaceSkills(player))
3414 pilotRevoked = revokePilotingSkills(player);
3418 sendSystemMessageTestingOnly(player, "The system was unable to revoke your pilot skills.");
3419 return SCRIPT_OVERRIDE;
3424 skill.grantSkill(player, "pilot_imperial_navy_novice");
3425 skill.grantSkill(player, "pilot_imperial_navy_starships_01");
3426 skill.grantSkill(player, "pilot_imperial_navy_starships_02");
3427 skill.grantSkill(player, "pilot_imperial_navy_starships_03");
3428 skill.grantSkill(player, "pilot_imperial_navy_starships_04");
3429 skill.grantSkill(player, "pilot_imperial_navy_weapons_01");
3430 skill.grantSkill(player, "pilot_imperial_navy_weapons_02");
3431 skill.grantSkill(player, "pilot_imperial_navy_weapons_03");
3432 skill.grantSkill(player, "pilot_imperial_navy_weapons_04");
3433 skill.grantSkill(player, "pilot_imperial_navy_procedures_01");
3434 skill.grantSkill(player, "pilot_imperial_navy_procedures_02");
3435 skill.grantSkill(player, "pilot_imperial_navy_procedures_03");
3436 skill.grantSkill(player, "pilot_imperial_navy_procedures_04");
3437 skill.grantSkill(player, "pilot_imperial_navy_droid_01");
3438 skill.grantSkill(player, "pilot_imperial_navy_droid_02");
3439 skill.grantSkill(player, "pilot_imperial_navy_droid_03");
3440 skill.grantSkill(player, "pilot_imperial_navy_droid_04");
3441 skill.grantSkill(player, "pilot_imperial_navy_master");
3442 sendSystemMessageTestingOnly(player, "Master Imperial Pilot skills received.");
3444 else if(idx == 1) // Rebel skills
3446 skill.grantSkill(player, "pilot_rebel_navy_novice");
3447 skill.grantSkill(player, "pilot_rebel_navy_starships_01");
3448 skill.grantSkill(player, "pilot_rebel_navy_starships_02");
3449 skill.grantSkill(player, "pilot_rebel_navy_starships_03");
3450 skill.grantSkill(player, "pilot_rebel_navy_starships_04");
3451 skill.grantSkill(player, "pilot_rebel_navy_weapons_01");
3452 skill.grantSkill(player, "pilot_rebel_navy_weapons_02");
3453 skill.grantSkill(player, "pilot_rebel_navy_weapons_03");
3454 skill.grantSkill(player, "pilot_rebel_navy_weapons_04");
3455 skill.grantSkill(player, "pilot_rebel_navy_procedures_01");
3456 skill.grantSkill(player, "pilot_rebel_navy_procedures_02");
3457 skill.grantSkill(player, "pilot_rebel_navy_procedures_03");
3458 skill.grantSkill(player, "pilot_rebel_navy_procedures_04");
3459 skill.grantSkill(player, "pilot_rebel_navy_droid_01");
3460 skill.grantSkill(player, "pilot_rebel_navy_droid_02");
3461 skill.grantSkill(player, "pilot_rebel_navy_droid_03");
3462 skill.grantSkill(player, "pilot_rebel_navy_droid_04");
3463 skill.grantSkill(player, "pilot_rebel_navy_master");
3464 sendSystemMessageTestingOnly(player, "Master Rebel Pilot skills received.");
3466 else if(idx == 2) // Neutral skills
3468 skill.grantSkill(player, "pilot_neutral_novice");
3469 skill.grantSkill(player, "pilot_neutral_starships_01");
3470 skill.grantSkill(player, "pilot_neutral_starships_02");
3471 skill.grantSkill(player, "pilot_neutral_starships_03");
3472 skill.grantSkill(player, "pilot_neutral_starships_04");
3473 skill.grantSkill(player, "pilot_neutral_weapons_01");
3474 skill.grantSkill(player, "pilot_neutral_weapons_02");
3475 skill.grantSkill(player, "pilot_neutral_weapons_03");
3476 skill.grantSkill(player, "pilot_neutral_weapons_04");
3477 skill.grantSkill(player, "pilot_neutral_procedures_01");
3478 skill.grantSkill(player, "pilot_neutral_procedures_02");
3479 skill.grantSkill(player, "pilot_neutral_procedures_03");
3480 skill.grantSkill(player, "pilot_neutral_procedures_04");
3481 skill.grantSkill(player, "pilot_neutral_droid_01");
3482 skill.grantSkill(player, "pilot_neutral_droid_02");
3483 skill.grantSkill(player, "pilot_neutral_droid_03");
3484 skill.grantSkill(player, "pilot_neutral_droid_04");
3485 skill.grantSkill(player, "pilot_neutral_master");
3486 sendSystemMessageTestingOnly(player, "Master Privateer Pilot skills received.");
3489 handlePilotSkillSelect(player);
3490 return SCRIPT_CONTINUE;
3493 messageHandler handleRebelShipSelect()
3495 handleShipSelect(params, REBEL_SHIP_OPTIONS, REBEL_SHIP_TYPES, "handleRebelShipSelect");
3496 return SCRIPT_CONTINUE;
3499 messageHandler handleImperialShipSelect()
3501 handleShipSelect(params, IMPERIAL_SHIP_OPTIONS, IMPERIAL_SHIP_TYPES, "handleImperialShipSelect");
3502 return SCRIPT_CONTINUE;
3505 messageHandler handleFreelanceShipSelect()
3507 handleShipSelect(params, FREELANCE_SHIP_OPTIONS, FREELANCE_SHIP_TYPES, "handleFreelanceShipSelect");
3508 return SCRIPT_CONTINUE;
3511 messageHandler handleOtherShipSelect()
3513 handleShipSelect(params, OTHER_SHIP_OPTIONS, OTHER_SHIP_TYPES, "handleOtherShipSelect");
3514 return SCRIPT_CONTINUE;
3517 void handleShipSelect(dictionary params, string[] options, string[] types, string message)
3519 if ( (params == null) || (params.isEmpty()) )
3521 //cleanScriptVars(player);
3525 obj_id player = sui.getPlayerId(params);
3527 int btn = sui.getIntButtonPressed(params);
3528 int idx = sui.getListboxSelectedRow(params);
3530 if ( btn == sui.BP_REVERT )
3532 handleShipOption(player);
3536 if(btn == sui.BP_CANCEL)
3538 cleanScriptVars(player);
3539 closeOldWindow(player);
3543 if ( idx == -1 || idx > options.length)
3545 cleanScriptVars(player);
3549 //make sure player is Valid
3550 if(!isIdValid(player))
3552 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3553 cleanScriptVars(player);
3557 if (space_transition.isPlayerBelowShipLimit(player))
3559 obj_id shipId = space_utils.createShipControlDevice(player, types[idx], false);
3560 if (isIdValid(shipId))
3562 sendSystemMessageTestingOnly(player, "Created ship (" + options[idx] + ") in datapad.");
3566 sendSystemMessageTestingOnly(player, "Failed to create ship.");
3571 sendSystemMessageTestingOnly(player, "Failed to create ship. No room in datapad.");
3574 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", options, message, false);
3577 void handleShipMenuSelect(obj_id player)
3580 refreshMenu ( player, "Select the desired deed option", "Character Builder Terminal", MAIN_SHIP_OPTIONS, "handleShipMenuSelect", false);
3583 messageHandler handleShipMenuSelect()
3585 if ( (params == null) || (params.isEmpty()) )
3587 //cleanScriptVars(player);
3588 return SCRIPT_CONTINUE;
3591 obj_id player = sui.getPlayerId(params);
3592 obj_id pInv = utils.getInventoryContainer(player);
3594 int btn = sui.getIntButtonPressed(params);
3595 int idx = sui.getListboxSelectedRow(params);
3597 if ( btn == sui.BP_REVERT )
3599 startCharacterBuilder(player);
3600 return SCRIPT_CONTINUE;
3603 if(btn == sui.BP_CANCEL)
3605 cleanScriptVars(player);
3606 closeOldWindow(player);
3607 return SCRIPT_CONTINUE;
3610 if ( idx == -1 || idx > MAIN_SHIP_OPTIONS.length)
3612 cleanScriptVars(player);
3613 return SCRIPT_CONTINUE;
3616 //make sure player is Valid
3617 if(!isIdValid(player))
3619 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3620 cleanScriptVars(player);
3621 return SCRIPT_OVERRIDE;
3623 //make sure player's inventory is valid
3624 if (!isIdValid(pInv))
3626 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3627 cleanScriptVars(player);
3628 return SCRIPT_OVERRIDE;
3630 //make sure there is room in player's inventory
3631 if (getVolumeFree(pInv) <= 0)
3633 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3634 cleanScriptVars(player);
3635 return SCRIPT_OVERRIDE;
3640 case 0: //ship components
3641 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, SPACE_LOOT_CATEGORIES, "handleShipComponentSelection", false);
3643 case 1: //ship chassis
3644 string[] shipChassisArray = dataTableGetStringColumn(SHIP_CHASSIS_TBL, "name");;
3645 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, shipChassisArray, "handleShipChasisSelection", false);
3647 case 2: //gunship reward schematics
3649 static_item.createNewItemFunction("item_gunship_imperial_schematic",pInv);
3650 static_item.createNewItemFunction("item_gunship_rebel_schematic",pInv);
3651 static_item.createNewItemFunction("item_gunship_neutral_schematic",pInv);
3652 sendSystemMessageTestingOnly(player, "Gunship Schematics Issued.");
3653 handleShipMenuSelect(player);
3655 case 3: //pilot_skills
3656 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, COLLECTION_COMPONENT_SCHEMS, "handleCollectionComponentSelect", false);
3658 case 4: //pilot_skills
3659 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, PILOT_SKILLS, "handlePilotSkillSelect", false);
3662 cleanScriptVars(player);
3663 return SCRIPT_CONTINUE;
3665 return SCRIPT_CONTINUE;
3668 void handleCollectionComponentSelect(obj_id player)
3670 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, COLLECTION_COMPONENT_SCHEMS, "handleCollectionComponentSelect", false);
3673 messageHandler handleCollectionComponentSelect()
3675 if ( (params == null) || (params.isEmpty()) )
3677 return SCRIPT_CONTINUE;
3680 obj_id player = sui.getPlayerId(params);
3681 obj_id pInv = utils.getInventoryContainer(player);
3683 int btn = sui.getIntButtonPressed(params);
3684 int idx = sui.getListboxSelectedRow(params);
3686 if ( btn == sui.BP_REVERT )
3688 handleShipMenuSelect(player);
3689 return SCRIPT_CONTINUE;
3692 if(btn == sui.BP_CANCEL)
3694 cleanScriptVars(player);
3695 closeOldWindow(player);
3696 return SCRIPT_CONTINUE;
3699 int dataTableLength = dataTableGetNumRows(SHIP_CHASSIS_TBL);
3700 if ( idx == -1 || idx > dataTableLength)
3702 cleanScriptVars(player);
3703 return SCRIPT_CONTINUE;
3706 //make sure player is Valid
3707 if(!isIdValid(player))
3709 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3710 cleanScriptVars(player);
3711 return SCRIPT_OVERRIDE;
3713 //make sure player's inventory is valid
3714 if (!isIdValid(pInv))
3716 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3717 cleanScriptVars(player);
3718 return SCRIPT_OVERRIDE;
3720 //make sure there is room in player's inventory
3721 if (getVolumeFree(pInv) <= 0)
3723 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3724 cleanScriptVars(player);
3725 return SCRIPT_OVERRIDE;
3730 static_item.createNewItemFunction("item_collection_reward_booster_01_mk5_schematic",pInv);
3731 static_item.createNewItemFunction("item_collection_reward_booster_01_mk4_schematic",pInv);
3732 static_item.createNewItemFunction("item_collection_reward_booster_01_mk3_schematic",pInv);
3733 static_item.createNewItemFunction("item_collection_reward_booster_01_mk2_schematic",pInv);
3734 static_item.createNewItemFunction("item_collection_reward_booster_01_mk1_schematic",pInv);
3735 sendSystemMessageTestingOnly(player, "Component Schematics Issued.");
3736 handleCollectionComponentSelect(player);
3739 static_item.createNewItemFunction("item_collection_reward_capacitor_01_mk5_schematic",pInv);
3740 static_item.createNewItemFunction("item_collection_reward_capacitor_01_mk4_schematic",pInv);
3741 static_item.createNewItemFunction("item_collection_reward_capacitor_01_mk3_schematic",pInv);
3742 static_item.createNewItemFunction("item_collection_reward_capacitor_01_mk2_schematic",pInv);
3743 static_item.createNewItemFunction("item_collection_reward_capacitor_01_mk1_schematic",pInv);
3744 sendSystemMessageTestingOnly(player, "Component Schematics Issued.");
3745 handleCollectionComponentSelect(player);
3748 static_item.createNewItemFunction("item_collection_reward_engine_01_mk5_schematic",pInv);
3749 static_item.createNewItemFunction("item_collection_reward_engine_01_mk4_schematic",pInv);
3750 static_item.createNewItemFunction("item_collection_reward_engine_01_mk3_schematic",pInv);
3751 static_item.createNewItemFunction("item_collection_reward_engine_01_mk2_schematic",pInv);
3752 static_item.createNewItemFunction("item_collection_reward_engine_01_mk1_schematic",pInv);
3753 sendSystemMessageTestingOnly(player, "Component Schematics Issued.");
3754 handleCollectionComponentSelect(player);
3757 static_item.createNewItemFunction("item_collection_reward_reactor_01_mk5_schematic",pInv);
3758 static_item.createNewItemFunction("item_collection_reward_reactor_01_mk4_schematic",pInv);
3759 static_item.createNewItemFunction("item_collection_reward_reactor_01_mk3_schematic",pInv);
3760 static_item.createNewItemFunction("item_collection_reward_reactor_01_mk2_schematic",pInv);
3761 static_item.createNewItemFunction("item_collection_reward_reactor_01_mk1_schematic",pInv);
3762 sendSystemMessageTestingOnly(player, "Component Schematics Issued.");
3763 handleCollectionComponentSelect(player);
3765 case 4: //NO Engines
3766 static_item.createNewItemFunction("item_reward_orion_engine_schematic_01_01",pInv);
3767 static_item.createNewItemFunction("item_reward_nova_engine_schematic_01_01",pInv);
3768 static_item.createNewItemFunction("item_reward_orion_wpn_schematic_01_01",pInv);
3769 static_item.createNewItemFunction("item_reward_nova_wpn_schematic_01_01",pInv);
3770 sendSystemMessageTestingOnly(player, "Component Schematics Issued.");
3771 handleCollectionComponentSelect(player);
3773 case 5: //GU16 Items
3774 static_item.createNewItemFunction("item_reward_eng_elite_mk2_schematic",pInv);
3775 static_item.createNewItemFunction("item_interdiction_terminal_schematic",pInv);
3776 static_item.createNewItemFunction("item_interface_scanner_schematic",pInv);
3777 static_item.createNewItemFunction("item_space_weapon_efficiency_booster",pInv);
3778 static_item.createNewItemFunction("item_space_shield_high_capacity_projector",pInv);
3779 sendSystemMessageTestingOnly(player, "Schematics Issued.");
3780 handleCollectionComponentSelect(player);
3783 cleanScriptVars(player);
3784 return SCRIPT_CONTINUE;
3787 handleCollectionComponentSelect(player);
3788 return SCRIPT_CONTINUE;
3791 void handleShipChasisSelection(obj_id player)
3793 string[] shipChassisArray = dataTableGetStringColumn(SHIP_CHASSIS_TBL, "name");;
3794 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, shipChassisArray, "handleShipChasisSelection", false);
3797 messageHandler handleShipChasisSelection()
3799 if ( (params == null) || (params.isEmpty()) )
3801 //cleanScriptVars(player);
3802 return SCRIPT_CONTINUE;
3805 obj_id player = sui.getPlayerId(params);
3806 obj_id pInv = utils.getInventoryContainer(player);
3808 int btn = sui.getIntButtonPressed(params);
3809 int idx = sui.getListboxSelectedRow(params);
3811 if ( btn == sui.BP_REVERT )
3813 handleShipMenuSelect(player);
3814 return SCRIPT_CONTINUE;
3817 if(btn == sui.BP_CANCEL)
3819 cleanScriptVars(player);
3820 closeOldWindow(player);
3821 return SCRIPT_CONTINUE;
3824 int dataTableLength = dataTableGetNumRows(SHIP_CHASSIS_TBL);
3825 if ( idx == -1 || idx > dataTableLength)
3827 cleanScriptVars(player);
3828 return SCRIPT_CONTINUE;
3831 //make sure player is Valid
3832 if(!isIdValid(player))
3834 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3835 cleanScriptVars(player);
3836 return SCRIPT_OVERRIDE;
3838 //make sure player's inventory is valid
3839 if (!isIdValid(pInv))
3841 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3842 cleanScriptVars(player);
3843 return SCRIPT_OVERRIDE;
3845 //make sure there is room in player's inventory
3846 if (getVolumeFree(pInv) <= 0)
3848 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3849 cleanScriptVars(player);
3850 return SCRIPT_OVERRIDE;
3852 issueShipChassis(player, idx);
3854 handleShipChasisSelection(player);
3855 return SCRIPT_CONTINUE;
3858 void handleShipComponentSelection(obj_id player)
3860 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, SPACE_LOOT_CATEGORIES, "handleShipComponentSelection", false);
3863 messageHandler handleShipComponentSelection()
3865 if ( (params == null) || (params.isEmpty()) )
3867 //cleanScriptVars(player);
3868 return SCRIPT_CONTINUE;
3871 obj_id player = sui.getPlayerId(params);
3872 obj_id pInv = utils.getInventoryContainer(player);
3874 int btn = sui.getIntButtonPressed(params);
3875 int idx = sui.getListboxSelectedRow(params);
3877 if ( btn == sui.BP_REVERT )
3879 handleShipMenuSelect(player);
3880 return SCRIPT_CONTINUE;
3883 if(btn == sui.BP_CANCEL)
3885 cleanScriptVars(player);
3886 closeOldWindow(player);
3887 return SCRIPT_CONTINUE;
3890 if ( idx == -1 || idx > SPACE_LOOT_CATEGORIES.length)
3892 cleanScriptVars(player);
3893 return SCRIPT_CONTINUE;
3896 //make sure player is Valid
3897 if(!isIdValid(player))
3899 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3900 cleanScriptVars(player);
3901 return SCRIPT_OVERRIDE;
3903 //make sure player's inventory is valid
3904 if (!isIdValid(pInv))
3906 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3907 cleanScriptVars(player);
3908 return SCRIPT_OVERRIDE;
3910 //make sure there is room in player's inventory
3911 if (getVolumeFree(pInv) <= 0)
3913 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3914 cleanScriptVars(player);
3915 return SCRIPT_OVERRIDE;
3920 string armorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ARMOR_TBL, "strName");
3921 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, armorMenuArray, "handleShipComponentArmorSelection", false);
3924 string boosterMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_BOOSTER_TBL, "strName");
3925 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, boosterMenuArray, "handleShipComponentBoosterSelection", false);
3927 case 2: //droid_interface
3928 string droidInterfaceMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_DROIDINTERFACE_TBL, "strName");
3929 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, droidInterfaceMenuArray, "handleShipComponentDroidInterfaceSelection", false);
3932 string engineMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ENGINE_TBL, "strName");
3933 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, engineMenuArray, "handleShipComponentEngineSelection", false);
3936 string reactorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_REACTOR_TBL, "strName");
3937 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, reactorMenuArray, "handleShipComponentReactorSelection", false);
3939 case 5: //shield_generator
3940 string shieldMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_SHIELD_TBL, "strName");
3941 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, shieldMenuArray, "handleShipComponentShieldSelection", false);
3944 string weaponMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_WEAPON_TBL, "strName");
3945 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, weaponMenuArray, "handleShipComponentWeaponSelection", false);
3947 case 7: //weapon_capacitor
3948 string capacitorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_CAPACITOR_TBL, "strName");
3949 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, capacitorMenuArray, "handleShipComponentCapacitorSelection", false);
3951 case 8: //create a reactor
3952 obj_id droidInterface = createObject("object/tangible/ship/components/droid_interface/ddi_freitek_elite.iff", pInv, "");
3953 handleShipComponentSelection(player);
3957 cleanScriptVars(player);
3958 return SCRIPT_CONTINUE;
3960 return SCRIPT_CONTINUE;
3963 void handleShipComponentArmorSelection(obj_id player)
3965 string armorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ARMOR_TBL, "strName");
3966 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, armorMenuArray, "handleShipComponentArmorSelection", false);
3969 messageHandler handleShipComponentArmorSelection()
3971 if ( (params == null) || (params.isEmpty()) )
3973 //cleanScriptVars(player);
3974 return SCRIPT_CONTINUE;
3977 obj_id player = sui.getPlayerId(params);
3978 obj_id pInv = utils.getInventoryContainer(player);
3980 int btn = sui.getIntButtonPressed(params);
3981 int idx = sui.getListboxSelectedRow(params);
3983 if ( btn == sui.BP_REVERT )
3985 handleShipComponentSelection(player);
3986 return SCRIPT_CONTINUE;
3989 if(btn == sui.BP_CANCEL)
3991 cleanScriptVars(player);
3992 closeOldWindow(player);
3993 return SCRIPT_CONTINUE;
3996 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_ARMOR_TBL);
3997 if ( idx == -1 || idx > dataTableLength)
3999 cleanScriptVars(player);
4000 return SCRIPT_CONTINUE;
4003 //make sure player is Valid
4004 if(!isIdValid(player))
4006 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4007 cleanScriptVars(player);
4008 return SCRIPT_OVERRIDE;
4010 //make sure player's inventory is valid
4011 if (!isIdValid(pInv))
4013 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4014 cleanScriptVars(player);
4015 return SCRIPT_OVERRIDE;
4017 //make sure there is room in player's inventory
4018 if (getVolumeFree(pInv) <= 0)
4020 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4021 cleanScriptVars(player);
4022 return SCRIPT_OVERRIDE;
4024 string objString = dataTableGetString(SHIPCOMPONENT_ARMOR_TBL, idx, "strType");
4025 obj_id objectOID = createObject(objString, pInv, "");
4027 if(!isIdValid(objectOID))
4029 sendSystemMessage(player, "The component could not be created", null);
4030 return SCRIPT_CONTINUE;
4033 tweakSpaceShipComponent(objectOID);
4035 handleShipComponentArmorSelection(player);
4036 return SCRIPT_CONTINUE;
4039 void handleShipComponentBoosterSelection(obj_id player)
4041 string boosterMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_BOOSTER_TBL, "strName");
4042 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, boosterMenuArray, "handleShipComponentBoosterSelection", false);
4045 messageHandler handleShipComponentBoosterSelection()
4047 if ( (params == null) || (params.isEmpty()) )
4049 //cleanScriptVars(player);
4050 return SCRIPT_CONTINUE;
4053 obj_id player = sui.getPlayerId(params);
4054 obj_id pInv = utils.getInventoryContainer(player);
4056 int btn = sui.getIntButtonPressed(params);
4057 int idx = sui.getListboxSelectedRow(params);
4059 if ( btn == sui.BP_REVERT )
4061 handleShipComponentSelection(player);
4062 return SCRIPT_CONTINUE;
4065 if(btn == sui.BP_CANCEL)
4067 cleanScriptVars(player);
4068 closeOldWindow(player);
4069 return SCRIPT_CONTINUE;
4072 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_BOOSTER_TBL);
4073 if ( idx == -1 || idx > dataTableLength)
4075 cleanScriptVars(player);
4076 return SCRIPT_CONTINUE;
4079 //make sure player is Valid
4080 if(!isIdValid(player))
4082 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4083 cleanScriptVars(player);
4084 return SCRIPT_OVERRIDE;
4086 //make sure player's inventory is valid
4087 if (!isIdValid(pInv))
4089 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4090 cleanScriptVars(player);
4091 return SCRIPT_OVERRIDE;
4093 //make sure there is room in player's inventory
4094 if (getVolumeFree(pInv) <= 0)
4096 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4097 cleanScriptVars(player);
4098 return SCRIPT_OVERRIDE;
4100 string objectString = dataTableGetString(SHIPCOMPONENT_BOOSTER_TBL, idx, "strType");
4101 obj_id objectOID = createObject(objectString, pInv, "");
4103 if(!isIdValid(objectOID))
4105 sendSystemMessage(player, "The component could not be created", null);
4106 return SCRIPT_CONTINUE;
4109 tweakSpaceShipComponent(objectOID);
4111 handleShipComponentBoosterSelection(player);
4112 return SCRIPT_CONTINUE;
4115 void handleShipComponentCapacitorSelection(obj_id player)
4117 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_CAPACITOR_TBL, "strName");
4118 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentCapacitorSelection", false);
4121 messageHandler handleShipComponentCapacitorSelection()
4123 if ( (params == null) || (params.isEmpty()) )
4125 //cleanScriptVars(player);
4126 return SCRIPT_CONTINUE;
4129 obj_id player = sui.getPlayerId(params);
4130 obj_id pInv = utils.getInventoryContainer(player);
4132 int btn = sui.getIntButtonPressed(params);
4133 int idx = sui.getListboxSelectedRow(params);
4135 if ( btn == sui.BP_REVERT )
4137 handleShipComponentSelection(player);
4138 return SCRIPT_CONTINUE;
4141 if(btn == sui.BP_CANCEL)
4143 cleanScriptVars(player);
4144 closeOldWindow(player);
4145 return SCRIPT_CONTINUE;
4148 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_CAPACITOR_TBL);
4149 if ( idx == -1 || idx > dataTableLength)
4151 cleanScriptVars(player);
4152 return SCRIPT_CONTINUE;
4155 //make sure player is Valid
4156 if(!isIdValid(player))
4158 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4159 cleanScriptVars(player);
4160 return SCRIPT_OVERRIDE;
4162 //make sure player's inventory is valid
4163 if (!isIdValid(pInv))
4165 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4166 cleanScriptVars(player);
4167 return SCRIPT_OVERRIDE;
4169 //make sure there is room in player's inventory
4170 if (getVolumeFree(pInv) <= 0)
4172 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4173 cleanScriptVars(player);
4174 return SCRIPT_OVERRIDE;
4176 string objectString = dataTableGetString(SHIPCOMPONENT_CAPACITOR_TBL, idx, "strType");
4177 obj_id objectOID = createObject(objectString, pInv, "");
4179 if(!isIdValid(objectOID))
4181 sendSystemMessage(player, "The component could not be created", null);
4182 return SCRIPT_CONTINUE;
4185 tweakSpaceShipComponent(objectOID);
4187 handleShipComponentCapacitorSelection(player);
4188 return SCRIPT_CONTINUE;
4191 void handleShipComponentDroidInterfaceSelection(obj_id player)
4193 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_DROIDINTERFACE_TBL, "strName");
4194 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentDroidInterfaceSelection", false);
4197 messageHandler handleShipComponentDroidInterfaceSelection()
4199 if ( (params == null) || (params.isEmpty()) )
4201 //cleanScriptVars(player);
4202 return SCRIPT_CONTINUE;
4205 obj_id player = sui.getPlayerId(params);
4206 obj_id pInv = utils.getInventoryContainer(player);
4208 int btn = sui.getIntButtonPressed(params);
4209 int idx = sui.getListboxSelectedRow(params);
4211 if ( btn == sui.BP_REVERT )
4213 handleShipComponentSelection(player);
4214 return SCRIPT_CONTINUE;
4217 if(btn == sui.BP_CANCEL)
4219 cleanScriptVars(player);
4220 closeOldWindow(player);
4221 return SCRIPT_CONTINUE;
4224 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_DROIDINTERFACE_TBL);
4225 if ( idx == -1 || idx > dataTableLength)
4227 cleanScriptVars(player);
4228 return SCRIPT_CONTINUE;
4231 //make sure player is Valid
4232 if(!isIdValid(player))
4234 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4235 cleanScriptVars(player);
4236 return SCRIPT_OVERRIDE;
4238 //make sure player's inventory is valid
4239 if (!isIdValid(pInv))
4241 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4242 cleanScriptVars(player);
4243 return SCRIPT_OVERRIDE;
4245 //make sure there is room in player's inventory
4246 if (getVolumeFree(pInv) <= 0)
4248 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4249 cleanScriptVars(player);
4250 return SCRIPT_OVERRIDE;
4252 string objectString = dataTableGetString(SHIPCOMPONENT_DROIDINTERFACE_TBL, idx, "strType");
4253 obj_id objectOID = createObject(objectString, pInv, "");
4255 if(!isIdValid(objectOID))
4257 sendSystemMessage(player, "The component could not be created", null);
4258 return SCRIPT_CONTINUE;
4261 tweakSpaceShipComponent(objectOID);
4263 handleShipComponentDroidInterfaceSelection(player);
4264 return SCRIPT_CONTINUE;
4267 void handleShipComponentEngineSelection(obj_id player)
4269 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ENGINE_TBL, "strName");
4270 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentEngineSelection", false);
4273 messageHandler handleShipComponentEngineSelection()
4275 if ( (params == null) || (params.isEmpty()) )
4277 //cleanScriptVars(player);
4278 return SCRIPT_CONTINUE;
4281 obj_id player = sui.getPlayerId(params);
4282 obj_id pInv = utils.getInventoryContainer(player);
4284 int btn = sui.getIntButtonPressed(params);
4285 int idx = sui.getListboxSelectedRow(params);
4287 if ( btn == sui.BP_REVERT )
4289 handleShipComponentSelection(player);
4290 return SCRIPT_CONTINUE;
4293 if(btn == sui.BP_CANCEL)
4295 cleanScriptVars(player);
4296 closeOldWindow(player);
4297 return SCRIPT_CONTINUE;
4300 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_ENGINE_TBL);
4301 if ( idx == -1 || idx > dataTableLength)
4303 cleanScriptVars(player);
4304 return SCRIPT_CONTINUE;
4307 //make sure player is Valid
4308 if(!isIdValid(player))
4310 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4311 cleanScriptVars(player);
4312 return SCRIPT_OVERRIDE;
4314 //make sure player's inventory is valid
4315 if (!isIdValid(pInv))
4317 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4318 cleanScriptVars(player);
4319 return SCRIPT_OVERRIDE;
4321 //make sure there is room in player's inventory
4322 if (getVolumeFree(pInv) <= 0)
4324 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4325 cleanScriptVars(player);
4326 return SCRIPT_OVERRIDE;
4328 string objectString = dataTableGetString(SHIPCOMPONENT_ENGINE_TBL, idx, "strType");
4329 obj_id objectOID = createObject(objectString, pInv, "");
4331 if(!isIdValid(objectOID))
4333 sendSystemMessage(player, "The component could not be created", null);
4334 return SCRIPT_CONTINUE;
4337 tweakSpaceShipComponent(objectOID);
4339 handleShipComponentEngineSelection(player);
4340 return SCRIPT_CONTINUE;
4343 void handleShipComponentReactorSelection(obj_id player)
4345 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_REACTOR_TBL, "strName");
4346 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentReactorSelection", false);
4349 messageHandler handleShipComponentReactorSelection()
4351 if ( (params == null) || (params.isEmpty()) )
4353 //cleanScriptVars(player);
4354 return SCRIPT_CONTINUE;
4357 obj_id player = sui.getPlayerId(params);
4358 obj_id pInv = utils.getInventoryContainer(player);
4360 int btn = sui.getIntButtonPressed(params);
4361 int idx = sui.getListboxSelectedRow(params);
4363 if ( btn == sui.BP_REVERT )
4365 handleShipComponentSelection(player);
4366 return SCRIPT_CONTINUE;
4369 if(btn == sui.BP_CANCEL)
4371 cleanScriptVars(player);
4372 closeOldWindow(player);
4373 return SCRIPT_CONTINUE;
4376 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_REACTOR_TBL);
4377 if ( idx == -1 || idx > dataTableLength)
4379 cleanScriptVars(player);
4380 return SCRIPT_CONTINUE;
4383 //make sure player is Valid
4384 if(!isIdValid(player))
4386 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4387 cleanScriptVars(player);
4388 return SCRIPT_OVERRIDE;
4390 //make sure player's inventory is valid
4391 if (!isIdValid(pInv))
4393 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4394 cleanScriptVars(player);
4395 return SCRIPT_OVERRIDE;
4397 //make sure there is room in player's inventory
4398 if (getVolumeFree(pInv) <= 0)
4400 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4401 cleanScriptVars(player);
4402 return SCRIPT_OVERRIDE;
4404 string objectString = dataTableGetString(SHIPCOMPONENT_REACTOR_TBL, idx, "strType");
4405 obj_id objectOID = createObject(objectString, pInv, "");
4407 if(!isIdValid(objectOID))
4409 sendSystemMessage(player, "The component could not be created", null);
4410 return SCRIPT_CONTINUE;
4413 tweakSpaceShipComponent(objectOID);
4415 handleShipComponentReactorSelection(player);
4416 return SCRIPT_CONTINUE;
4419 void handleShipComponentShieldSelection(obj_id player)
4421 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_SHIELD_TBL, "strName");
4422 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentShieldSelection", false);
4425 messageHandler handleShipComponentShieldSelection()
4427 if ( (params == null) || (params.isEmpty()) )
4429 //cleanScriptVars(player);
4430 return SCRIPT_CONTINUE;
4433 obj_id player = sui.getPlayerId(params);
4434 obj_id pInv = utils.getInventoryContainer(player);
4436 int btn = sui.getIntButtonPressed(params);
4437 int idx = sui.getListboxSelectedRow(params);
4439 if ( btn == sui.BP_REVERT )
4441 handleShipComponentSelection(player);
4442 return SCRIPT_CONTINUE;
4445 if(btn == sui.BP_CANCEL)
4447 cleanScriptVars(player);
4448 closeOldWindow(player);
4449 return SCRIPT_CONTINUE;
4452 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_SHIELD_TBL);
4453 if ( idx == -1 || idx > dataTableLength)
4455 cleanScriptVars(player);
4456 return SCRIPT_CONTINUE;
4459 //make sure player is Valid
4460 if(!isIdValid(player))
4462 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4463 cleanScriptVars(player);
4464 return SCRIPT_OVERRIDE;
4466 //make sure player's inventory is valid
4467 if (!isIdValid(pInv))
4469 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4470 cleanScriptVars(player);
4471 return SCRIPT_OVERRIDE;
4473 //make sure there is room in player's inventory
4474 if (getVolumeFree(pInv) <= 0)
4476 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4477 cleanScriptVars(player);
4478 return SCRIPT_OVERRIDE;
4480 string objectString = dataTableGetString(SHIPCOMPONENT_SHIELD_TBL, idx, "strType");
4481 obj_id objectOID = createObject(objectString, pInv, "");
4483 if(!isIdValid(objectOID))
4485 sendSystemMessage(player, "The component could not be created", null);
4486 return SCRIPT_CONTINUE;
4489 tweakSpaceShipComponent(objectOID);
4491 handleShipComponentShieldSelection(player);
4492 return SCRIPT_CONTINUE;
4494 void handleShipComponentWeaponSelection(obj_id player)
4496 string menuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_WEAPON_TBL, "strName");
4497 refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, menuArray, "handleShipComponentWeaponSelection", false);
4500 messageHandler handleShipComponentWeaponSelection()
4502 if ( (params == null) || (params.isEmpty()) )
4504 //cleanScriptVars(player);
4505 return SCRIPT_CONTINUE;
4508 obj_id player = sui.getPlayerId(params);
4509 obj_id pInv = utils.getInventoryContainer(player);
4511 int btn = sui.getIntButtonPressed(params);
4512 int idx = sui.getListboxSelectedRow(params);
4514 if ( btn == sui.BP_REVERT )
4516 handleShipComponentSelection(player);
4517 return SCRIPT_CONTINUE;
4520 if(btn == sui.BP_CANCEL)
4522 cleanScriptVars(player);
4523 closeOldWindow(player);
4524 return SCRIPT_CONTINUE;
4527 int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_WEAPON_TBL);
4528 if ( idx == -1 || idx > dataTableLength)
4530 cleanScriptVars(player);
4531 return SCRIPT_CONTINUE;
4534 //make sure player is Valid
4535 if(!isIdValid(player))
4537 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4538 cleanScriptVars(player);
4539 return SCRIPT_OVERRIDE;
4541 //make sure player's inventory is valid
4542 if (!isIdValid(pInv))
4544 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4545 cleanScriptVars(player);
4546 return SCRIPT_OVERRIDE;
4548 //make sure there is room in player's inventory
4549 if (getVolumeFree(pInv) <= 0)
4551 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4552 cleanScriptVars(player);
4553 return SCRIPT_OVERRIDE;
4555 string objectString = dataTableGetString(SHIPCOMPONENT_WEAPON_TBL, idx, "strType");
4556 obj_id objectOID = createObject(objectString, pInv, "");
4558 if(!isIdValid(objectOID))
4560 sendSystemMessage(player, "The component could not be created", null);
4561 return SCRIPT_CONTINUE;
4564 tweakSpaceShipComponent(objectOID);
4566 handleShipComponentWeaponSelection(player);
4567 return SCRIPT_CONTINUE;
4570 //===================================================================
4571 // Deeds Section //===============================================
4572 void handleDeedOption(obj_id player)
4575 refreshMenu ( player, "Select the desired deed option", "Character Builder Terminal", DEED_OPTIONS, "handleDeedSelect", false);
4578 messageHandler handleDeedSelect()
4580 if ( (params == null) || (params.isEmpty()) )
4582 //cleanScriptVars(player);
4583 return SCRIPT_CONTINUE;
4586 obj_id player = sui.getPlayerId(params);
4587 obj_id pInv = utils.getInventoryContainer(player);
4589 int btn = sui.getIntButtonPressed(params);
4590 int idx = sui.getListboxSelectedRow(params);
4592 if ( btn == sui.BP_REVERT )
4594 startCharacterBuilder(player);
4595 return SCRIPT_CONTINUE;
4598 if(btn == sui.BP_CANCEL)
4600 cleanScriptVars(player);
4601 closeOldWindow(player);
4602 return SCRIPT_CONTINUE;
4605 if ( idx == -1 || idx > DEED_OPTIONS.length)
4607 cleanScriptVars(player);
4608 return SCRIPT_CONTINUE;
4611 //make sure player is Valid
4612 if(!isIdValid(player))
4614 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4615 cleanScriptVars(player);
4616 return SCRIPT_OVERRIDE;
4618 //make sure player's inventory is valid
4619 if (!isIdValid(pInv))
4621 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4622 cleanScriptVars(player);
4623 return SCRIPT_OVERRIDE;
4625 //make sure there is room in player's inventory
4626 if (getVolumeFree(pInv) <= 0)
4628 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4629 cleanScriptVars(player);
4630 return SCRIPT_OVERRIDE;
4636 case 0: // clothing factory
4637 createObject("object/tangible/deed/factory_deed/clothing_factory_deed.iff", pInv, "");
4638 sendSystemMessageTestingOnly(player, "Clothing Factory Deed Issued.");
4640 case 1: // food factory
4641 createObject("object/tangible/deed/factory_deed/food_factory_deed.iff", pInv, "");
4642 sendSystemMessageTestingOnly(player, "Food Factory Deed Issued.");
4644 case 2: // equipment factory
4645 createObject("object/tangible/deed/factory_deed/item_factory_deed.iff", pInv, "");
4646 sendSystemMessageTestingOnly(player, "Item Factory Deed Issued.");
4648 case 3: // structure factory
4649 createObject("object/tangible/deed/factory_deed/structure_factory_deed.iff", pInv, "");
4650 sendSystemMessageTestingOnly(player, "Structure Factory Deed Issued.");
4652 case 4: // generic small house
4653 createObject("object/tangible/deed/player_house_deed/generic_house_small_deed.iff", pInv, "");
4654 sendSystemMessageTestingOnly(player, "Generic House Deed Issued.");
4656 case 5: // tatooine small house
4657 createObject("object/tangible/deed/player_house_deed/tatooine_house_small_deed.iff", pInv, "");
4658 sendSystemMessageTestingOnly(player, "Small Tatooine House Deed Issued.");
4660 case 6: // naboo small house
4661 createObject("object/tangible/deed/player_house_deed/naboo_house_small_deed.iff", pInv, "");
4662 sendSystemMessageTestingOnly(player, "Small Naboo House Deed Issued.");
4664 case 7: // corellia small house
4665 createObject("object/tangible/deed/player_house_deed/corellia_house_small_deed.iff", pInv, "");
4666 sendSystemMessageTestingOnly(player, "Small Corellia House Deed Issued.");
4668 case 8: // merchant tent
4669 createObject("object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.iff", pInv, "");
4670 sendSystemMessageTestingOnly(player, "Merchant Tent Deed Issued.");
4672 case 9: // Heavy Mineral
4673 obj_id mineral = createObject("object/tangible/deed/harvester_deed/ore_harvester_heavy_deed.iff", pInv, "");
4674 sendSystemMessageTestingOnly(player, "Heavy Mineral Harvester Issued.");
4675 if(isIdValid(mineral))
4677 setObjVar (mineral, "player_structure.deed.maxExtractionRate", 13);
4678 setObjVar (mineral, "player_structure.deed.currentExtractionRate", 13);
4681 case 10: // Heavy Flora
4682 obj_id flora = createObject("object/tangible/deed/harvester_deed/flora_harvester_deed_heavy.iff", pInv, "");
4683 sendSystemMessageTestingOnly(player, "Heavy Flora Harvester Issued.");
4684 if(isIdValid(flora))
4686 setObjVar (flora, "player_structure.deed.maxExtractionRate", 13);
4687 setObjVar (flora, "player_structure.deed.currentExtractionRate", 13);
4690 case 11: // Heavy Gas
4691 obj_id gas = createObject("object/tangible/deed/harvester_deed/gas_harvester_deed_heavy.iff", pInv, "");
4692 sendSystemMessageTestingOnly(player, "Heavy Gas Harvester Issued.");
4695 setObjVar (gas, "player_structure.deed.maxExtractionRate", 13);
4696 setObjVar (gas, "player_structure.deed.currentExtractionRate", 13);
4699 case 12: // Heavy Chemical
4700 obj_id chemical = createObject("object/tangible/deed/harvester_deed/liquid_harvester_deed_heavy.iff", pInv, "");
4701 sendSystemMessageTestingOnly(player, "Heavy Chemical Harvester Issued.");
4702 if(isIdValid(chemical))
4704 setObjVar (chemical, "player_structure.deed.maxExtractionRate", 13);
4705 setObjVar (chemical, "player_structure.deed.currentExtractionRate", 13);
4708 case 13: // Heavy Moisture
4709 obj_id moisture = createObject("object/tangible/deed/harvester_deed/moisture_harvester_deed_heavy.iff", pInv, "");
4710 sendSystemMessageTestingOnly(player, "Heavy Moisture Vaporator Issued.");
4711 if(isIdValid(moisture))
4713 setObjVar (moisture, "player_structure.deed.maxExtractionRate", 13);
4714 setObjVar (moisture, "player_structure.deed.currentExtractionRate", 13);
4718 obj_id fusion = createObject("object/tangible/deed/generator_deed/power_generator_fusion_deed.iff", pInv, "");
4719 sendSystemMessageTestingOnly(player, "Fusion Reactor Issued.");
4720 if(isIdValid(fusion))
4722 setObjVar (fusion, "player_structure.deed.maxExtractionRate", 16);
4723 setObjVar (fusion, "player_structure.deed.currentExtractionRate", 16);
4727 //Tatooine City Pack
4728 createObject("object/tangible/deed/city_deed/cityhall_corellia_deed.iff", pInv, "");
4729 createObject("object/tangible/deed/city_deed/cloning_corellia_deed.iff", pInv, "");
4730 createObject("object/tangible/deed/city_deed/bank_corellia_deed.iff", pInv, "");
4731 createObject("object/tangible/deed/city_deed/garage_corellia_deed.iff", pInv, "");
4732 createObject("object/tangible/deed/city_deed/garden_corellia_lrg_01_deed.iff", pInv, "");
4733 createObject("object/tangible/deed/city_deed/garden_corellia_med_01_deed.iff", pInv, "");
4734 createObject("object/tangible/deed/city_deed/garden_corellia_sml_01_deed.iff", pInv, "");
4735 sendSystemMessageTestingOnly(player, "Corellia City Pack Created");
4739 createObject("object/tangible/deed/city_deed/cityhall_naboo_deed.iff", pInv, "");
4740 createObject("object/tangible/deed/city_deed/cloning_naboo_deed.iff", pInv, "");
4741 createObject("object/tangible/deed/city_deed/bank_naboo_deed.iff", pInv, "");
4742 createObject("object/tangible/deed/city_deed/garage_naboo_deed.iff", pInv, "");
4743 createObject("object/tangible/deed/city_deed/garden_naboo_lrg_01_deed.iff", pInv, "");
4744 createObject("object/tangible/deed/city_deed/garden_naboo_med_01_deed.iff", pInv, "");
4745 createObject("object/tangible/deed/city_deed/garden_naboo_sml_01_deed.iff", pInv, "");
4746 sendSystemMessageTestingOnly(player, "Naboo City Pack Created");
4749 //Corellia City Pack
4750 createObject("object/tangible/deed/city_deed/cityhall_tatooine_deed.iff", pInv, "");
4751 createObject("object/tangible/deed/city_deed/cloning_tatooine_deed.iff", pInv, "");
4752 createObject("object/tangible/deed/city_deed/bank_tatooine_deed.iff", pInv, "");
4753 createObject("object/tangible/deed/city_deed/garage_tatooine_deed.iff", pInv, "");
4754 createObject("object/tangible/deed/city_deed/garden_tatooine_lrg_01_deed.iff", pInv, "");
4755 createObject("object/tangible/deed/city_deed/garden_tatooine_med_01_deed.iff", pInv, "");
4756 createObject("object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.iff", pInv, "");
4757 sendSystemMessageTestingOnly(player, "Tatooine City Pack Created");
4760 cleanScriptVars(player);
4761 return SCRIPT_CONTINUE;
4765 handleDeedOption(player);
4766 return SCRIPT_CONTINUE;
4770 //===================================================================
4771 // Crafting Section //===============================================
4772 void handleCraftingOption(obj_id player)
4775 refreshMenu ( player, "Select the desired deed option", "Character Builder Terminal", CRAFTING_OPTIONS, "handleCraftingSelect", false);
4778 messageHandler handleCraftingSelect()
4780 if ( (params == null) || (params.isEmpty()) )
4782 //cleanScriptVars(player);
4783 return SCRIPT_CONTINUE;
4786 obj_id player = sui.getPlayerId(params);
4787 obj_id pInv = utils.getInventoryContainer(player);
4789 int btn = sui.getIntButtonPressed(params);
4790 int idx = sui.getListboxSelectedRow(params);
4792 if ( btn == sui.BP_REVERT )
4794 startCharacterBuilder(player);
4795 return SCRIPT_CONTINUE;
4798 if(btn == sui.BP_CANCEL)
4800 cleanScriptVars(player);
4801 closeOldWindow(player);
4802 return SCRIPT_CONTINUE;
4805 if ( idx == -1 || idx > CRAFTING_OPTIONS.length)
4807 cleanScriptVars(player);
4808 return SCRIPT_CONTINUE;
4811 //make sure player is Valid
4812 if(!isIdValid(player))
4814 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4815 cleanScriptVars(player);
4816 return SCRIPT_OVERRIDE;
4818 //make sure player's inventory is valid
4819 if (!isIdValid(pInv))
4821 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4822 cleanScriptVars(player);
4823 return SCRIPT_OVERRIDE;
4825 //make sure there is room in player's inventory
4826 if (getVolumeFree(pInv) <= 0)
4828 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4829 cleanScriptVars(player);
4830 return SCRIPT_OVERRIDE;
4836 case 0: // weapon station
4837 createObject("object/tangible/crafting/station/weapon_station.iff", pInv, "");
4838 sendSystemMessageTestingOnly(player, "Weapon Crafting Station Issued.");
4840 case 1: // structure station
4841 createObject("object/tangible/crafting/station/structure_station.iff", pInv, "");
4842 sendSystemMessageTestingOnly(player, "Structure Crafting Station Issued.");
4844 case 2: // clothing station
4845 createObject("object/tangible/crafting/station/clothing_station.iff", pInv, "");
4846 sendSystemMessageTestingOnly(player, "Clothing Crafting Station Issued.");
4848 case 3: // food station
4849 createObject("object/tangible/crafting/station/food_station.iff", pInv, "");
4850 sendSystemMessageTestingOnly(player, "Food Crafting Station Issued.");
4852 case 4: // generic crafting tool
4853 createObject("object/tangible/crafting/station/generic_tool.iff", pInv, "");
4854 sendSystemMessageTestingOnly(player, "Generic Crafting Tool Issued.");
4856 case 5: // weapon crafting tool
4857 createObject("object/tangible/crafting/station/weapon_tool.iff", pInv, "");
4858 sendSystemMessageTestingOnly(player, "Weapon Crafting Tool Issued.");
4860 case 6: // structure crafting tool
4861 createObject("object/tangible/crafting/station/structure_tool.iff", pInv, "");
4862 sendSystemMessageTestingOnly(player, "Structure Crafting Tool Issued.");
4864 case 7: // clothing crafting tool
4865 createObject("object/tangible/crafting/station/clothing_tool.iff", pInv, "");
4866 sendSystemMessageTestingOnly(player, "Clothing Crafting Tool Issued.");
4868 case 8: // food crafting tool
4869 createObject("object/tangible/crafting/station/food_tool.iff", pInv, "");
4870 sendSystemMessageTestingOnly(player, "Food Crafting Tool Issued.");
4873 createObject("object/tangible/crafting/station/space_tool.iff", pInv, "");
4874 sendSystemMessageTestingOnly(player, "Ship Crafting Tool Issued.");
4877 createObject("object/tangible/crafting/station/space_station.iff", pInv, "");
4878 sendSystemMessageTestingOnly(player, "Ship Crafting Station Issued.");
4881 cleanScriptVars(player);
4882 return SCRIPT_CONTINUE;
4887 handleCraftingOption(player);
4888 return SCRIPT_CONTINUE;
4892 //===================================================================
4893 // PA Hall Section //===============================================
4894 void handlePAOption(obj_id player)
4896 refreshMenu ( player, "Select the desired deed option", "Character Builder Terminal", PA_OPTIONS, "handlePASelect", false);
4899 messageHandler handlePASelect()
4901 if ( (params == null) || (params.isEmpty()) )
4903 //cleanScriptVars(player);
4904 return SCRIPT_CONTINUE;
4906 obj_id player = sui.getPlayerId(params);
4907 obj_id pInv = utils.getInventoryContainer(player);
4909 int btn = sui.getIntButtonPressed(params);
4910 int idx = sui.getListboxSelectedRow(params);
4912 if ( btn == sui.BP_REVERT )
4914 startCharacterBuilder(player);
4915 return SCRIPT_CONTINUE;
4918 if(btn == sui.BP_CANCEL)
4920 cleanScriptVars(player);
4921 closeOldWindow(player);
4922 return SCRIPT_CONTINUE;
4925 if ( idx == -1 || idx > PA_OPTIONS.length)
4927 cleanScriptVars(player);
4928 return SCRIPT_CONTINUE;
4931 //make sure player is Valid
4932 if(!isIdValid(player))
4934 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4935 cleanScriptVars(player);
4936 return SCRIPT_OVERRIDE;
4938 //make sure player's inventory is valid
4939 if (!isIdValid(pInv))
4941 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4942 cleanScriptVars(player);
4943 return SCRIPT_OVERRIDE;
4945 //make sure there is room in player's inventory
4946 if (getVolumeFree(pInv) <= 0)
4948 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4949 cleanScriptVars(player);
4950 return SCRIPT_OVERRIDE;
4956 case 0: // generic pa hall
4957 createObject("object/tangible/deed/guild_deed/generic_guild_deed.iff", pInv, "");
4958 sendSystemMessageTestingOnly(player, "Generic PA Hall Deed Issued.");
4960 case 1: // tatooine pa hall
4961 createObject("object/tangible/deed/guild_deed/tatooine_guild_deed.iff", pInv, "");
4962 sendSystemMessageTestingOnly(player, "Tatooine PA Hall Deed Issued.");
4964 case 2: // naboo pa hall
4965 createObject("object/tangible/deed/guild_deed/naboo_guild_deed.iff", pInv, "");
4966 sendSystemMessageTestingOnly(player, "Naboo PA Hall Deed Issued.");
4968 case 3: // corellia pa hall
4969 createObject("object/tangible/deed/guild_deed/corellia_guild_deed.iff", pInv, "");
4970 sendSystemMessageTestingOnly(player, "Corellia PA Hall Deed Issued.");
4972 case 4: // tatooine city hall
4973 createObject("object/tangible/deed/city_deed/cityhall_tatooine_deed.iff", pInv, "");
4974 sendSystemMessageTestingOnly(player, "Tatooine City Hall Deed Issued.");
4976 case 5: // naboo city hall
4977 createObject("object/tangible/deed/city_deed/cityhall_naboo_deed.iff", pInv, "");
4978 sendSystemMessageTestingOnly(player, "Naboo City Hall Deed Issued.");
4980 case 6: // corellia city hall
4981 createObject("object/tangible/deed/city_deed/cityhall_corellia_deed.iff", pInv, "");
4982 sendSystemMessageTestingOnly(player, "Corellia City Hall Deed Issued.");
4985 cleanScriptVars(player);
4986 return SCRIPT_CONTINUE;
4991 handlePAOption(player);
4992 return SCRIPT_CONTINUE;
4996 //===================================================================
4997 // Weapon Section //===============================================
4999 void handleWeaponOption(obj_id player)
5002 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5005 messageHandler handleWeaponOptions()
5007 if ( (params == null) || (params.isEmpty()) )
5009 //cleanScriptVars(player);
5010 return SCRIPT_CONTINUE;
5013 obj_id player = sui.getPlayerId(params);
5014 int btn = sui.getIntButtonPressed(params);
5015 int idx = sui.getListboxSelectedRow(params);
5017 if ( btn == sui.BP_REVERT )
5019 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
5020 return SCRIPT_CONTINUE;
5023 if(btn == sui.BP_CANCEL)
5025 cleanScriptVars(player);
5026 closeOldWindow(player);
5027 return SCRIPT_CONTINUE;
5030 if ( idx == -1 || idx > WEAPON_OPTIONS.length)
5032 cleanScriptVars(player);
5033 return SCRIPT_CONTINUE;
5036 //make sure player is Valid
5037 if(!isIdValid(player))
5039 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5040 cleanScriptVars(player);
5041 return SCRIPT_OVERRIDE;
5049 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", PISTOL_OPTIONS, "handlePistolSelect", false);
5052 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", CARBINE_OPTIONS, "handleCarbineSelect", false);
5055 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", RIFLE_OPTIONS, "handleRifleSelect", false);
5058 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", HEAVY_WEAPON_OPTIONS, "handleHeavySelect", false);
5061 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", UNARMED_OPTIONS, "handleUnarmedSelect", false);
5064 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", ONEHANDED_OPTIONS, "handleOneHandedSelect", false);
5067 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", TWOHANDED_OPTIONS, "handleTwoHandedSelect", false);
5070 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", POLEARM_OPTIONS, "handlePolearmSelect", false);
5073 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", BATTLEFIELD_WEAPON_OPTIONS, "handleBattlefieldSelect", false);
5076 // refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", GRENADE_OPTIONS, "handleGrenadeSelect", false);
5079 cleanScriptVars(player);
5080 return SCRIPT_CONTINUE;
5084 return SCRIPT_CONTINUE;
5086 messageHandler handlePistolSelect()
5089 if ( (params == null) || (params.isEmpty()) )
5091 //cleanScriptVars(player);
5092 return SCRIPT_CONTINUE;
5095 obj_id player = sui.getPlayerId(params);
5096 obj_id pInv = utils.getInventoryContainer(player);
5098 int btn = sui.getIntButtonPressed(params);
5099 int idx = sui.getListboxSelectedRow(params);
5101 if ( btn == sui.BP_REVERT)
5103 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5104 return SCRIPT_CONTINUE;
5107 if(btn == sui.BP_CANCEL)
5109 cleanScriptVars(player);
5110 closeOldWindow(player);
5111 return SCRIPT_CONTINUE;
5115 if ( idx == -1 || idx > PISTOL_OPTIONS.length)
5117 cleanScriptVars(player);
5118 return SCRIPT_CONTINUE;
5121 //make sure player is Valid
5122 if(!isIdValid(player))
5124 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5125 cleanScriptVars(player);
5126 return SCRIPT_OVERRIDE;
5128 //make sure player's inventory is valid
5129 if (!isIdValid(pInv))
5131 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5132 cleanScriptVars(player);
5133 return SCRIPT_OVERRIDE;
5135 //make sure there is room in player's inventory
5136 if (getVolumeFree(pInv) <= 0)
5138 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5139 cleanScriptVars(player);
5140 return SCRIPT_OVERRIDE;
5148 weapon = "object/weapon/ranged/pistol/pistol_cdef.iff";
5150 case 1: // scout blaster
5151 weapon = "object/weapon/ranged/pistol/pistol_scout_blaster.iff";
5153 case 2: // sonic blaster
5154 weapon = "object/weapon/ranged/pistol/pistol_geonosian_sonic_blaster_loot.iff";
5156 case 3: // republic blaster
5157 weapon = "object/weapon/ranged/pistol/pistol_republic_blaster.iff";
5160 weapon = "object/weapon/ranged/pistol/pistol_launcher.iff";
5163 weapon = "object/weapon/ranged/pistol/pistol_scatter.iff";
5165 case 6: // light scatter
5166 weapon = "object/weapon/ranged/pistol/pistol_scatter_light.iff";
5168 case 7: // sr combat
5169 weapon = "object/weapon/ranged/pistol/pistol_srcombat.iff";
5172 weapon = "object/weapon/ranged/pistol/pistol_striker.iff";
5175 weapon = "object/weapon/ranged/pistol/pistol_tangle.iff";
5178 weapon = "object/weapon/ranged/pistol/pistol_power5.iff";
5181 weapon = "object/weapon/ranged/pistol/pistol_fwg5.iff";
5184 weapon = "object/weapon/ranged/pistol/pistol_dx2.iff";
5187 weapon = "object/weapon/ranged/pistol/pistol_dl44_metal.iff";
5190 weapon = "object/weapon/ranged/pistol/pistol_dl44.iff";
5193 weapon = "object/weapon/ranged/pistol/pistol_dh17.iff";
5196 weapon = "object/weapon/ranged/pistol/pistol_d18.iff";
5198 case 17: // alliance disruptor
5199 weapon = "object/weapon/ranged/pistol/pistol_alliance_disruptor.iff";
5201 case 18: // deathhammer
5202 weapon = "object/weapon/ranged/pistol/pistol_deathhammer.iff";
5204 case 19: // flare pistol
5205 weapon = "object/weapon/ranged/pistol/pistol_flare.iff";
5207 case 20: // flechette pistol
5208 weapon = "object/weapon/ranged/pistol/pistol_flechette.iff";
5210 case 21: // intimidator
5211 weapon = "object/weapon/ranged/pistol/pistol_intimidator.iff";
5213 case 22: // jawa pistol
5214 weapon = "object/weapon/ranged/pistol/pistol_jawa.iff";
5216 case 23: // renegade pistol
5217 weapon = "object/weapon/ranged/pistol/pistol_renegade.iff";
5220 weapon = "object/weapon/ranged/pistol/pistol_de_10.iff";
5222 case 25: // DL44 Metal
5223 weapon = "object/weapon/ranged/pistol/pistol_dl44_metal_light.iff";
5225 case 26: // Disruptor
5226 weapon = "object/weapon/ranged/pistol/som_disruptor_pistol.iff";
5228 case 27: // Ion Relic
5229 weapon = "object/weapon/ranged/pistol/som_ion_relic_pistol.iff";
5231 case 28: // heroic SD
5232 weapon = "object/weapon/ranged/pistol/pistol_heroic_sd.iff";
5235 cleanScriptVars(player);
5236 return SCRIPT_CONTINUE;
5239 if(weapon != null && weapon != "")
5240 createSnowFlakeFrogWeapon(player, weapon);
5242 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", PISTOL_OPTIONS, "handlePistolSelect", false);
5243 return SCRIPT_CONTINUE;
5245 messageHandler handleCarbineSelect()
5248 if ( (params == null) || (params.isEmpty()) )
5250 //cleanScriptVars(player);
5251 return SCRIPT_CONTINUE;
5254 obj_id player = sui.getPlayerId(params);
5255 obj_id pInv = utils.getInventoryContainer(player);
5257 int btn = sui.getIntButtonPressed(params);
5258 int idx = sui.getListboxSelectedRow(params);
5260 if ( btn == sui.BP_REVERT )
5262 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5263 return SCRIPT_CONTINUE;
5266 if(btn == sui.BP_CANCEL)
5268 cleanScriptVars(player);
5269 closeOldWindow(player);
5270 return SCRIPT_CONTINUE;
5274 if ( idx == -1 || idx > CARBINE_OPTIONS.length)
5276 cleanScriptVars(player);
5277 return SCRIPT_CONTINUE;
5280 //make sure player is Valid
5281 if(!isIdValid(player))
5283 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5284 cleanScriptVars(player);
5285 return SCRIPT_OVERRIDE;
5287 //make sure player's inventory is valid
5288 if (!isIdValid(pInv))
5290 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5291 cleanScriptVars(player);
5292 return SCRIPT_OVERRIDE;
5294 //make sure there is room in player's inventory
5295 if (getVolumeFree(pInv) <= 0)
5297 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5298 cleanScriptVars(player);
5299 return SCRIPT_OVERRIDE;
5307 weapon = "object/weapon/ranged/carbine/carbine_cdef.iff";
5310 weapon = "object/weapon/ranged/carbine/carbine_dh17.iff";
5312 case 2: // dh17 snubnose
5313 weapon = "object/weapon/ranged/carbine/carbine_dh17_snubnose.iff";
5316 weapon = "object/weapon/ranged/carbine/carbine_e11.iff";
5318 case 4: // e11 mark 2
5319 weapon = "object/weapon/ranged/carbine/carbine_e11_mark2.iff";
5322 weapon = "object/weapon/ranged/carbine/carbine_laser.iff";
5325 weapon = "object/weapon/ranged/carbine/carbine_dxr6.iff";
5327 case 7: // ee3 carbine
5328 weapon = "object/weapon/ranged/carbine/carbine_ee3.iff";
5331 weapon = "object/weapon/ranged/carbine/carbine_elite.iff";
5334 weapon = "object/weapon/ranged/carbine/carbine_nym_slugthrower.iff";
5336 case 10: // alliance needler
5337 weapon = "object/weapon/ranged/carbine/carbine_alliance_needler.iff";
5339 case 11: // bothan bola
5340 weapon = "object/weapon/ranged/carbine/carbine_bothan_bola.iff";
5343 weapon ="object/weapon/ranged/carbine/carbine_e5.iff";
5345 case 13: // geonosian
5346 weapon = "object/weapon/ranged/carbine/carbine_geo.iff";
5349 weapon = "object/weapon/ranged/carbine/carbine_proton.iff";
5352 weapon = "object/weapon/ranged/carbine/carbine_czerka_dart.iff";
5355 weapon = "object/weapon/ranged/carbine/som_carbine_republic_sfor.iff";
5357 case 17: // heroic sd
5358 weapon = "object/weapon/ranged/carbine/carbine_heroic_sd.iff";
5361 cleanScriptVars(player);
5362 return SCRIPT_CONTINUE;
5365 if(weapon != null && weapon != "")
5366 createSnowFlakeFrogWeapon(player, weapon);
5368 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", CARBINE_OPTIONS, "handleCarbineSelect", false);
5369 return SCRIPT_CONTINUE;
5372 messageHandler handleRifleSelect()
5374 if ( (params == null) || (params.isEmpty()) )
5376 //cleanScriptVars(player);
5377 return SCRIPT_CONTINUE;
5380 obj_id player = sui.getPlayerId(params);
5381 obj_id pInv = utils.getInventoryContainer(player);
5383 int btn = sui.getIntButtonPressed(params);
5384 int idx = sui.getListboxSelectedRow(params);
5386 if ( btn == sui.BP_REVERT )
5388 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5389 return SCRIPT_CONTINUE;
5392 if(btn == sui.BP_CANCEL)
5394 cleanScriptVars(player);
5395 closeOldWindow(player);
5396 return SCRIPT_CONTINUE;
5400 if ( idx == -1 || idx > RIFLE_OPTIONS.length)
5402 cleanScriptVars(player);
5403 return SCRIPT_CONTINUE;
5406 //make sure player is Valid
5407 if(!isIdValid(player))
5409 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5410 cleanScriptVars(player);
5411 return SCRIPT_OVERRIDE;
5413 //make sure player's inventory is valid
5414 if (!isIdValid(pInv))
5416 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5417 cleanScriptVars(player);
5418 return SCRIPT_OVERRIDE;
5420 //make sure there is room in player's inventory
5421 if (getVolumeFree(pInv) <= 0)
5423 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5424 cleanScriptVars(player);
5425 return SCRIPT_OVERRIDE;
5432 case 0: // Death Trooper
5433 weapon = "item_outbreak_deathrooper_rifle";
5435 case 1: // TC-22 GCW
5436 weapon = "weapon_gcw_tc22_rifle_03_01";
5438 case 2: // Jinkins J-1 Nym's Themepark
5439 weapon = "weapon_jinkins_j1_01_01";
5442 weapon = "object/weapon/ranged/rifle/rifle_cdef.iff";
5444 case 4: // dlt20 rifle
5445 weapon = "object/weapon/ranged/rifle/rifle_dlt20.iff";
5447 case 5: // dlt20a rifle
5448 weapon = "object/weapon/ranged/rifle/rifle_dlt20a.iff";
5450 case 6: // tusken rifle
5451 weapon = "object/weapon/ranged/rifle/rifle_tusken.iff";
5454 weapon = "object/weapon/ranged/rifle/rifle_laser.iff";
5457 weapon = "object/weapon/ranged/rifle/rifle_sg82.iff";
5459 case 9: // spraystick
5460 weapon = "object/weapon/ranged/rifle/rifle_spraystick.iff";
5462 case 10: // e11 rifle
5463 weapon = "object/weapon/ranged/rifle/rifle_e11.iff";
5465 case 11: // jawa ion
5466 weapon = "object/weapon/ranged/rifle/rifle_jawa_ion.iff";
5469 weapon = "object/weapon/ranged/rifle/rifle_t21.iff";
5472 weapon = "object/weapon/ranged/rifle/rifle_tenloss_dxr6_disruptor_loot.iff";
5474 case 14: // berserker
5475 weapon = "object/weapon/ranged/rifle/rifle_berserker.iff";
5477 case 15: // light bowcaster
5478 weapon = "object/weapon/ranged/rifle/rifle_bowcaster.iff";
5480 case 16: // recon bowcaster
5481 weapon = "object/weapon/ranged/rifle/rifle_bowcaster_medium.iff";
5483 case 17: // assault bowcaster
5484 weapon = "object/weapon/ranged/rifle/rifle_bowcaster_heavy.iff";
5486 case 18: // rifle beam
5487 weapon = "object/weapon/ranged/rifle/rifle_beam.iff";
5489 case 19: // acid beam
5490 weapon = "object/weapon/ranged/rifle/rifle_acid_beam.iff";
5492 case 20: // high velocity sniper rifle
5493 weapon = "object/weapon/ranged/rifle/rifle_adventurer.iff";
5495 case 21: // LD1 Rifle
5496 weapon = "object/weapon/ranged/rifle/rifle_ld1.iff";
5498 case 22: // massassi rifle
5499 weapon = "object/weapon/ranged/rifle/rifle_massassi_ink.iff";
5501 case 23: // proton rifle
5502 weapon = "object/weapon/ranged/rifle/rifle_proton.iff";
5504 case 24: // lightning
5505 weapon = "object/weapon/ranged/rifle/rifle_lightning_light.iff";
5507 case 25: // light laser
5508 weapon = "object/weapon/ranged/rifle/rifle_laser_light.iff";
5510 case 26: // Heavy Lightning
5511 weapon = "object/weapon/ranged/rifle/rifle_lightning_heavy.iff";
5514 weapon = "object/weapon/ranged/rifle/som_rifle_dp23.iff";
5516 case 28: // disruptor rifle
5517 weapon = "object/weapon/ranged/rifle/som_rifle_mustafar_disruptor.iff";
5519 case 29: // tusken eilte
5520 weapon = "object/weapon/ranged/rifle/rifle_tusken_elite.iff";
5523 cleanScriptVars(player);
5524 return SCRIPT_CONTINUE;
5527 if(weapon != null && weapon != "")
5529 if(static_item.isStaticItem(weapon))
5531 static_item.createNewItemFunction(weapon, pInv);
5535 createSnowFlakeFrogWeapon(player, weapon);
5538 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", RIFLE_OPTIONS, "handleRifleSelect", false);
5539 return SCRIPT_CONTINUE;
5542 messageHandler handleHeavySelect()
5545 if ( (params == null) || (params.isEmpty()) )
5547 //cleanScriptVars(player);
5548 return SCRIPT_CONTINUE;
5551 obj_id player = sui.getPlayerId(params);
5552 obj_id pInv = utils.getInventoryContainer(player);
5554 int btn = sui.getIntButtonPressed(params);
5555 int idx = sui.getListboxSelectedRow(params);
5557 if ( btn == sui.BP_REVERT )
5559 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5560 return SCRIPT_CONTINUE;
5563 if(btn == sui.BP_CANCEL)
5565 cleanScriptVars(player);
5566 closeOldWindow(player);
5567 return SCRIPT_CONTINUE;
5570 if ( idx == -1 || idx > HEAVY_WEAPON_OPTIONS.length)
5572 cleanScriptVars(player);
5573 return SCRIPT_CONTINUE;
5576 //make sure player is Valid
5577 if(!isIdValid(player))
5579 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5580 cleanScriptVars(player);
5581 return SCRIPT_OVERRIDE;
5583 //make sure player's inventory is valid
5584 if (!isIdValid(pInv))
5586 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5587 cleanScriptVars(player);
5588 return SCRIPT_OVERRIDE;
5590 //make sure there is room in player's inventory
5591 if (getVolumeFree(pInv) <= 0)
5593 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5594 cleanScriptVars(player);
5595 return SCRIPT_OVERRIDE;
5602 case 0: // Rocket Launcher
5603 weapon = "object/weapon/ranged/heavy/heavy_rocket_launcher.iff";
5605 case 1: // flame thrower
5606 weapon = "object/weapon/ranged/rifle/rifle_flame_thrower.iff";
5608 case 2: // Acid Rifle
5609 weapon = "object/weapon/ranged/rifle/rifle_acid_beam.iff";
5611 case 3: // lightning
5612 weapon = "object/weapon/ranged/rifle/rifle_lightning.iff";
5614 case 4: // heavy acid beam
5615 weapon = "object/weapon/ranged/heavy/heavy_acid_beam.iff";
5617 case 5: // heavy lightning beam
5618 weapon = "object/weapon/ranged/heavy/heavy_lightning_beam.iff";
5620 case 6: // heavy particle beam
5621 weapon = "object/weapon/ranged/heavy/heavy_particle_beam.iff";
5623 case 7: // flame thrower
5624 weapon = "object/weapon/ranged/rifle/rifle_flame_thrower_light.iff";
5626 case 8: // republic flame thrower
5627 weapon = "object/weapon/ranged/heavy/som_republic_flamer.iff";
5629 case 9: // lava cannon
5630 weapon = "object/weapon/ranged/heavy/som_lava_cannon.iff";
5633 // Crusader M-XX Heavy Rifle
5634 static_item.createNewItemFunction("weapon_mandalorian_heavy_04_01",pInv);
5635 sendSystemMessageTestingOnly(player, "Crusader M-XX Heavy Rifle Issued.");
5638 // C-M "Frag Storm" Heavy Shotgun
5639 static_item.createNewItemFunction("weapon_rebel_heavy_04_01",pInv);
5640 sendSystemMessageTestingOnly(player, "C-M 'Frag Storm' Heavy Shotgun Issued.");
5643 // Devastator Acid Launcher
5644 static_item.createNewItemFunction("weapon_tow_heavy_acid_beam_04_01",pInv);
5645 sendSystemMessageTestingOnly(player, "Devastator Acid Launcher Issued.");
5648 weapon = "object/weapon/ranged/heavy/heavy_carbonite_rifle.iff";
5651 cleanScriptVars(player);
5652 return SCRIPT_CONTINUE;
5655 if(weapon != null && weapon != "")
5656 createSnowFlakeFrogWeapon(player, weapon);
5658 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", HEAVY_WEAPON_OPTIONS, "handleHeavySelect", false);
5659 return SCRIPT_CONTINUE;
5662 messageHandler handleUnarmedSelect()
5665 if ( (params == null) || (params.isEmpty()) )
5667 //cleanScriptVars(player);
5668 return SCRIPT_CONTINUE;
5671 obj_id player = sui.getPlayerId(params);
5672 obj_id pInv = utils.getInventoryContainer(player);
5674 int btn = sui.getIntButtonPressed(params);
5675 int idx = sui.getListboxSelectedRow(params);
5677 if (btn == sui.BP_REVERT)
5679 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5680 return SCRIPT_CONTINUE;
5683 if(btn == sui.BP_CANCEL)
5685 cleanScriptVars(player);
5686 closeOldWindow(player);
5687 return SCRIPT_CONTINUE;
5691 if ( idx == -1 || idx > UNARMED_OPTIONS.length)
5693 cleanScriptVars(player);
5694 return SCRIPT_CONTINUE;
5697 //make sure player is Valid
5698 if(!isIdValid(player))
5700 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5701 cleanScriptVars(player);
5702 return SCRIPT_OVERRIDE;
5704 //make sure player's inventory is valid
5705 if (!isIdValid(pInv))
5707 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5708 cleanScriptVars(player);
5709 return SCRIPT_OVERRIDE;
5711 //make sure there is room in player's inventory
5712 if (getVolumeFree(pInv) <= 0)
5714 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5715 cleanScriptVars(player);
5716 return SCRIPT_OVERRIDE;
5723 case 0: // Vibroknuckler
5724 weapon = "object/weapon/melee/special/vibroknuckler.iff";
5726 case 1: // Massasi Knuckler
5727 weapon = "object/weapon/melee/special/massassiknuckler.iff";
5729 case 2: // Razor Knuckler
5730 weapon = "object/weapon/melee/special/blacksun_razor.iff";
5732 case 3: // Blasterfist
5733 weapon = "object/weapon/melee/special/blasterfist.iff";
5736 case 4: // Guardian Blasterfist
5737 static_item.createNewItemFunction("weapon_tow_blasterfist_04_01",pInv);
5738 sendSystemMessageTestingOnly(player, "Guardian Blaster Fist");
5741 cleanScriptVars(player);
5742 return SCRIPT_CONTINUE;
5745 if(weapon != null && weapon != "")
5746 createSnowFlakeFrogWeapon(player, weapon);
5748 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", UNARMED_OPTIONS, "handleUnarmedSelect", false);
5749 return SCRIPT_CONTINUE;
5752 messageHandler handleOneHandedSelect()
5755 if ( (params == null) || (params.isEmpty()) )
5757 //cleanScriptVars(player);
5758 return SCRIPT_CONTINUE;
5761 obj_id player = sui.getPlayerId(params);
5762 obj_id pInv = utils.getInventoryContainer(player);
5764 int btn = sui.getIntButtonPressed(params);
5765 int idx = sui.getListboxSelectedRow(params);
5767 if ( btn == sui.BP_REVERT )
5769 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5770 return SCRIPT_CONTINUE;
5773 if(btn == sui.BP_CANCEL)
5775 cleanScriptVars(player);
5776 closeOldWindow(player);
5777 return SCRIPT_CONTINUE;
5781 if ( idx == -1 || idx > ONEHANDED_OPTIONS.length)
5783 cleanScriptVars(player);
5784 return SCRIPT_CONTINUE;
5787 //make sure player is Valid
5788 if(!isIdValid(player))
5790 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5791 cleanScriptVars(player);
5792 return SCRIPT_OVERRIDE;
5794 //make sure player's inventory is valid
5795 if (!isIdValid(pInv))
5797 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5798 cleanScriptVars(player);
5799 return SCRIPT_OVERRIDE;
5801 //make sure there is room in player's inventory
5802 if (getVolumeFree(pInv) <= 0)
5804 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5805 cleanScriptVars(player);
5806 return SCRIPT_OVERRIDE;
5813 case 0: // survival knife
5814 weapon = "object/weapon/melee/knife/knife_survival.iff";
5816 case 1: // twilek dagger
5817 weapon = "object/weapon/melee/knife/knife_dagger.iff";
5820 weapon = "object/weapon/melee/sword/sword_01.iff";
5822 case 3: // curved sword
5823 weapon = "object/weapon/melee/sword/sword_02.iff";
5825 case 4: // gaderiffi
5826 weapon = "object/weapon/melee/baton/baton_gaderiffi.iff";
5828 case 5: // vibroblade
5829 weapon = "object/weapon/melee/knife/knife_vibroblade.iff";
5831 case 6: // ryyk blade
5832 weapon = "object/weapon/melee/sword/sword_blade_ryyk.iff";
5834 case 7: // rantok sword
5835 weapon = "object/weapon/melee/sword/sword_rantok.iff";
5837 case 8: // stun baton
5838 weapon = "object/weapon/melee/baton/baton_stun.iff";
5840 case 9: // acid sword
5841 weapon = "object/weapon/melee/sword/sword_acid.iff";
5843 case 10: // junta mace
5844 weapon = "object/weapon/melee/sword/sword_mace_junti.iff";
5846 case 11: // marauder sword
5847 weapon = "object/weapon/melee/sword/sword_marauder.iff";
5849 case 12: // massassi sword
5850 weapon = "object/weapon/melee/sword/sword_massassi.iff";
5852 case 13: // RSF Sword
5853 weapon = "object/weapon/melee/sword/sword_rsf.iff";
5855 case 14: //"Stone Knife"
5856 weapon = "object/weapon/melee/knife/knife_stone.iff";
5858 case 15: //"Janta Knife"
5859 weapon = "object/weapon/melee/knife/knife_janta.iff";
5861 case 16:// "Donkuwa Knife"
5862 weapon = "object/weapon/melee/knife/knife_donkuwah.iff";
5864 case 17: // Curved Nyax sword
5865 weapon = "object/weapon/melee/sword/sword_curved_nyax.iff";
5867 case 18: // Obsidian sword
5868 weapon = "object/weapon/melee/sword/som_sword_obsidian.iff";
5870 case 19: // Mustafar Bandit sword
5871 weapon = "object/weapon/melee/sword/som_sword_mustafar_bandit.iff";
5873 case 20: // Gaderiffi Elite
5874 weapon = "object/weapon/melee/baton/baton_gaderiffi_elite.iff";
5877 cleanScriptVars(player);
5878 return SCRIPT_CONTINUE;
5881 if(weapon != null && weapon != "")
5882 createSnowFlakeFrogWeapon(player, weapon);
5884 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", ONEHANDED_OPTIONS, "handleOneHandedSelect", false);
5885 return SCRIPT_CONTINUE;
5888 messageHandler handleTwoHandedSelect()
5891 if ( (params == null) || (params.isEmpty()) )
5893 //cleanScriptVars(player);
5894 return SCRIPT_CONTINUE;
5897 obj_id player = sui.getPlayerId(params);
5898 obj_id pInv = utils.getInventoryContainer(player);
5900 int btn = sui.getIntButtonPressed(params);
5901 int idx = sui.getListboxSelectedRow(params);
5903 if ( btn == sui.BP_REVERT )
5905 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5906 return SCRIPT_CONTINUE;
5909 if(btn == sui.BP_CANCEL)
5911 cleanScriptVars(player);
5912 closeOldWindow(player);
5913 return SCRIPT_CONTINUE;
5916 if ( idx == -1 || idx > TWOHANDED_OPTIONS.length)
5918 cleanScriptVars(player);
5919 return SCRIPT_CONTINUE;
5922 //make sure player is Valid
5923 if(!isIdValid(player))
5925 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5926 cleanScriptVars(player);
5927 return SCRIPT_OVERRIDE;
5929 //make sure player's inventory is valid
5930 if (!isIdValid(pInv))
5932 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5933 cleanScriptVars(player);
5934 return SCRIPT_OVERRIDE;
5936 //make sure there is room in player's inventory
5937 if (getVolumeFree(pInv) <= 0)
5939 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5940 cleanScriptVars(player);
5941 return SCRIPT_OVERRIDE;
5949 weapon = "object/weapon/melee/axe/axe_heavy_duty.iff";
5951 case 1: // battleaxe
5952 weapon = "object/weapon/melee/2h_sword/2h_sword_battleaxe.iff";
5955 weapon = "object/weapon/melee/2h_sword/2h_sword_katana.iff";
5958 weapon = "object/weapon/melee/axe/axe_vibroaxe.iff";
5961 weapon = "object/weapon/melee/2h_sword/2h_sword_cleaver.iff";
5964 weapon = "object/weapon/melee/2h_sword/2h_sword_maul.iff";
5967 weapon = "object/weapon/melee/2h_sword/2h_sword_scythe.iff";
5969 case 7: // kashyyk sword
5970 weapon = "object/weapon/melee/2h_sword/2h_sword_kashyyk.iff";
5972 case 8: // sith sword
5973 weapon = "object/weapon/melee/2h_sword/2h_sword_sith.iff";
5975 case 9: // Nyax sword
5976 weapon = "object/weapon/melee/sword/sword_nyax.iff";
5978 case 10: // Black Sun Executioner's Hack
5979 weapon = "object/weapon/melee/2h_sword/2h_sword_blacksun_hack.iff";
5982 weapon = "object/weapon/melee/2h_sword/som_2h_sword_tulrus.iff";
5984 case 12: // Obsidian 2h
5985 weapon = "object/weapon/melee/2h_sword/som_2h_sword_obsidian.iff";
5987 case 13: // Massassi Enforcer Blade
5988 weapon = "object/weapon/melee/2h_sword/2h_sword_kun_massassi.iff";
5991 cleanScriptVars(player);
5992 return SCRIPT_CONTINUE;
5995 if(weapon != null && weapon != "")
5996 createSnowFlakeFrogWeapon(player, weapon);
5998 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", TWOHANDED_OPTIONS, "handleTwoHandedSelect", false);
5999 return SCRIPT_CONTINUE;
6002 messageHandler handlePolearmSelect()
6005 if ( (params == null) || (params.isEmpty()) )
6007 //cleanScriptVars(player);
6008 return SCRIPT_CONTINUE;
6011 obj_id player = sui.getPlayerId(params);
6012 obj_id pInv = utils.getInventoryContainer(player);
6014 int btn = sui.getIntButtonPressed(params);
6015 int idx = sui.getListboxSelectedRow(params);
6017 if ( btn == sui.BP_REVERT )
6019 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6020 return SCRIPT_CONTINUE;
6023 if(btn == sui.BP_CANCEL)
6025 cleanScriptVars(player);
6026 closeOldWindow(player);
6027 return SCRIPT_CONTINUE;
6030 if ( idx == -1 || idx > POLEARM_OPTIONS.length)
6032 cleanScriptVars(player);
6033 return SCRIPT_CONTINUE;
6036 //make sure player is Valid
6037 if(!isIdValid(player))
6039 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6040 cleanScriptVars(player);
6041 return SCRIPT_OVERRIDE;
6043 //make sure player's inventory is valid
6044 if (!isIdValid(pInv))
6046 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6047 cleanScriptVars(player);
6048 return SCRIPT_OVERRIDE;
6050 //make sure there is room in player's inventory
6051 if (getVolumeFree(pInv) <= 0)
6053 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6054 cleanScriptVars(player);
6055 return SCRIPT_OVERRIDE;
6062 case 0: // 1h wood staff
6063 weapon = "object/weapon/melee/polearm/lance_staff_wood_s1.iff";
6065 case 1: // metal staff
6066 weapon = "object/weapon/melee/polearm/lance_staff_metal.iff";
6068 case 2: // reinforced staff
6069 weapon = "object/weapon/melee/polearm/lance_staff_wood_s2.iff";
6071 case 3: // vibrolance
6072 weapon = "object/weapon/melee/polearm/lance_vibrolance.iff";
6074 case 4: // polearm vibroaxe
6075 weapon = "object/weapon/melee/polearm/polearm_vibro_axe.iff";
6078 weapon = "object/weapon/melee/polearm/lance_controllerfp.iff";
6080 case 6: // kaminoan greatstaff
6081 weapon = "object/weapon/melee/polearm/lance_kaminoan.iff";
6083 case 7: // massassi lance
6084 weapon = "object/weapon/melee/polearm/lance_massassi.iff";
6086 case 8: // shocklance
6087 weapon = "object/weapon/melee/polearm/lance_shock.iff";
6089 case 9: // cryo lance
6090 weapon = "object/weapon/melee/polearm/lance_cryo.iff";
6092 case 10: // kashyyk bladestick
6093 weapon = "object/weapon/melee/polearm/lance_kashyyk.iff";
6095 case 11: // electric polearm
6096 weapon = "object/weapon/melee/polearm/polearm_lance_electric_polearm.iff";
6098 case 12: // nightsister energy lance
6099 weapon = "object/weapon/melee/polearm/lance_nightsister.iff";
6101 case 13: // nightsister vibro lance
6102 weapon = "object/weapon/melee/polearm/lance_controllerfp_nightsister.iff";
6104 case 14: // obsidian lance
6105 weapon = "object/weapon/melee/polearm/som_lance_obsidian.iff";
6107 case 15: // xandank lance
6108 weapon = "object/weapon/melee/polearm/som_lance_xandank.iff";
6110 case 16: // Acidic Paragon Axe
6111 weapon = "object/weapon/melee/polearm/polearm_heroic_sd.iff";
6114 cleanScriptVars(player);
6115 return SCRIPT_CONTINUE;
6118 if(weapon != null && weapon != "")
6119 createSnowFlakeFrogWeapon(player, weapon);
6121 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", POLEARM_OPTIONS, "handlePolearmSelect", false);
6122 return SCRIPT_CONTINUE;
6125 messageHandler handleBattlefieldSelect()
6128 if ( (params == null) || (params.isEmpty()) )
6130 //cleanScriptVars(player);
6131 return SCRIPT_CONTINUE;
6134 obj_id player = sui.getPlayerId(params);
6135 obj_id pInv = utils.getInventoryContainer(player);
6137 int btn = sui.getIntButtonPressed(params);
6138 int idx = sui.getListboxSelectedRow(params);
6140 if ( btn == sui.BP_REVERT )
6142 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6143 return SCRIPT_CONTINUE;
6146 if(btn == sui.BP_CANCEL)
6148 cleanScriptVars(player);
6149 closeOldWindow(player);
6150 return SCRIPT_CONTINUE;
6153 if ( idx == -1 || idx > BATTLEFIELD_WEAPON_OPTIONS.length)
6155 cleanScriptVars(player);
6156 return SCRIPT_CONTINUE;
6159 //make sure player is Valid
6160 if(!isIdValid(player))
6162 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6163 cleanScriptVars(player);
6164 return SCRIPT_OVERRIDE;
6166 //make sure player's inventory is valid
6167 if (!isIdValid(pInv))
6169 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6170 cleanScriptVars(player);
6171 return SCRIPT_OVERRIDE;
6173 //make sure there is room in player's inventory
6174 if (getVolumeFree(pInv) <= 0)
6176 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6177 cleanScriptVars(player);
6178 return SCRIPT_OVERRIDE;
6187 // Battlefield Pistol
6188 static_item.createNewItemFunction("weapon_westar_pistol_04_01",pInv);
6189 sendSystemMessageTestingOnly(player, "Westar-34 Blaster Pistol Issued.");
6192 // Battlefield Carbine
6193 static_item.createNewItemFunction("weapon_carbine_ngant_zarvel_04_01",pInv);
6194 sendSystemMessageTestingOnly(player, "NGant-Zarvel 9118 Carbine Issued.");
6197 // Battlefield Rifle
6198 static_item.createNewItemFunction("weapon_westar_rifle_04_01",pInv);
6199 sendSystemMessageTestingOnly(player, "Westar-M5 Blaster Rifle Issued.");
6202 // Battlefield Heavy Weapon
6203 static_item.createNewItemFunction("weapon_heavy_cr1_04_01",pInv);
6204 sendSystemMessageTestingOnly(player, "CR-1 Blast Cannon Issued.");
6208 // Battlefield Unarmed
6209 static_item.createNewItemFunction("weapon_knuckler_buzz_knuck",pInv);
6210 sendSystemMessageTestingOnly(player, "Buzz-Knuck Issued.");
6213 // Battlefield 1h sword
6214 static_item.createNewItemFunction("weapon_sword_1h_pvp_04_01",pInv);
6215 sendSystemMessageTestingOnly(player, "Sith Sword Issued.");
6218 // Battlefield 2h sword
6219 static_item.createNewItemFunction("weapon_sword_2h_pvp_04_01",pInv);
6220 sendSystemMessageTestingOnly(player, "Vibrosword Issued.");
6223 // Battlefield Polearm
6224 static_item.createNewItemFunction("weapon_magna_guard_polearm_04_01",pInv);
6225 sendSystemMessageTestingOnly(player, "Magnaguard Electrostaff Issued.");
6228 // Battlefield 1h saber
6229 static_item.createNewItemFunction("item_schematic_pvp_bf_saber_03_01",pInv);
6230 sendSystemMessageTestingOnly(player, "One-Handed Sith-Saber Hilt Schematic Issued.");
6233 // Battlefield 2h saber
6234 static_item.createNewItemFunction("item_schematic_pvp_bf_saber_03_02",pInv);
6235 sendSystemMessageTestingOnly(player, "Two-Handed Mysterious Lightsaber Hilt Schematic Issued.");
6238 // Battlefield polearm saber
6239 static_item.createNewItemFunction("item_schematic_pvp_bf_saber_03_03",pInv);
6240 sendSystemMessageTestingOnly(player, "Double-Bladed Darth Phobos Lightsaber Hilt Schematic Issued.");
6244 cleanScriptVars(player);
6245 return SCRIPT_CONTINUE;
6248 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", BATTLEFIELD_WEAPON_OPTIONS, "handleBattlefieldSelect", false);
6249 return SCRIPT_CONTINUE;
6252 messageHandler handleGrenadeSelect()
6255 if ( (params == null) || (params.isEmpty()) )
6257 //cleanScriptVars(player);
6258 return SCRIPT_CONTINUE;
6261 obj_id player = sui.getPlayerId(params);
6262 obj_id pInv = utils.getInventoryContainer(player);
6264 int btn = sui.getIntButtonPressed(params);
6265 int idx = sui.getListboxSelectedRow(params);
6267 if ( btn == sui.BP_REVERT )
6269 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6270 return SCRIPT_CONTINUE;
6273 if(btn == sui.BP_CANCEL)
6275 cleanScriptVars(player);
6276 closeOldWindow(player);
6277 return SCRIPT_CONTINUE;
6280 if ( idx == -1 || idx > GRENADE_OPTIONS.length)
6282 cleanScriptVars(player);
6283 return SCRIPT_CONTINUE;
6285 //make sure player is Valid
6286 if(!isIdValid(player))
6288 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6289 cleanScriptVars(player);
6290 return SCRIPT_OVERRIDE;
6292 //make sure player's inventory is valid
6293 if (!isIdValid(pInv))
6295 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6296 cleanScriptVars(player);
6297 return SCRIPT_OVERRIDE;
6299 //make sure there is room in player's inventory
6300 if (getVolumeFree(pInv) <= 0)
6302 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6303 cleanScriptVars(player);
6304 return SCRIPT_OVERRIDE;
6309 case 0: // light frag grenade
6310 item = createObject("object/weapon/ranged/grenade/grenade_fragmentation_light.iff", pInv, "");
6311 setCount(item, 500);
6312 sendSystemMessageTestingOnly(player, "Light Fragmentation Grenade with many charges Issued.");
6314 case 1: // frag grenade
6315 item = createObject("object/weapon/ranged/grenade/grenade_fragmentation.iff", pInv, "");
6316 setCount(item, 500);
6317 sendSystemMessageTestingOnly(player, "Fragmentation Grenade with many charges Issued.");
6319 case 2: // imperial det
6320 item = createObject("object/weapon/ranged/grenade/grenade_imperial_detonator.iff", pInv, "");
6321 setCount(item, 500);
6322 sendSystemMessageTestingOnly(player, "Imperial Detonator with many charges Issued.");
6324 case 3: // proton grenade
6325 item = createObject("object/weapon/ranged/grenade/grenade_proton.iff", pInv, "");
6326 setCount(item, 500);
6327 sendSystemMessageTestingOnly(player, "Proton Grenade with many charges Issued.");
6329 case 4: // Thermal det
6330 item = createObject("object/weapon/ranged/grenade/grenade_thermal_detonator.iff", pInv, "");
6331 setCount(item, 500);
6332 sendSystemMessageTestingOnly(player, "Thermal Detonator with many charges Issued.");
6335 item = createObject("object/weapon/ranged/grenade/grenade_glop.iff", pInv, "");
6336 setCount(item, 500);
6337 sendSystemMessageTestingOnly(player, "Glop Grenade with many charges Issued.");
6340 item = createObject("object/weapon/ranged/grenade/grenade_cryoban.iff", pInv, "");
6341 setCount(item, 500);
6342 sendSystemMessageTestingOnly(player, "Cryoban Grenade with many charges Issued.");
6344 // case 7: // bug bomb
6345 // item = createObject("object/weapon/ranged/grenade/grenade_bug_bomb.iff", pInv, "");
6346 // setCount(item, 500);
6347 // sendSystemMessageTestingOnly(player, "Bug Bomb with many charges Issued.");
6350 cleanScriptVars(player);
6351 return SCRIPT_CONTINUE;
6354 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", GRENADE_OPTIONS, "handleGrenadeSelect", false);
6355 return SCRIPT_CONTINUE;
6358 //===================================================================
6359 // Armor Section //===============================================
6362 void handleArmorOption(obj_id player)
6364 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_OPTIONS, "handleArmorSelect", false);
6367 messageHandler handleArmorSelect()
6370 if ( (params == null) || (params.isEmpty()) )
6372 //cleanScriptVars(player);
6373 return SCRIPT_CONTINUE;
6376 obj_id player = sui.getPlayerId(params);
6377 obj_id pInv = utils.getInventoryContainer(player);
6379 int btn = sui.getIntButtonPressed(params);
6380 int idx = sui.getListboxSelectedRow(params);
6382 if ( btn == sui.BP_REVERT )
6384 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
6385 return SCRIPT_CONTINUE;
6388 if(btn == sui.BP_CANCEL)
6390 cleanScriptVars(player);
6391 closeOldWindow(player);
6392 return SCRIPT_CONTINUE;
6395 if ( idx == -1 || idx > ARMOR_OPTIONS.length)
6397 cleanScriptVars(player);
6398 return SCRIPT_CONTINUE;
6401 //make sure player is Valid
6402 if(!isIdValid(player))
6404 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6405 cleanScriptVars(player);
6406 return SCRIPT_OVERRIDE;
6410 string prompt = "Select the desired armor option";
6411 string title = "Character Builder Terminal";
6418 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6419 utils.setScriptVar(player, "character_builder.armorType", 2);
6422 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6423 utils.setScriptVar(player, "character_builder.armorType", 1);
6426 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6427 utils.setScriptVar(player, "character_builder.armorType", 0);
6430 refreshMenu (player, prompt, title, ARMOR_PSG_OPTIONS, "handlePsgSelect", false);
6433 refreshMenu (player, prompt, title, ARMOR_ENHANCEMENT_OPTIONS, "handleEnhancementSelect", false);
6436 refreshMenu (player, prompt, title, ARMOR_PVP_SETS, "handlePvPSelect", false);
6439 refreshMenu (player, prompt, title, HEROIC_JEWELRY_LIST, "handleHeroicJewelrySelect", false);
6442 cleanScriptVars(player);
6443 return SCRIPT_CONTINUE;
6446 return SCRIPT_CONTINUE;
6449 messageHandler handleProtectionAmount()
6451 if ( (params == null) || (params.isEmpty()) )
6453 //cleanScriptVars(player);
6454 return SCRIPT_CONTINUE;
6457 obj_id player = sui.getPlayerId(params);
6458 obj_id pInv = utils.getInventoryContainer(player);
6460 int btn = sui.getIntButtonPressed(params);
6461 int idx = sui.getListboxSelectedRow(params);
6463 if ( btn == sui.BP_REVERT )
6465 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_OPTIONS, "handleArmorSelect", false);
6466 return SCRIPT_CONTINUE;
6469 if(btn == sui.BP_CANCEL)
6471 cleanScriptVars(player);
6472 closeOldWindow(player);
6473 return SCRIPT_CONTINUE;
6476 if ( idx == -1 || idx > ARMOR_PROTECTION_AMOUNT.length)
6478 cleanScriptVars(player);
6479 return SCRIPT_CONTINUE;
6481 //make sure player is Valid
6482 if(!isIdValid(player))
6484 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6485 cleanScriptVars(player);
6486 return SCRIPT_OVERRIDE;
6488 //make sure player's inventory is valid
6489 if (!isIdValid(pInv))
6491 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6492 cleanScriptVars(player);
6493 return SCRIPT_OVERRIDE;
6495 //make sure there is room in player's inventory
6496 if (getVolumeFree(pInv) <= 9)
6498 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6499 cleanScriptVars(player);
6500 return SCRIPT_OVERRIDE;
6503 utils.setScriptVar(player, "character_builder.armorLevel", idx +1);
6504 int type = utils.getIntScriptVar(player, "character_builder.armorType");
6505 string [] options = new string [0];
6506 string handler = "";
6508 string prompt = "Select the desired armor level option";
6509 string title = "Character Builder Terminal";
6513 options = ARMOR_RECON_OPTIONS;
6514 handler = "handleReconSelect";
6517 options = ARMOR_BATTLE_OPTIONS;
6518 handler = "handleBattleSelect";
6521 options = ARMOR_ASSAULT_OPTIONS;
6522 handler = "handleAssaultSelect";
6525 cleanScriptVars(player);
6526 return SCRIPT_CONTINUE;
6528 utils.setScriptVar(player, "character_builder.armorOptions", options);
6529 utils.setScriptVar(player, "character_builder.armorHandler", handler);
6530 refreshMenu (player, prompt, title, options, handler, false);
6533 return SCRIPT_CONTINUE;
6536 messageHandler handleAssaultSelect()
6538 if ( (params == null) || (params.isEmpty()) )
6540 //cleanScriptVars(player);
6541 return SCRIPT_CONTINUE;
6544 obj_id player = sui.getPlayerId(params);
6545 obj_id pInv = utils.getInventoryContainer(player);
6547 int btn = sui.getIntButtonPressed(params);
6548 int idx = sui.getListboxSelectedRow(params);
6550 if ( btn == sui.BP_REVERT )
6552 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6553 return SCRIPT_CONTINUE;
6556 if(btn == sui.BP_CANCEL)
6558 cleanScriptVars(player);
6559 closeOldWindow(player);
6560 return SCRIPT_CONTINUE;
6563 if ( idx == -1 || idx > ARMOR_ASSAULT_OPTIONS.length)
6565 cleanScriptVars(player);
6566 return SCRIPT_CONTINUE;
6568 //make sure player is Valid
6569 if(!isIdValid(player))
6571 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6572 cleanScriptVars(player);
6573 return SCRIPT_OVERRIDE;
6575 //make sure player's inventory is valid
6576 if (!isIdValid(pInv))
6578 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6579 cleanScriptVars(player);
6580 return SCRIPT_OVERRIDE;
6582 //make sure there is room in player's inventory
6583 if (getVolumeFree(pInv) <= 9)
6585 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6586 cleanScriptVars(player);
6587 return SCRIPT_OVERRIDE;
6592 case 0: // composite
6593 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_1);
6594 sendSystemMessageTestingOnly(player, "Composite Armor Set Issued.");
6597 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_3);
6598 sendSystemMessageTestingOnly(player, "Marauder Assault Armor Set Issued.");
6601 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_2);
6602 sendSystemMessageTestingOnly(player, "Chitin Armor Set Issued.");
6604 case 3: //Crafted Bounty Hunter
6605 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_4);
6606 sendSystemMessageTestingOnly(player, "Crafted Bounty Hunter Armor Set Issued.");
6608 case 4: //Kashyyykian Hunting
6609 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_WOOKIEE);
6610 sendSystemMessageTestingOnly(player, "Kashyyykian Hunting Armor Set Issued.");
6612 case 5: //Ithorian Sentinel
6613 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_ITHORIAN);
6614 sendSystemMessageTestingOnly(player, "Ithorian Sentinel Armor Set Issued.");
6616 case 6: //Shocktrooper
6617 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_IMPERIAL);
6618 sendSystemMessageTestingOnly(player, "Shocktrooper Armor Set Issued.");
6620 case 7: //Rebel Assault
6621 issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_REBEL);
6622 sendSystemMessageTestingOnly(player, "Rebel Assault Armor Set Issued.");
6625 cleanScriptVars(player);
6626 return SCRIPT_CONTINUE;
6628 string[] options = utils.getStringArrayScriptVar(player, "character_builder.armorOptions");
6629 string handler = utils.getStringScriptVar(player, "character_builder.armorHandler");
6630 refreshMenu (player, "Select the desired armor level option", "Character Builder Terminal", options, handler, false);
6631 return SCRIPT_CONTINUE;
6634 messageHandler handleBattleSelect()
6636 if ( (params == null) || (params.isEmpty()) )
6638 //cleanScriptVars(player);
6639 return SCRIPT_CONTINUE;
6642 obj_id player = sui.getPlayerId(params);
6643 obj_id pInv = utils.getInventoryContainer(player);
6645 int btn = sui.getIntButtonPressed(params);
6646 int idx = sui.getListboxSelectedRow(params);
6648 if ( btn == sui.BP_REVERT )
6650 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6651 return SCRIPT_CONTINUE;
6654 if(btn == sui.BP_CANCEL)
6656 cleanScriptVars(player);
6657 closeOldWindow(player);
6658 return SCRIPT_CONTINUE;
6661 if ( idx == -1 || idx > ARMOR_BATTLE_OPTIONS.length)
6663 cleanScriptVars(player);
6664 return SCRIPT_CONTINUE;
6666 //make sure player is Valid
6667 if(!isIdValid(player))
6669 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6670 cleanScriptVars(player);
6671 return SCRIPT_OVERRIDE;
6673 //make sure player's inventory is valid
6674 if (!isIdValid(pInv))
6676 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6677 cleanScriptVars(player);
6678 return SCRIPT_OVERRIDE;
6680 //make sure there is room in player's inventory
6681 if (getVolumeFree(pInv) <= 9)
6683 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6684 cleanScriptVars(player);
6685 return SCRIPT_OVERRIDE;
6691 issueBattleArmorSet(player,ARMOR_SET_BATTLE_3);
6692 sendSystemMessageTestingOnly(player, "Padded Armor Set Issued.");
6695 issueBattleArmorSet(player,ARMOR_SET_BATTLE_2);
6696 sendSystemMessageTestingOnly(player, "Marauder Battle Armor Set Issued.");
6699 issueBattleArmorSet(player,ARMOR_SET_BATTLE_4);
6700 sendSystemMessageTestingOnly(player, "RIS Armor Set Issued.");
6703 issueBattleArmorSet(player,ARMOR_SET_BATTLE_1);
6704 sendSystemMessageTestingOnly(player, "Bone Armor Set Issued.");
6706 case 4: //Kashyyykian Black Mountain Armor Set
6707 issueBattleArmorSet(player,ARMOR_SET_BATTLE_WOOKIEE);
6708 sendSystemMessageTestingOnly(player, "Kashyyykian Black Mountain Armor Set Issued.");
6710 case 5: //Ithorian Defender
6711 issueBattleArmorSet(player,ARMOR_SET_BATTLE_ITHORIAN);
6712 sendSystemMessageTestingOnly(player, "Ithorian Defender Armor Set Issued.");
6714 case 6: //Stormtrooper
6715 issueBattleArmorSet(player,ARMOR_SET_BATTLE_IMPERIAL);
6716 sendSystemMessageTestingOnly(player, "Stormtrooper Armor Set Issued.");
6718 case 7: //Rebel Battle
6719 issueBattleArmorSet(player,ARMOR_SET_BATTLE_REBEL);
6720 sendSystemMessageTestingOnly(player, "Rebel Battle Armor Set Issued.");
6722 case 8: //Imperial Snowtrooper
6723 issueBattleArmorSet(player,ARMOR_SET_BATTLE_SNOWTROOPER);
6724 sendSystemMessageTestingOnly(player, "Imperial Snowtrooper Set Issued.");
6727 cleanScriptVars(player);
6728 return SCRIPT_CONTINUE;
6730 string[] options = utils.getStringArrayScriptVar(player, "character_builder.armorOptions");
6731 string handler = utils.getStringScriptVar(player, "character_builder.armorHandler");
6732 refreshMenu (player, "Select the desired armor level option", "Character Builder Terminal", options, handler, false);
6733 return SCRIPT_CONTINUE;
6735 messageHandler handleReconSelect()
6737 if ( (params == null) || (params.isEmpty()) )
6739 //cleanScriptVars(player);
6740 return SCRIPT_CONTINUE;
6743 obj_id player = sui.getPlayerId(params);
6744 obj_id pInv = utils.getInventoryContainer(player);
6746 int btn = sui.getIntButtonPressed(params);
6747 int idx = sui.getListboxSelectedRow(params);
6749 if ( btn == sui.BP_REVERT )
6751 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6752 return SCRIPT_CONTINUE;
6755 if(btn == sui.BP_CANCEL)
6757 cleanScriptVars(player);
6758 closeOldWindow(player);
6759 return SCRIPT_CONTINUE;
6762 if ( idx == -1 || idx > ARMOR_RECON_OPTIONS.length)
6764 cleanScriptVars(player);
6765 return SCRIPT_CONTINUE;
6767 //make sure player is Valid
6768 if(!isIdValid(player))
6770 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6771 cleanScriptVars(player);
6772 return SCRIPT_OVERRIDE;
6774 //make sure player's inventory is valid
6775 if (!isIdValid(pInv))
6777 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6778 cleanScriptVars(player);
6779 return SCRIPT_OVERRIDE;
6781 //make sure there is room in player's inventory
6782 if (getVolumeFree(pInv) <= 9)
6784 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6785 cleanScriptVars(player);
6786 return SCRIPT_OVERRIDE;
6792 issueReconArmorSet(player,ARMOR_SET_RECON_3);
6793 sendSystemMessageTestingOnly(player, "Tantel Armor Set Issued.");
6796 issueReconArmorSet(player,ARMOR_SET_RECON_4);
6797 sendSystemMessageTestingOnly(player, "Ubese Armor Set Issued.");
6800 issueReconArmorSet(player,ARMOR_SET_RECON_1);
6801 sendSystemMessageTestingOnly(player, "Mabari Armor Set Issued.");
6804 issueReconArmorSet(player,ARMOR_SET_RECON_2);
6805 sendSystemMessageTestingOnly(player, "Recon Marauder Armor Set Issued.");
6807 case 4: //Kashyyykian Ceremonial Armor Set
6808 issueReconArmorSet(player,ARMOR_SET_RECON_WOOKIEE);
6809 sendSystemMessageTestingOnly(player, "Kashyyykian Ceremonial Armor Set Issued.");
6811 case 5: //Ithorian Guardian
6812 issueReconArmorSet(player,ARMOR_SET_RECON_ITHORIAN);
6813 sendSystemMessageTestingOnly(player, "Ithorian Guardian Armor Set Issued.");
6815 case 6: //Scout Trooper
6816 issueReconArmorSet(player,ARMOR_SET_RECON_IMPERIAL);
6817 sendSystemMessageTestingOnly(player, "Scout Trooper Armor Set Issued.");
6819 case 7: //Marine Rebel
6820 issueReconArmorSet(player,ARMOR_SET_RECON_REBEL);
6821 sendSystemMessageTestingOnly(player, "Rebel Marine Armor Set Issued.");
6823 case 8: //Alliance Cold Weather
6824 issueReconArmorSet(player,ARMOR_SET_REBEL_SNOW);
6825 sendSystemMessageTestingOnly(player, "Rebel Snow Armor Set Issued.");
6828 cleanScriptVars(player);
6829 return SCRIPT_CONTINUE;
6831 string[] options = utils.getStringArrayScriptVar(player, "character_builder.armorOptions");
6832 string handler = utils.getStringScriptVar(player, "character_builder.armorHandler");
6833 refreshMenu (player, "Select the desired armor level option", "Character Builder Terminal", options, handler, false);
6834 return SCRIPT_CONTINUE;
6836 messageHandler handlePsgSelect()
6838 if ( (params == null) || (params.isEmpty()) )
6840 //cleanScriptVars(player);
6841 return SCRIPT_CONTINUE;
6844 obj_id player = sui.getPlayerId(params);
6845 obj_id pInv = utils.getInventoryContainer(player);
6847 int btn = sui.getIntButtonPressed(params);
6848 int idx = sui.getListboxSelectedRow(params);
6850 if ( btn == sui.BP_REVERT )
6852 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_OPTIONS, "handleArmorSelect", false);
6853 return SCRIPT_CONTINUE;
6856 if(btn == sui.BP_CANCEL)
6858 cleanScriptVars(player);
6859 closeOldWindow(player);
6860 return SCRIPT_CONTINUE;
6863 if ( idx == -1 || idx > ARMOR_PSG_OPTIONS.length)
6865 cleanScriptVars(player);
6866 return SCRIPT_CONTINUE;
6868 //make sure player is Valid
6869 if(!isIdValid(player))
6871 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6872 cleanScriptVars(player);
6873 return SCRIPT_OVERRIDE;
6875 //make sure player's inventory is valid
6876 if (!isIdValid(pInv))
6878 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6879 cleanScriptVars(player);
6880 return SCRIPT_OVERRIDE;
6882 //make sure there is room in player's inventory
6883 if (getVolumeFree(pInv) <= 2)
6885 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6886 cleanScriptVars(player);
6887 return SCRIPT_OVERRIDE;
6893 item = createObject("object/tangible/component/armor/shield_generator_personal.iff", pInv, "");
6894 armor.initializePsg(item, 2.5f, 500, 10000);
6895 sendSystemMessageTestingOnly(player, "PSG Mark I Issued.");
6898 item = createObject("object/tangible/component/armor/shield_generator_personal_b.iff", pInv, "");
6899 armor.initializePsg(item, 2.5f, 1000, 10000);
6900 sendSystemMessageTestingOnly(player, "PSG Mark II Issued.");
6903 item = createObject("object/tangible/component/armor/shield_generator_personal_c.iff", pInv, "");
6904 armor.initializePsg(item, 2.5f, 2000, 10000);
6906 sendSystemMessageTestingOnly(player, "PSG Mark III Issued.");
6909 cleanScriptVars(player);
6910 return SCRIPT_CONTINUE;
6913 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PSG_OPTIONS, "handlePsgSelect", false);
6914 return SCRIPT_CONTINUE;
6917 messageHandler handlePvPSelect()
6919 if ( (params == null) || (params.isEmpty()) )
6921 //cleanScriptVars(player);
6922 return SCRIPT_CONTINUE;
6925 obj_id player = sui.getPlayerId(params);
6926 obj_id pInv = utils.getInventoryContainer(player);
6928 int btn = sui.getIntButtonPressed(params);
6929 int idx = sui.getListboxSelectedRow(params);
6931 if ( btn == sui.BP_REVERT )
6933 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6934 return SCRIPT_CONTINUE;
6937 if(btn == sui.BP_CANCEL)
6939 cleanScriptVars(player);
6940 closeOldWindow(player);
6941 return SCRIPT_CONTINUE;
6944 if ( idx == -1 || idx > ARMOR_ASSAULT_OPTIONS.length)
6946 cleanScriptVars(player);
6947 return SCRIPT_CONTINUE;
6949 //make sure player is Valid
6950 if(!isIdValid(player))
6952 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6953 cleanScriptVars(player);
6954 return SCRIPT_OVERRIDE;
6956 //make sure player's inventory is valid
6957 if (!isIdValid(pInv))
6959 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6960 cleanScriptVars(player);
6961 return SCRIPT_OVERRIDE;
6963 //make sure there is room in player's inventory
6964 if (getVolumeFree(pInv) <= 9)
6966 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 9 inventory slots and try again.");
6967 cleanScriptVars(player);
6968 return SCRIPT_OVERRIDE;
6974 issuePvPSet(player, ARMOR_SET_PVP_IMPERIAL_BLACK);
6975 sendSystemMessageTestingOnly(player, "Imperial Black PvP Set Issued.");
6978 issuePvPSet(player,ARMOR_SET_PVP_IMPERIAL_WHITE);
6979 sendSystemMessageTestingOnly(player, "Imperial White PvP Set Issued.");
6982 issuePvPSet(player,ARMOR_SET_PVP_REBEL_GREY);
6983 sendSystemMessageTestingOnly(player, "Rebel Grey PvP Set Issued.");
6986 issuePvPSet(player,ARMOR_SET_PVP_REBEL_GREEN);
6987 sendSystemMessageTestingOnly(player, "Rebel Green PvP Set Issued.");
6989 case 4: //Galactic Marine
6990 issueAssaultArmorSet(player,ARMOR_SET_ASSUALT_GALACTIC_MARINE);
6991 sendSystemMessageTestingOnly(player, "Galactic Marine Armor Set Issued.");
6993 case 5: //Rebel SpecForce
6994 issueAssaultArmorSet(player,ARMOR_SET_ASSUALT_REBEL_SPECFORCE);
6995 sendSystemMessageTestingOnly(player, "Rebel SpecForce Armor Set Issued.");
6998 cleanScriptVars(player);
6999 return SCRIPT_CONTINUE;
7001 string[] options = utils.getStringArrayScriptVar(player, "character_builder.armorOptions");
7002 string handler = utils.getStringScriptVar(player, "character_builder.armorHandler");
7003 refreshMenu (player, "Select the desired armor level option", "Character Builder Terminal", options, handler, false);
7004 return SCRIPT_CONTINUE;
7007 void issuePvPSet( obj_id player, string[] armorPieces)
7009 obj_id pInv = utils.getInventoryContainer(player);
7010 for(int i = 0; i < armorPieces.length; i++)
7012 static_item.createNewItemFunction(armorPieces[i], pInv);
7016 void issueAssaultArmorSet(obj_id player, string[] armorPieces)
7018 obj_id pInv = utils.getInventoryContainer(player);
7019 for ( int j = 0; j < armorPieces.length; ++j )
7021 if(static_item.isStaticItem(armorPieces[j]))
7023 obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7025 if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7026 setBioLink(armorItem, player);
7030 string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7031 obj_id armorItem = createObject(armorTemplate, pInv, "");
7032 if ( isIdValid(armorItem) )
7034 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7036 armor.setArmorDataPercent(armorItem, 2, 2, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7037 armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_ASSAULT_LAYER, 1.0f);
7039 setSocketsUp(armorItem);
7046 void issueBattleArmorSet(obj_id player, string[] armorPieces)
7048 obj_id pInv = utils.getInventoryContainer(player);
7049 for ( int j = 0; j < armorPieces.length; ++j )
7051 if(static_item.isStaticItem(armorPieces[j]))
7053 obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7055 if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7056 setBioLink(armorItem, player);
7060 string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7061 obj_id armorItem = createObject(armorTemplate, pInv, "");
7062 if ( isIdValid(armorItem) )
7064 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7066 armor.setArmorDataPercent(armorItem, 2, 1, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7068 setSocketsUp(armorItem);
7074 void issueReconArmorSet(obj_id player, string[] armorPieces)
7076 obj_id pInv = utils.getInventoryContainer(player);
7077 for ( int j = 0; j < armorPieces.length; ++j )
7079 if(static_item.isStaticItem(armorPieces[j]))
7081 obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7083 if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7084 setBioLink(armorItem, player);
7088 string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7089 obj_id armorItem = createObject(armorTemplate, pInv, "");
7090 if ( isIdValid(armorItem) )
7092 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7094 armor.setArmorDataPercent(armorItem, 2, 0, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7095 armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_RECON_LAYER, 1.0f);
7097 setSocketsUp(armorItem);
7103 void handleEnhancementSelect(obj_id player)
7106 refreshMenu ( player, "Select the desired deed option", "Character Builder Terminal", ARMOR_ENHANCEMENT_OPTIONS, "handleEnhancementSelect", false);
7109 messageHandler handleEnhancementSelect()
7111 if ( (params == null) || (params.isEmpty()) )
7113 //cleanScriptVars(player);
7114 return SCRIPT_CONTINUE;
7117 obj_id player = sui.getPlayerId(params);
7118 obj_id pInv = utils.getInventoryContainer(player);
7120 int btn = sui.getIntButtonPressed(params);
7121 int idx = sui.getListboxSelectedRow(params);
7123 if ( btn == sui.BP_REVERT )
7125 startCharacterBuilder(player);
7126 return SCRIPT_CONTINUE;
7129 if(btn == sui.BP_CANCEL)
7131 cleanScriptVars(player);
7132 closeOldWindow(player);
7133 return SCRIPT_CONTINUE;
7136 if ( idx == -1 || idx > ARMOR_ENHANCEMENT_OPTIONS.length)
7138 cleanScriptVars(player);
7139 return SCRIPT_CONTINUE;
7142 //make sure player is Valid
7143 if(!isIdValid(player))
7145 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7146 cleanScriptVars(player);
7147 return SCRIPT_OVERRIDE;
7149 //make sure player's inventory is valid
7150 if (!isIdValid(pInv))
7152 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7153 cleanScriptVars(player);
7154 return SCRIPT_OVERRIDE;
7156 //make sure there is room in player's inventory
7157 if (getVolumeFree(pInv) <= 0)
7159 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7160 cleanScriptVars(player);
7161 return SCRIPT_OVERRIDE;
7166 case 0: //combat ring
7169 static_item.createNewItemFunction("item_development_combat_test_ring_06_01",pInv);
7170 sendSystemMessageTestingOnly(player, "Combat Enhancement Ring Issued");
7174 sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Combat Ring!");
7178 cleanScriptVars(player);
7179 return SCRIPT_CONTINUE;
7182 handleEnhancementSelect(player);
7183 return SCRIPT_CONTINUE;
7189 messageHandler handleHeroicJewelrySelect()
7191 if ( (params == null) || (params.isEmpty()) )
7193 //cleanScriptVars(player);
7194 return SCRIPT_CONTINUE;
7197 obj_id player = sui.getPlayerId(params);
7198 obj_id pInv = utils.getInventoryContainer(player);
7200 int btn = sui.getIntButtonPressed(params);
7201 int idx = sui.getListboxSelectedRow(params);
7203 if ( btn == sui.BP_REVERT )
7205 startCharacterBuilder(player);
7206 return SCRIPT_CONTINUE;
7209 if(btn == sui.BP_CANCEL)
7211 cleanScriptVars(player);
7212 closeOldWindow(player);
7213 return SCRIPT_CONTINUE;
7216 if ( idx == -1 || idx > HEROIC_JEWELRY_LIST.length)
7218 cleanScriptVars(player);
7219 return SCRIPT_CONTINUE;
7222 //make sure player is Valid
7223 if(!isIdValid(player))
7225 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7226 cleanScriptVars(player);
7227 return SCRIPT_OVERRIDE;
7229 //make sure player's inventory is valid
7230 if (!isIdValid(pInv))
7232 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7233 cleanScriptVars(player);
7234 return SCRIPT_OVERRIDE;
7236 //make sure there is room in player's inventory
7237 if (getVolumeFree(pInv) <= 5)
7239 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7240 cleanScriptVars(player);
7241 return SCRIPT_OVERRIDE;
7249 column = "set_bh_dps";
7252 column = "set_bh_utility_a";
7255 column = "set_bh_utility_b";
7258 column = "set_medic_dps";
7261 column = "set_medic_utility_a";
7264 column = "set_medic_utility_b";
7267 column = "set_jedi_dps";
7270 column = "set_jedi_utility_a";
7273 column = "set_jedi_utility_b";
7276 column = "set_commando_dps";
7279 column = "set_commando_utility_a";
7282 column = "set_commando_utility_b";
7285 column = "set_smuggler_dps";
7288 column = "set_smuggler_utility_a";
7291 column = "set_smuggler_utility_b";
7294 column = "set_spy_dps";
7297 column = "set_spy_utility_a";
7300 column = "set_spy_utility_b";
7303 column = "set_officer_dps";
7306 column = "set_officer_utility_a";
7309 column = "set_officer_utility_b";
7312 column = "set_hero";
7315 cleanScriptVars(player);
7316 return SCRIPT_CONTINUE;
7319 if(column != null && column != "")
7321 string[] itemSet = dataTableGetStringColumn(HEROIC_JEWELRY_SETS, column);
7323 if ((itemSet != null) && (itemSet.length != 0))
7325 for (int i = 0; i < itemSet.length; i++)
7327 static_item.createNewItemFunction(itemSet[i], pInv);
7332 refreshMenu( player, "Select the desired armor option", "Character Builder Terminal", HEROIC_JEWELRY_LIST, "handleHeroicJewelrySelect", false);
7333 return SCRIPT_CONTINUE;
7337 //===================================================================
7338 // Misc Item Section //===============================================
7341 void handleMiscOption(obj_id player)
7343 refreshMenu ( player, "Select the desired item option", "Character Builder Terminal", MISCITEM_OPTIONS, "handleMiscOptions", false);
7346 messageHandler handleMiscOptions()
7348 if ( (params == null) || (params.isEmpty()) )
7350 //cleanScriptVars(player);
7351 return SCRIPT_CONTINUE;
7354 obj_id player = sui.getPlayerId(params);
7355 int btn = sui.getIntButtonPressed(params);
7356 int idx = sui.getListboxSelectedRow(params);
7358 if ( btn == sui.BP_REVERT )
7360 startCharacterBuilder(player);
7361 return SCRIPT_CONTINUE;
7364 if(btn == sui.BP_CANCEL)
7366 cleanScriptVars(player);
7367 closeOldWindow(player);
7368 return SCRIPT_CONTINUE;
7371 if ( idx == -1 || idx > MISCITEM_OPTIONS.length)
7373 cleanScriptVars(player);
7374 return SCRIPT_CONTINUE;
7377 //make sure player is Valid
7378 if(!isIdValid(player))
7380 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7381 cleanScriptVars(player);
7382 return SCRIPT_OVERRIDE;
7385 string prompt = "Select the desired option";
7386 string promptTwo = "Select FIRST Skill Modifier, You will need to pick Three total times!";
7387 string title = "Character Builder Terminal";
7394 refreshMenu ( player, prompt, title, MISC_OPTIONS, "handleMiscSelect", false);
7397 refreshMenu ( player, prompt, title, MEDICINE_OPTIONS, "handleMedicineSelect", false);
7400 // refreshMenu ( player, prompt, title, SMUGGLER_TOOLS_OPTIONS, "handleSmugglerSelect", false);
7403 refreshMenu ( player, prompt, title, getExoticMods(), "handlePowerUpSelect", false);
7406 refreshMenu ( player, promptTwo, title, getExoticMods(), "handleAttachmentOneSelect", false);
7409 refreshMenu ( player, prompt, title, CLOTHING_OPTIONS, "handleClothingSelect", false);
7412 refreshMenu ( player, promptTwo, title, BASIC_MOD_LIST, "handleBasicArmorAttachmentOne", false);
7413 utils.setScriptVar(player, "character_builder.attachment", "object/tangible/gem/armor.iff");
7416 refreshMenu ( player, promptTwo, title, BASIC_MOD_LIST, "handleBasicArmorAttachmentOne", false);
7417 utils.setScriptVar(player, "character_builder.attachment", "object/tangible/gem/clothing.iff");
7420 refreshMenu ( player, prompt, title, CRAFTING_SUIT, "handleCraftingSuitSelect", false);
7423 refreshMenu ( player, prompt, title, AURILIA_CRYSTALS, "handleBuffCrystalSelect", false);
7427 cleanScriptVars(player);
7428 return SCRIPT_CONTINUE;
7432 return SCRIPT_CONTINUE;
7436 messageHandler handleMiscSelect()
7438 if ( (params == null) || (params.isEmpty()) )
7440 //cleanScriptVars(player);
7441 return SCRIPT_CONTINUE;
7444 obj_id player = sui.getPlayerId(params);
7445 obj_id pInv = utils.getInventoryContainer(player);
7447 int btn = sui.getIntButtonPressed(params);
7448 int idx = sui.getListboxSelectedRow(params);
7450 if ( btn == sui.BP_REVERT )
7452 handleMiscOption(player);
7453 return SCRIPT_CONTINUE;
7456 if(btn == sui.BP_CANCEL)
7458 cleanScriptVars(player);
7459 closeOldWindow(player);
7460 return SCRIPT_CONTINUE;
7463 if ( idx == -1 || idx > MISC_OPTIONS.length)
7465 cleanScriptVars(player);
7466 return SCRIPT_CONTINUE;
7469 //make sure player is Valid
7470 if(!isIdValid(player))
7472 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7473 cleanScriptVars(player);
7474 return SCRIPT_OVERRIDE;
7476 //make sure player's inventory is valid
7477 if (!isIdValid(pInv))
7479 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7480 cleanScriptVars(player);
7481 return SCRIPT_OVERRIDE;
7483 //make sure there is room in player's inventory
7484 if (getVolumeFree(pInv) <= 0)
7486 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7487 cleanScriptVars(player);
7488 return SCRIPT_OVERRIDE;
7493 case 0: // spec-ops pack
7494 createObject("object/tangible/wearables/backpack/backpack_s06.iff", pInv, "");
7495 sendSystemMessageTestingOnly(player, "Spec-Ops Pack Issued.");
7497 case 1: // krayt pack
7498 createObject("object/tangible/wearables/backpack/backpack_krayt_skull.iff", pInv, "");
7499 sendSystemMessageTestingOnly(player, "Krayt Pack Issued.");
7501 case 2: // pilot ace pack
7502 createObject("object/tangible/wearables/backpack/backpack_s09.iff", pInv, "");
7503 sendSystemMessageTestingOnly(player, "Pilot Ace Pack Issued.");
7505 case 3: // jedi pack
7506 static_item.createNewItemFunction("item_fannypack_04_01", pInv);
7507 sendSystemMessageTestingOnly(player, "Jedi Belt of Master Bodo Baas Issued.");
7510 static_item.createNewItemFunction("armor_snowtrooper_backpack", pInv);
7511 sendSystemMessageTestingOnly(player, "Snowtrooper Backpack Issued.");
7514 static_item.createNewItemFunction("armor_rebel_snow_backpack", pInv);
7515 sendSystemMessageTestingOnly(player, "Alliance Cold Weather Backpack Issued.");
7517 case 6: // arakyd probe droid
7518 createObject("object/tangible/mission/mission_bounty_droid_probot.iff", pInv, "");
7519 sendSystemMessageTestingOnly(player, "Arakyd Probe Droid Issued.");
7521 case 7: // seeker droid
7522 createObject("object/tangible/mission/mission_bounty_droid_seeker.iff", pInv, "");
7523 sendSystemMessageTestingOnly(player, "Seeker Droid Issued.");
7525 case 8: // draft schematic ee3
7526 static_item.createNewItemFunction("item_limited_use_schematic_bounty_ee3_04_01", pInv);
7527 sendSystemMessageTestingOnly(player, "Master Crafted EE3 Draft Schematic Issued.");
7529 case 9: // draft schematic dc15
7530 static_item.createNewItemFunction("item_limited_use_schematic_bounty_dc15_04_01", pInv);
7531 sendSystemMessageTestingOnly(player, "Master Crafted DC-15 Draft Schematic Issued.");
7533 case 10: // resource kit
7534 createObject("object/tangible/veteran_reward/resource.iff", pInv, "");
7535 sendSystemMessageTestingOnly(player, "Resource Kit Issued");
7537 case 11: // Bio Focus Crystal
7538 static_item.createNewItemFunction("item_force_crystal_04_01", pInv);
7539 sendSystemMessageTestingOnly(player, "Biological Focus Crystal Issued");
7541 case 12: // Synapse Focus Crystal
7542 static_item.createNewItemFunction("item_force_crystal_04_02", pInv);
7543 sendSystemMessageTestingOnly(player, "Synapse Focus Crystal Issued");
7545 case 13: // Musty Injector
7546 static_item.createNewItemFunction("item_tow_proc_generic_03_01", pInv);
7547 sendSystemMessageTestingOnly(player, "Mustafarian Injector Issued");
7549 case 14: // Instance Reset Device
7550 static_item.createNewItemFunction("item_tcg_loot_reward_series5_signal_unit", pInv);
7551 sendSystemMessageTestingOnly(player, "Naboo Signaling Unit Issued");
7554 float currentBuffTime = performance.inspireGetMaxDuration(player);
7555 buff.applyBuff(player, "buildabuff_inspiration", 7200);
7556 utils.setScriptVar(player, "performance.buildabuff.buffComponentKeys", buffComponentKeys);
7557 utils.setScriptVar(player, "performance.buildabuff.buffComponentValues", buffComponentValues);
7558 utils.setScriptVar(player, "performance.buildabuff.player", player);
7560 buff.applyBuff((player), "me_buff_health_2", 7200);
7561 buff.applyBuff((player), "me_buff_action_3", 7200);
7562 buff.applyBuff((player), "me_buff_strength_3", 7200);
7563 buff.applyBuff((player), "me_buff_agility_3", 7200);
7564 buff.applyBuff((player), "me_buff_precision_3", 7200);
7565 buff.applyBuff((player), "me_buff_melee_gb_1", 7200);
7566 buff.applyBuff((player), "me_buff_ranged_gb_1", 7200);
7567 buff.applyBuff((player), "of_buff_def_9", 7200);
7568 buff.applyBuff((player), "of_focus_fire_6", 7200);
7569 buff.applyBuff((player), "of_tactical_drop_6", 7200);
7570 buff.applyBuff((player), "aurilian_crystal_large", 7200);
7571 buff.applyBuff((player), "sm_smuggled", 7200);
7572 buff.applyBuff((player), "tusken_bane", 7200);
7573 buff.applyBuff((player), "vr_familiar_defense_8", 7200);
7574 buff.applyBuff((player), "towPoisonResistAbsorb_3", 7200);
7575 buff.applyBuff((player), "drink_flameout", 7200);
7576 buff.applyBuff((player), "banner_buff_commando", 7200);
7577 buff.applyBuff((player), "banner_buff_smuggler", 7200);
7578 buff.applyBuff((player), "banner_buff_medic", 7200);
7579 buff.applyBuff((player), "banner_buff_officer", 7200);
7580 buff.applyBuff((player), "banner_buff_spy", 7200);
7581 buff.applyBuff((player), "banner_buff_bounty_hunter", 7200);
7582 buff.applyBuff((player), "banner_buff_force_sensitive", 7200);
7583 buff.applyBuff((player), "muon_gold", 7200);
7584 buff.applyBuff((player), "tcg_series1_tusken_talisman", 7200);
7585 buff.applyBuff((player), "event_ewok_drink", 7200);
7586 buff.applyBuff((player), "event_ewok_berry", 7200);
7587 buff.applyBuff((player), "forceCrystalHealth", 7200);
7588 buff.applyBuff((player), "forceCrystalForce", 7200);
7589 buff.applyBuff((player), "frogBuff", 7200);
7590 sendSystemMessageTestingOnly(player, "Buffs granted.");
7593 cleanScriptVars(player);
7594 return SCRIPT_CONTINUE;
7598 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", MISC_OPTIONS, "handleMiscSelect", false);
7599 return SCRIPT_CONTINUE;
7603 messageHandler handleCraftingSuitSelect()
7605 if ( (params == null) || (params.isEmpty()) )
7607 //cleanScriptVars(player);
7608 return SCRIPT_CONTINUE;
7611 obj_id player = sui.getPlayerId(params);
7612 obj_id pInv = utils.getInventoryContainer(player);
7614 int btn = sui.getIntButtonPressed(params);
7615 int idx = sui.getListboxSelectedRow(params);
7617 if ( btn == sui.BP_REVERT )
7619 handleMiscOption(player);
7620 return SCRIPT_CONTINUE;
7623 if(btn == sui.BP_CANCEL)
7625 cleanScriptVars(player);
7626 closeOldWindow(player);
7627 return SCRIPT_CONTINUE;
7630 if ( idx == -1 || idx > CRAFTING_SUIT.length)
7632 cleanScriptVars(player);
7633 return SCRIPT_CONTINUE;
7636 //make sure player is Valid
7637 if(!isIdValid(player))
7639 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7640 cleanScriptVars(player);
7641 return SCRIPT_OVERRIDE;
7643 //make sure player's inventory is valid
7644 if (!isIdValid(pInv))
7646 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7647 cleanScriptVars(player);
7648 return SCRIPT_OVERRIDE;
7650 //make sure there is room in player's inventory
7651 if (getVolumeFree(pInv) <= 0)
7653 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7654 cleanScriptVars(player);
7655 return SCRIPT_OVERRIDE;
7660 case 0: // crafting suit
7661 obj_id suit = static_item.createNewItemFunction("item_god_craftingsuit_06_01", pInv);
7663 sendSystemMessageTestingOnly(player, "Blix's Ultra Crafting Suit Issued, May you see nothing but Amazing Crafts!");
7667 cleanScriptVars(player);
7668 return SCRIPT_CONTINUE;
7672 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", CRAFTING_SUIT, "handleCraftingSuitSelect", false);
7673 return SCRIPT_CONTINUE;
7677 messageHandler handleSmugglerSelect()
7679 if ( (params == null) || (params.isEmpty()) )
7681 //cleanScriptVars(player);
7682 return SCRIPT_CONTINUE;
7685 obj_id player = sui.getPlayerId(params);
7686 obj_id pInv = utils.getInventoryContainer(player);
7688 int btn = sui.getIntButtonPressed(params);
7689 int idx = sui.getListboxSelectedRow(params);
7691 if ( btn == sui.BP_REVERT )
7693 handleMiscOption(player);
7694 return SCRIPT_CONTINUE;
7697 if(btn == sui.BP_CANCEL)
7699 cleanScriptVars(player);
7700 closeOldWindow(player);
7701 return SCRIPT_CONTINUE;
7704 if ( idx == -1 || idx > SMUGGLER_TOOLS_OPTIONS.length)
7706 cleanScriptVars(player);
7707 return SCRIPT_CONTINUE;
7710 //make sure player is Valid
7711 if(!isIdValid(player))
7713 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7714 cleanScriptVars(player);
7715 return SCRIPT_OVERRIDE;
7717 //make sure player's inventory is valid
7718 if (!isIdValid(pInv))
7720 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7721 cleanScriptVars(player);
7722 return SCRIPT_OVERRIDE;
7724 //make sure there is room in player's inventory
7725 if (getVolumeFree(pInv) <= 0)
7727 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7728 cleanScriptVars(player);
7729 return SCRIPT_OVERRIDE;
7734 case 0: // Simple Toolkit
7735 createObject("object/tangible/smuggler/simple_toolkit.iff", pInv, "");
7736 sendSystemMessageTestingOnly(player, "Simple Toolkit Issued.");
7738 case 1: // Finely Crafted Toolset
7739 createObject("object/tangible/smuggler/finely_crafted_toolset.iff", pInv, "");
7740 sendSystemMessageTestingOnly(player, "Finely Crafted Toolset Issued.");
7742 case 2: // Trandoshan Interframe
7743 createObject("object/tangible/smuggler/trandoshan_interframe.iff", pInv, "");
7744 sendSystemMessageTestingOnly(player, "Trandoshan Interframe Issued.");
7746 case 3: // Delicate Trigger
7747 createObject("object/tangible/smuggler/delicate_trigger_assembly.iff", pInv, "");
7748 sendSystemMessageTestingOnly(player, "Delicate Trigger Issued.");
7750 case 4: // Illegal Core booster
7751 createObject("object/tangible/smuggler/illegal_core_booster.iff", pInv, "");
7752 sendSystemMessageTestingOnly(player, "Illegal Core Booster Issued.");
7754 case 5: // Mandalorian Interframe
7755 createObject("object/tangible/smuggler/mandalorian_interframe.iff", pInv, "");
7756 sendSystemMessageTestingOnly(player, "Mandalorian Interframe Issued.");
7758 case 6: // Micro Plating
7759 createObject("object/tangible/smuggler/reactive_micro_plating.iff", pInv, "");
7760 sendSystemMessageTestingOnly(player, "Micro Plating Issued.");
7763 cleanScriptVars(player);
7764 return SCRIPT_CONTINUE;
7768 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", SMUGGLER_TOOLS_OPTIONS, "handleSmugglerSelect", false);
7769 return SCRIPT_CONTINUE;
7773 string[] getExoticMods()
7775 string[] skillMods = dataTableGetStringColumn(EXOTIC_SKILL_MODS, "name");
7777 for (int i = 0; i < skillMods.length; i++)
7779 skillMods[i] = utils.packStringId(new string_id("stat_n", skillMods[i]));
7785 messageHandler handlePowerUpSelect()
7787 if ( (params == null) || (params.isEmpty()) )
7789 //cleanScriptVars(player);
7790 return SCRIPT_CONTINUE;
7793 obj_id player = sui.getPlayerId(params);
7794 obj_id pInv = utils.getInventoryContainer(player);
7796 int btn = sui.getIntButtonPressed(params);
7797 int idx = sui.getListboxSelectedRow(params);
7799 string[] skillMods = dataTableGetStringColumn(EXOTIC_SKILL_MODS, "name");
7801 if ( btn == sui.BP_REVERT )
7803 handleMiscOption(player);
7804 return SCRIPT_CONTINUE;
7807 if(btn == sui.BP_CANCEL)
7809 cleanScriptVars(player);
7810 closeOldWindow(player);
7811 return SCRIPT_CONTINUE;
7814 if ( idx == -1 || idx > skillMods.length)
7816 cleanScriptVars(player);
7817 return SCRIPT_CONTINUE;
7820 //make sure player is Valid
7821 if(!isIdValid(player))
7823 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7824 cleanScriptVars(player);
7825 return SCRIPT_OVERRIDE;
7827 //make sure player's inventory is valid
7828 if (!isIdValid(pInv))
7830 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7831 cleanScriptVars(player);
7832 return SCRIPT_OVERRIDE;
7834 //make sure there is room in player's inventory
7835 if (getVolumeFree(pInv) <= 0)
7837 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7838 cleanScriptVars(player);
7839 return SCRIPT_OVERRIDE;
7842 string skillMod = dataTableGetString(EXOTIC_SKILL_MODS, idx, "name");
7843 int powerRatio = dataTableGetInt(EXOTIC_SKILL_MODS, idx, "ratio");
7846 obj_id armorPower = static_item.createNewItemFunction("item_reverse_engineering_powerup_armor_02_01", pInv);
7847 obj_id shirtPower = static_item.createNewItemFunction("item_reverse_engineering_powerup_clothing_02_01", pInv);
7848 obj_id weaponPower = static_item.createNewItemFunction("item_reverse_engineering_powerup_weapon_02_01", pInv);
7850 if(isIdValid(armorPower))
7852 setObjVar(armorPower, "reverse_engineering.reverse_engineering_modifier", skillMod);
7853 setObjVar(armorPower, "reverse_engineering.reverse_engineering_ratio", powerRatio);
7854 setObjVar(armorPower, "reverse_engineering.reverse_engineering_power", power);
7855 setCount(armorPower, 350);
7856 sendSystemMessageTestingOnly(player, "Armor Power Up Issued");
7859 if(isIdValid(shirtPower))
7861 setObjVar(shirtPower, "reverse_engineering.reverse_engineering_modifier", skillMod);
7862 setObjVar(shirtPower, "reverse_engineering.reverse_engineering_ratio", powerRatio);
7863 setObjVar(shirtPower, "reverse_engineering.reverse_engineering_power", power);
7864 setCount(shirtPower, 350);
7865 sendSystemMessageTestingOnly(player, "Shirt Power Up Issued");
7868 if(isIdValid(weaponPower))
7870 setObjVar(weaponPower, "reverse_engineering.reverse_engineering_modifier", skillMod);
7871 setObjVar(weaponPower, "reverse_engineering.reverse_engineering_ratio", powerRatio);
7872 setObjVar(weaponPower, "reverse_engineering.reverse_engineering_power", power);
7873 setCount(weaponPower, 350);
7874 sendSystemMessageTestingOnly(player, "Weapon Power Up Issued");
7877 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", getExoticMods(), "handlePowerUpSelect", false);
7878 return SCRIPT_CONTINUE;
7881 messageHandler handleAttachmentOneSelect()
7883 if ( (params == null) || (params.isEmpty()) )
7885 //cleanScriptVars(player);
7886 return SCRIPT_CONTINUE;
7889 obj_id player = sui.getPlayerId(params);
7890 obj_id pInv = utils.getInventoryContainer(player);
7892 int btn = sui.getIntButtonPressed(params);
7893 int idx = sui.getListboxSelectedRow(params);
7895 string[] skillMods = dataTableGetStringColumn(EXOTIC_SKILL_MODS, "name");
7897 string prompt = "Select Second Skill Modifier, You will need to pick one more time!";
7898 string title = "Character Builder Terminal";
7900 if ( btn == sui.BP_REVERT )
7902 handleMiscOption(player);
7903 return SCRIPT_CONTINUE;
7906 if(btn == sui.BP_CANCEL)
7908 cleanScriptVars(player);
7909 closeOldWindow(player);
7910 return SCRIPT_CONTINUE;
7913 if ( idx == -1 || idx > skillMods.length)
7915 cleanScriptVars(player);
7916 return SCRIPT_CONTINUE;
7919 utils.setScriptVar(player, "character_builder.modTypeOne", idx);
7921 refreshMenu ( player, prompt, title, getExoticMods(), "handleAttachmentTwoSelect", false);
7923 return SCRIPT_CONTINUE;
7927 messageHandler handleAttachmentTwoSelect()
7930 if ( (params == null) || (params.isEmpty()) )
7932 //cleanScriptVars(player);
7933 return SCRIPT_CONTINUE;
7936 obj_id player = sui.getPlayerId(params);
7937 obj_id pInv = utils.getInventoryContainer(player);
7939 int btn = sui.getIntButtonPressed(params);
7940 int idx = sui.getListboxSelectedRow(params);
7942 string[] skillMods = dataTableGetStringColumn(EXOTIC_SKILL_MODS, "name");
7944 string prompt = "Select Final Skill Modifier";
7945 string title = "Character Builder Terminal";
7947 if ( btn == sui.BP_REVERT )
7949 handleMiscOption(player);
7950 return SCRIPT_CONTINUE;
7953 if(btn == sui.BP_CANCEL)
7955 cleanScriptVars(player);
7956 closeOldWindow(player);
7957 return SCRIPT_CONTINUE;
7960 if ( idx == -1 || idx > skillMods.length)
7962 cleanScriptVars(player);
7963 return SCRIPT_CONTINUE;
7966 utils.setScriptVar(player, "character_builder.modTypeTwo", idx);
7968 refreshMenu ( player, prompt, title, getExoticMods(), "handleAttachmentsSelect", false);
7970 return SCRIPT_CONTINUE;
7974 messageHandler handleAttachmentsSelect()
7976 if ( (params == null) || (params.isEmpty()) )
7978 //cleanScriptVars(player);
7979 return SCRIPT_CONTINUE;
7982 obj_id player = sui.getPlayerId(params);
7983 obj_id pInv = utils.getInventoryContainer(player);
7985 int btn = sui.getIntButtonPressed(params);
7986 int idx = sui.getListboxSelectedRow(params);
7988 string[] skillMods = dataTableGetStringColumn(EXOTIC_SKILL_MODS, "name");
7990 if ( btn == sui.BP_REVERT )
7992 handleMiscOption(player);
7993 return SCRIPT_CONTINUE;
7996 if(btn == sui.BP_CANCEL)
7998 cleanScriptVars(player);
7999 closeOldWindow(player);
8000 return SCRIPT_CONTINUE;
8003 if ( idx == -1 || idx > skillMods.length)
8005 cleanScriptVars(player);
8006 return SCRIPT_CONTINUE;
8009 utils.setScriptVar(player, "character_builder.modTypeThree", idx);
8011 //make sure player is Valid
8012 if(!isIdValid(player))
8014 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8015 cleanScriptVars(player);
8016 return SCRIPT_OVERRIDE;
8018 //make sure player's inventory is valid
8019 if (!isIdValid(pInv))
8021 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8022 cleanScriptVars(player);
8023 return SCRIPT_OVERRIDE;
8025 //make sure there is room in player's inventory
8026 if (getVolumeFree(pInv) <= 0)
8028 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8029 cleanScriptVars(player);
8030 return SCRIPT_OVERRIDE;
8034 int skillModOne = utils.getIntScriptVar(player, "character_builder.modTypeOne");
8035 int skillModTwo = utils.getIntScriptVar(player, "character_builder.modTypeTwo");
8036 int skillModThree = utils.getIntScriptVar(player, "character_builder.modTypeThree");
8038 string stringSkillModOne = dataTableGetString(EXOTIC_SKILL_MODS, skillModOne, "name");
8039 string stringSkillModTwo = dataTableGetString(EXOTIC_SKILL_MODS, skillModTwo, "name");
8040 string stringSkillModThree = dataTableGetString(EXOTIC_SKILL_MODS, skillModThree, "name");
8042 int powerRatioOne = dataTableGetInt(EXOTIC_SKILL_MODS, skillModOne, "ratio");
8043 int powerRatioTwo = dataTableGetInt(EXOTIC_SKILL_MODS, skillModTwo, "ratio");
8044 int powerRatioThree = dataTableGetInt(EXOTIC_SKILL_MODS, skillModThree, "ratio");
8047 int powerOne = power/powerRatioOne;
8048 int powerTwo = power/powerRatioTwo;
8049 int powerThree = power/powerRatioThree;
8051 obj_id armorPower = createObject("object/tangible/gem/bp_armor_only.iff", pInv, "");
8052 obj_id shirtPower = createObject("object/tangible/gem/shirt_only.iff", pInv, "");
8053 obj_id weaponPower = createObject("object/tangible/gem/weapon.iff", pInv, "");
8055 if(isIdValid(armorPower))
8057 setObjVar(armorPower, "skillmod.bonus." + stringSkillModOne, powerOne);
8058 setObjVar(armorPower, "skillmod.bonus." + stringSkillModTwo, powerTwo);
8059 setObjVar(armorPower, "skillmod.bonus." + stringSkillModThree, powerThree);
8060 setObjVar(armorPower, "reverse_engineering.attachment_level", 2);
8061 sendSystemMessageTestingOnly(player, "Exotic Armor Attachment Issued");
8064 if(isIdValid(shirtPower))
8066 setObjVar(shirtPower, "skillmod.bonus." + stringSkillModOne, powerOne);
8067 setObjVar(shirtPower, "skillmod.bonus." + stringSkillModTwo, powerTwo);
8068 setObjVar(shirtPower, "skillmod.bonus." + stringSkillModThree, powerThree);
8069 setObjVar(shirtPower, "reverse_engineering.attachment_level", 2);
8070 sendSystemMessageTestingOnly(player, "Exotic Shirt Attachment Issued");
8073 if(isIdValid(weaponPower))
8075 setObjVar(weaponPower, "skillmod.bonus." + stringSkillModOne, powerOne);
8076 setObjVar(weaponPower, "skillmod.bonus." + stringSkillModTwo, powerTwo);
8077 setObjVar(weaponPower, "skillmod.bonus." + stringSkillModThree, powerThree);
8078 setObjVar(weaponPower, "reverse_engineering.attachment_level", 2);
8079 sendSystemMessageTestingOnly(player, "Exotic Weapon Attachment Issued");
8082 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", MISCITEM_OPTIONS, "handleMiscOptions", false);
8083 return SCRIPT_CONTINUE;
8086 messageHandler handleClothingSelect()
8088 if ( (params == null) || (params.isEmpty()) )
8090 //cleanScriptVars(player);
8091 return SCRIPT_CONTINUE;
8094 obj_id player = sui.getPlayerId(params);
8095 obj_id pInv = utils.getInventoryContainer(player);
8097 int btn = sui.getIntButtonPressed(params);
8098 int idx = sui.getListboxSelectedRow(params);
8100 if ( btn == sui.BP_REVERT )
8102 handleMiscOption(player);
8103 return SCRIPT_CONTINUE;
8106 if(btn == sui.BP_CANCEL)
8108 cleanScriptVars(player);
8109 closeOldWindow(player);
8110 return SCRIPT_CONTINUE;
8113 if ( idx == -1 || idx > CLOTHING_OPTIONS.length)
8115 cleanScriptVars(player);
8116 return SCRIPT_CONTINUE;
8119 //make sure player is Valid
8120 if(!isIdValid(player))
8122 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8123 cleanScriptVars(player);
8124 return SCRIPT_OVERRIDE;
8126 //make sure player's inventory is valid
8127 if (!isIdValid(pInv))
8129 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8130 cleanScriptVars(player);
8131 return SCRIPT_OVERRIDE;
8133 //make sure there is room in player's inventory
8134 if (getVolumeFree(pInv) <= 0)
8136 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8137 cleanScriptVars(player);
8138 return SCRIPT_OVERRIDE;
8141 string clothing = "";
8145 case 0: //socketed shirt
8146 clothing = "object/tangible/wearables/shirt/npe_shirt.iff";
8148 case 1: //socketed gloves
8149 clothing = "object/tangible/wearables/gloves/gloves_s14.iff";
8151 case 2: //socketed hat
8152 clothing = "object/tangible/wearables/hat/hat_s02.iff";
8154 case 3: //socketed pants
8155 clothing = "object/tangible/wearables/pants/pants_s07.iff";
8157 case 4: //socketed jacket
8158 clothing = "object/tangible/wearables/jacket/jacket_s13.iff";
8160 case 5: //socketed boots
8161 clothing = "object/tangible/wearables/boots/boots_s05.iff";
8164 cleanScriptVars(player);
8165 return SCRIPT_CONTINUE;
8168 if(clothing != null && clothing != "")
8170 obj_id clothingObject = createObject(clothing, pInv, "");
8172 if(isIdValid(clothingObject))
8174 setSocketsUp(clothingObject);
8175 sendSystemMessageTestingOnly(player, "Clothing Issued");
8179 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", CLOTHING_OPTIONS, "handleClothingSelect", false);
8180 return SCRIPT_CONTINUE;
8183 messageHandler handleBasicArmorAttachmentOne()
8185 if ( (params == null) || (params.isEmpty()) )
8187 //cleanScriptVars(player);
8188 return SCRIPT_CONTINUE;
8191 obj_id player = sui.getPlayerId(params);
8192 obj_id pInv = utils.getInventoryContainer(player);
8194 int btn = sui.getIntButtonPressed(params);
8195 int idx = sui.getListboxSelectedRow(params);
8197 string prompt = "Select Second Skill Modifier, You will need to pick one more time!";
8198 string title = "Character Builder Terminal";
8200 if ( btn == sui.BP_REVERT )
8202 handleMiscOption(player);
8203 return SCRIPT_CONTINUE;
8206 if(btn == sui.BP_CANCEL)
8208 cleanScriptVars(player);
8209 closeOldWindow(player);
8210 return SCRIPT_CONTINUE;
8213 if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8215 cleanScriptVars(player);
8216 return SCRIPT_CONTINUE;
8219 utils.setScriptVar(player, "character_builder.basicModTypeOne", idx);
8221 refreshMenu ( player, prompt, title, BASIC_MOD_LIST, "handleBasicArmorAttachmentTwo", false);
8223 return SCRIPT_CONTINUE;
8226 messageHandler handleBasicArmorAttachmentTwo()
8228 if ( (params == null) || (params.isEmpty()) )
8230 //cleanScriptVars(player);
8231 return SCRIPT_CONTINUE;
8234 obj_id player = sui.getPlayerId(params);
8235 obj_id pInv = utils.getInventoryContainer(player);
8237 int btn = sui.getIntButtonPressed(params);
8238 int idx = sui.getListboxSelectedRow(params);
8240 string prompt = "Select Final Skill Modifier";
8241 string title = "Character Builder Terminal";
8243 if ( btn == sui.BP_REVERT )
8245 handleMiscOption(player);
8246 return SCRIPT_CONTINUE;
8249 if(btn == sui.BP_CANCEL)
8251 cleanScriptVars(player);
8252 closeOldWindow(player);
8253 return SCRIPT_CONTINUE;
8256 if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8258 cleanScriptVars(player);
8259 return SCRIPT_CONTINUE;
8262 utils.setScriptVar(player, "character_builder.basicModTypeTwo", idx);
8264 refreshMenu ( player, prompt, title, BASIC_MOD_LIST, "handleBasicArmorAttachment", false);
8266 return SCRIPT_CONTINUE;
8269 messageHandler handleBasicArmorAttachment()
8271 if ( (params == null) || (params.isEmpty()) )
8273 //cleanScriptVars(player);
8274 return SCRIPT_CONTINUE;
8277 obj_id player = sui.getPlayerId(params);
8278 obj_id pInv = utils.getInventoryContainer(player);
8280 int btn = sui.getIntButtonPressed(params);
8281 int idx = sui.getListboxSelectedRow(params);
8283 if ( btn == sui.BP_REVERT )
8285 handleMiscOption(player);
8286 return SCRIPT_CONTINUE;
8289 if(btn == sui.BP_CANCEL)
8291 cleanScriptVars(player);
8292 closeOldWindow(player);
8293 return SCRIPT_CONTINUE;
8296 if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8298 cleanScriptVars(player);
8299 return SCRIPT_CONTINUE;
8302 utils.setScriptVar(player, "character_builder.basicModTypeThree", idx);
8304 //make sure player is Valid
8305 if(!isIdValid(player))
8307 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8308 cleanScriptVars(player);
8309 return SCRIPT_OVERRIDE;
8311 //make sure player's inventory is valid
8312 if (!isIdValid(pInv))
8314 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8315 cleanScriptVars(player);
8316 return SCRIPT_OVERRIDE;
8318 //make sure there is room in player's inventory
8319 if (getVolumeFree(pInv) <= 0)
8321 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8322 cleanScriptVars(player);
8323 return SCRIPT_OVERRIDE;
8326 int skillModOne = utils.getIntScriptVar(player, "character_builder.basicModTypeOne");
8327 int skillModTwo = utils.getIntScriptVar(player, "character_builder.basicModTypeTwo");
8328 int skillModThree = utils.getIntScriptVar(player, "character_builder.basicModTypeThree");
8330 string stringSkillModOne = BASIC_MOD_STRINGS[skillModOne];
8331 string stringSkillModTwo = BASIC_MOD_STRINGS[skillModTwo];
8332 string stringSkillModThree = BASIC_MOD_STRINGS[skillModThree];
8336 power = power/powerRatio;
8338 string attachment = utils.getStringScriptVar(player, "character_builder.attachment");
8339 obj_id armorPower = createObject(attachment, pInv, "");
8341 if(isIdValid(armorPower))
8343 setObjVar(armorPower, "skillmod.bonus." + stringSkillModOne, power);
8344 setObjVar(armorPower, "skillmod.bonus." + stringSkillModTwo, power);
8345 setObjVar(armorPower, "skillmod.bonus." + stringSkillModThree, power);
8346 setObjVar(armorPower, "reverse_engineering.attachment_level", 2);
8347 sendSystemMessageTestingOnly(player, "Basic Armor Attachment Issued");
8348 cleanScriptVars(player);
8351 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", MISCITEM_OPTIONS, "handleMiscOptions", false);
8352 return SCRIPT_CONTINUE;
8356 messageHandler handleBuffCrystalSelect()
8358 if ( (params == null) || (params.isEmpty()) )
8360 //cleanScriptVars(player);
8361 return SCRIPT_CONTINUE;
8364 obj_id player = sui.getPlayerId(params);
8365 obj_id pInv = utils.getInventoryContainer(player);
8367 int btn = sui.getIntButtonPressed(params);
8368 int idx = sui.getListboxSelectedRow(params);
8370 if ( btn == sui.BP_REVERT )
8372 handleMiscOption(player);
8373 return SCRIPT_CONTINUE;
8376 if(btn == sui.BP_CANCEL)
8378 cleanScriptVars(player);
8379 closeOldWindow(player);
8380 return SCRIPT_CONTINUE;
8383 if ( idx == -1 || idx > AURILIA_CRYSTALS.length)
8385 cleanScriptVars(player);
8386 return SCRIPT_CONTINUE;
8389 //make sure player is Valid
8390 if(!isIdValid(player))
8392 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8393 cleanScriptVars(player);
8394 return SCRIPT_OVERRIDE;
8396 //make sure player's inventory is valid
8397 if (!isIdValid(pInv))
8399 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8400 cleanScriptVars(player);
8401 return SCRIPT_OVERRIDE;
8403 //make sure there is room in player's inventory
8404 if (getVolumeFree(pInv) <= 0)
8406 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8407 cleanScriptVars(player);
8408 return SCRIPT_OVERRIDE;
8411 string crystal = "";
8416 crystal = "item_aurilia_buff_crystal_03_01";
8419 crystal = "item_aurilia_buff_crystal_03_02";
8422 crystal = "item_aurilia_buff_crystal_03_03";
8425 cleanScriptVars(player);
8426 return SCRIPT_CONTINUE;
8429 if(crystal != null && crystal != "")
8432 static_item.createNewItemFunction(crystal, pInv);
8434 sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Aurilia Crystals!");
8437 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", AURILIA_CRYSTALS, "handleBuffCrystalSelect", false);
8438 return SCRIPT_CONTINUE;
8444 messageHandler handleMedicineSelect()
8446 if ( (params == null) || (params.isEmpty()) )
8448 //cleanScriptVars(player);
8449 return SCRIPT_CONTINUE;
8452 obj_id player = sui.getPlayerId(params);
8453 obj_id pInv = utils.getInventoryContainer(player);
8455 int btn = sui.getIntButtonPressed(params);
8456 int idx = sui.getListboxSelectedRow(params);
8458 if ( btn == sui.BP_REVERT )
8460 handleMiscOption(player);
8461 return SCRIPT_CONTINUE;
8464 if(btn == sui.BP_CANCEL)
8466 cleanScriptVars(player);
8467 closeOldWindow(player);
8468 return SCRIPT_CONTINUE;
8471 if ( idx == -1 || idx > MEDICINE_OPTIONS.length)
8473 cleanScriptVars(player);
8474 return SCRIPT_CONTINUE;
8477 //make sure player is Valid
8478 if(!isIdValid(player))
8480 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8481 cleanScriptVars(player);
8482 return SCRIPT_OVERRIDE;
8484 //make sure player's inventory is valid
8485 if (!isIdValid(pInv))
8487 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8488 cleanScriptVars(player);
8489 return SCRIPT_OVERRIDE;
8491 //make sure there is room in player's inventory
8492 if (getVolumeFree(pInv) <= 0)
8494 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8495 cleanScriptVars(player);
8496 return SCRIPT_OVERRIDE;
8499 string[] allTemplates = new string[]{
8507 "endorphineinjection",
8509 "nutrientinjection",
8518 case 0: // stimpack a
8519 obj_id stima = createObject("object/tangible/medicine/instant_stimpack/stimpack_a.iff", pInv, "");
8520 if(isIdValid(stima))
8522 setCount(stima, 350);
8523 setObjVar(stima, "healing.power", 250);
8524 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-A Issued!");
8528 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8531 case 1: // stimpack b
8533 obj_id stimb = createObject("object/tangible/medicine/instant_stimpack/stimpack_b.iff", pInv, "");
8534 if(isIdValid(stimb))
8536 setCount(stimb, 350);
8537 setObjVar(stimb, "healing.power", 400);
8538 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-B Issued!");
8542 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8545 case 2: // stimpack c
8546 obj_id stimc = createObject("object/tangible/medicine/instant_stimpack/stimpack_c.iff", pInv, "");
8547 if(isIdValid(stimc))
8549 setCount(stimc, 350);
8550 setObjVar(stimc, "healing.power", 700);
8551 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-C Issued!");
8555 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8558 case 3: // stimpack d
8559 obj_id stimd = createObject("object/tangible/medicine/instant_stimpack/stimpack_d.iff", pInv, "");
8560 if(isIdValid(stimd))
8562 setCount(stimd, 350);
8563 setObjVar(stimd, "healing.power", 1200);
8564 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-D Issued!");
8568 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8571 /* case 4: // All enhancers
8572 for(int i = 0; i < allTemplates.length; i++)
8574 obj_id enh = createObject("object/tangible/medicine/enhancer/enhancer_" + allTemplates[i] + ".iff", pInv, "");
8578 setObjVar(enh, "healing.enhancement", 700.0f);
8582 case 5: // "Bacta Infusion Enhancer",
8583 case 6: // "Bacta Jab Enhancer",
8584 case 7: // "Bacta Shot Enhancer",
8585 case 8: // "Bacta Spray Enhancer",
8586 case 9: // "Bacta Toss Enhancer",
8587 case 10: // "Deuterium Toss Enhancer",
8588 case 11: // "Disinfect Enhancer",
8589 case 12: // "Endorphine Injection Enhancer",
8590 case 13: // "Neurotoxin Enhancer",
8591 case 14: // "Nutrient Injection Enhancer",
8592 case 15: // "Stabilizer Enhancer",
8593 case 16: // "Thyroid Rupture Enhancer",
8594 case 17: // "Traumatize Enhancer"
8595 obj_id enh = createObject("object/tangible/medicine/enhancer/enhancer_" + allTemplates[idx-5] + ".iff", pInv, "");
8599 setObjVar(enh, "healing.enhancement", 700.0f);
8604 cleanScriptVars(player);
8605 return SCRIPT_CONTINUE;
8608 refreshMenu ( player, "Select the desired option", "Character Builder Terminal", MEDICINE_OPTIONS, "handleMedicineSelect", false);
8609 return SCRIPT_CONTINUE;
8612 //===================================================================
8613 // Heal Section //===============================================
8615 void handleHealOption(obj_id player)
8617 refreshMenu ( player, "Select the desired item option", "Character Builder Terminal", HEAL_OPTIONS, "handleHealOptions", false);
8620 messageHandler handleHealOptions()
8622 if ( (params == null) || (params.isEmpty()) )
8624 //cleanScriptVars(player);
8625 return SCRIPT_CONTINUE;
8628 obj_id player = sui.getPlayerId(params);
8629 int btn = sui.getIntButtonPressed(params);
8630 int idx = sui.getListboxSelectedRow(params);
8632 if ( btn == sui.BP_REVERT )
8634 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
8635 return SCRIPT_CONTINUE;
8638 if(btn == sui.BP_CANCEL)
8640 cleanScriptVars(player);
8641 closeOldWindow(player);
8642 return SCRIPT_CONTINUE;
8645 if ( idx == -1 || idx > HEAL_OPTIONS.length)
8647 cleanScriptVars(player);
8648 closeOldWindow(player);
8649 return SCRIPT_CONTINUE;
8652 //make sure player is Valid
8653 if(!isIdValid(player))
8655 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8656 cleanScriptVars(player);
8657 return SCRIPT_OVERRIDE;
8666 sendSystemMessageTestingOnly(player, "You have been licked by a Frog! All wounds have been Healed!");
8671 healShockWound(player, 1000);
8672 sendSystemMessageTestingOnly(player, "You have been licked by a Frog! All Battle Fatigue has been Healed!");
8675 cleanScriptVars(player);
8676 return SCRIPT_CONTINUE;
8680 refreshMenu (player, "Select the desired option", "Character Builder Terminal", HEAL_OPTIONS, "handleHealOptions", false);
8681 return SCRIPT_CONTINUE;
8684 //===================================================================
8685 // Faction Section //===============================================
8687 void handleFactionOption(obj_id player)
8689 obj_id self = getSelf();
8691 refreshMenu ( player, "Select the desired item option", "Character Builder Terminal", FACTION_OPTIONS, "handleFactionOptions", false);
8694 messageHandler handleFactionOptions()
8696 if ( (params == null) || (params.isEmpty()) )
8698 //cleanScriptVars(player);
8699 return SCRIPT_CONTINUE;
8702 obj_id player = sui.getPlayerId(params);
8703 int btn = sui.getIntButtonPressed(params);
8704 int idx = sui.getListboxSelectedRow(params);
8706 if ( btn == sui.BP_REVERT )
8708 startCharacterBuilder(player);
8709 return SCRIPT_CONTINUE;
8712 if(btn == sui.BP_CANCEL)
8714 cleanScriptVars(player);
8715 closeOldWindow(player);
8716 return SCRIPT_CONTINUE;
8719 if ( idx == -1 || idx > FACTION_OPTIONS.length)
8721 cleanScriptVars(player);
8722 return SCRIPT_CONTINUE;
8725 //make sure player is Valid
8726 if(!isIdValid(player))
8728 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8729 cleanScriptVars(player);
8730 return SCRIPT_OVERRIDE;
8733 string prompt = "Select the desired option";
8734 string title = "Character Builder Terminal";
8736 string factionName = factions.getFaction(player);
8737 int current_rank = pvpGetCurrentGcwRank(player);
8743 factionName = "Imperial";
8744 if (factionName == null)
8746 //sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8747 return SCRIPT_OVERRIDE;
8749 standing = (int)factions.getFactionStanding(player, factionName);
8750 factions.addFactionStanding(player, factionName, FACTION_AMT);
8753 factionName = "Rebel";
8754 if (factionName == null)
8756 //sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8757 return SCRIPT_OVERRIDE;
8759 standing = (int)factions.getFactionStanding(player, factionName);
8760 factions.addFactionStanding(player, factionName, FACTION_AMT);
8763 cleanScriptVars(player);
8764 return SCRIPT_CONTINUE;
8767 handleFactionOption(player);
8768 return SCRIPT_CONTINUE;
8771 void handleSpaceMiningOption(obj_id player)
8773 obj_id self = getSelf();
8775 skill.grantSkill(player, "pilot_rebel_navy_novice");
8776 skill.grantSkill(player, "pilot_rebel_navy_starships_01");
8777 skill.grantSkill(player, "pilot_rebel_navy_starships_02");
8778 skill.grantSkill(player, "pilot_rebel_navy_starships_03");
8779 skill.grantSkill(player, "pilot_rebel_navy_starships_04");
8780 skill.grantSkill(player, "pilot_rebel_navy_weapons_01");
8781 skill.grantSkill(player, "pilot_rebel_navy_weapons_02");
8782 skill.grantSkill(player, "pilot_rebel_navy_weapons_03");
8783 skill.grantSkill(player, "pilot_rebel_navy_weapons_04");
8784 skill.grantSkill(player, "pilot_rebel_navy_procedures_01");
8785 skill.grantSkill(player, "pilot_rebel_navy_procedures_02");
8786 skill.grantSkill(player, "pilot_rebel_navy_procedures_03");
8787 skill.grantSkill(player, "pilot_rebel_navy_procedures_04");
8788 skill.grantSkill(player, "pilot_rebel_navy_droid_01");
8789 skill.grantSkill(player, "pilot_rebel_navy_droid_02");
8790 skill.grantSkill(player, "pilot_rebel_navy_droid_03");
8791 skill.grantSkill(player, "pilot_rebel_navy_droid_04");
8792 skill.grantSkill(player, "pilot_rebel_navy_master");
8794 attachScript(player, "wwallace.space_mining_test");
8796 obj_id objInventory = utils.getInventoryContainer(player);
8797 sendSystemMessageTestingOnly(player, "Granting a mining vessel...and launching you to spaaaace!");
8798 obj_id weapon1 = createObjectOverloaded("object/tangible/ship/components/weapon/wpn_mining_laser_mk2.iff", objInventory);
8799 obj_id weapon2 = createObjectOverloaded("object/tangible/ship/components/weapon/wpn_tractor_pulse_gun.iff", objInventory);
8800 obj_id cargoHold = createObjectOverloaded("object/tangible/ship/components/cargo_hold/crg_starfighter_large.iff", objInventory);
8802 obj_id newship = space_utils.createShipControlDevice(player, "xwing", true);
8804 if (isIdValid(newship))
8806 obj_id ship = space_transition.getShipFromShipControlDevice(newship);
8807 obj_id comp1 = shipUninstallComponent(player, ship , ship_chassis_slot_type.SCST_weapon_0, objInventory);
8808 destroyObject(comp1);
8809 shipInstallComponent(player, ship, ship_chassis_slot_type.SCST_weapon_0, weapon1);
8810 obj_id comp2 = shipUninstallComponent(player, ship , ship_chassis_slot_type.SCST_weapon_1, objInventory);
8811 destroyObject(comp2);
8812 shipInstallComponent(player, ship, ship_chassis_slot_type.SCST_weapon_1, weapon2);
8813 shipInstallComponent(player, ship, ship_chassis_slot_type.SCST_cargo_hold, cargoHold);
8816 location space = new location(0, 0, 0, "space_tatooine");
8817 location ground = getLocation(player);
8819 launch(player, ship, null, space, ground);
8825 void handleFactionOption(obj_id player)
8827 obj_id self = getSelf();
8829 refreshMenu ( player, "Select the desired faction option", "Character Builder Terminal", FACTION_OPTIONS, "handleFactionOptions", false);
8832 messageHandler handleFactionOptions()
8834 if ( (params == null) || (params.isEmpty()) )
8836 //cleanScriptVars(player);
8837 return SCRIPT_CONTINUE;
8840 obj_id player = sui.getPlayerId(params);
8841 int btn = sui.getIntButtonPressed(params);
8842 int idx = sui.getListboxSelectedRow(params);
8844 if ( btn == sui.BP_CANCEL )
8846 cleanScriptVars(player);
8847 return SCRIPT_CONTINUE;
8850 if ( idx == -1 || idx > FACTION_OPTIONS.length)
8852 cleanScriptVars(player);
8853 return SCRIPT_CONTINUE;
8856 //make sure player is Valid
8857 if(!isIdValid(player))
8859 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8860 cleanScriptVars(player);
8861 return SCRIPT_OVERRIDE;
8864 string prompt = "Select the desired option";
8865 string title = "Character Builder Terminal";
8867 string factionName = factions.getFaction(player);
8868 int current_rank = pvpGetCurrentGcwRank(player);
8873 if (factionName == null)
8875 sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8876 return SCRIPT_OVERRIDE;
8878 int standing = (int)factions.getFactionStanding(player, factionName);
8879 if ( standing < 25000 )
8881 factions.addFactionStanding(player, factionName, FACTION_AMT);
8885 sendSystemMessageTestingOnly(player, "You already have a large amount of unspent faction points. Why do you need any more?");
8889 if (space_flags.isImperialPilot(player))
8891 sendSystemMessageTestingOnly(player, "You are an Imperial Pilot! You must surrender your current space faction before you become a Rebel!");
8892 return SCRIPT_OVERRIDE;
8894 if (factionName == null)
8896 pvpSetAlignedFaction(player, ##"rebel");
8897 pvpMakeCovert(player);
8898 sendSystemMessageTestingOnly(player, "Faction Set. You are now a Covert Rebel!");
8900 else if (factionName == "Imperial")
8902 sendSystemMessageTestingOnly(player, "You are an Imperial! You must surrender your current faction before you become a Rebel!");
8904 else if (factionName == "Rebel")
8906 sendSystemMessageTestingOnly(player, "You are already a Rebel!");
8910 if (space_flags.isRebelPilot(player))
8912 sendSystemMessageTestingOnly(player, "You are a Rebel Pilot! You must surrender your current space faction before you become an Imperial!");
8913 return SCRIPT_OVERRIDE;
8915 if (factionName == null)
8917 pvpSetAlignedFaction(player, ##"imperial");
8918 pvpMakeCovert(player);
8919 sendSystemMessageTestingOnly(player, "Faction Set. You are now a Covert Imperial!");
8921 else if (factionName == "Rebel")
8923 sendSystemMessageTestingOnly(player, "You are a Rebel! You must surrender your current faction before you become an Imperial!");
8925 else if (factionName == "Imperial")
8927 sendSystemMessageTestingOnly(player, "You are already an Imperial!");
8931 if (factionName == null)
8933 sendSystemMessageTestingOnly(player, "You must declare a Faction before Declaring Overt!");
8934 return SCRIPT_OVERRIDE;
8938 pvpMakeDeclared(player);
8939 sendSystemMessageTestingOnly(player, "OVERT Faction Status SET!");
8943 if (factionName == null)
8945 sendSystemMessageTestingOnly(player, "You must declare a Faction before Declaring Covert!");
8946 return SCRIPT_OVERRIDE;
8950 pvpMakeCovert(player);
8951 sendSystemMessageTestingOnly(player, "COVERT Faction Status SET!");
8956 if (factionName == null)
8958 sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Rank");
8959 return SCRIPT_OVERRIDE;
8963 factions.setRank(player, current_rank + 1);
8968 if (factionName == null)
8970 sendSystemMessageTestingOnly(player, "You must declare a Faction before losing Rank");
8971 return SCRIPT_OVERRIDE;
8975 factions.setRank(player, current_rank - 1);
8979 if(hasObjVar(player, "intChangingFactionStatus"))
8981 removeObjVar(player, "intChangingFactionStatus");
8983 pvpMakeNeutral(player);
8984 pvpSetAlignedFaction(player, 0);
8985 factions.setFactionStanding(player, factionName, 0);
8986 factions.unequipFactionEquipment(player, false);
8987 factions.releaseFactionHirelings(player);
8988 sendSystemMessageTestingOnly(player, "You are now Neutral.");
8991 cleanScriptVars(player);
8992 return SCRIPT_CONTINUE;
8995 refreshMenu ( player, "Select the desired faction option", "Character Builder Terminal", FACTION_OPTIONS, "handleFactionOptions", false);
8996 return SCRIPT_CONTINUE;
9001 //===================================================================
9002 // Roadmap Skills Section //======================================
9004 void handleRoadmapSkills(obj_id player)
9006 refreshMenu ( player, "Select the desired Roadmap option", "Character Builder Terminal", ROADMAP_SKILL_OPTIONS, "handleRoadmapSelect", false);
9009 messageHandler handleRoadmapSelect()
9011 if ( (params == null) || (params.isEmpty()) )
9013 //cleanScriptVars(player);
9014 return SCRIPT_CONTINUE;
9017 obj_id player = sui.getPlayerId(params);
9019 int btn = sui.getIntButtonPressed(params);
9020 int idx = sui.getListboxSelectedRow(params);
9022 if ( btn == sui.BP_REVERT )
9024 startCharacterBuilder(player);
9025 return SCRIPT_CONTINUE;
9028 if(btn == sui.BP_CANCEL)
9030 cleanScriptVars(player);
9031 closeOldWindow(player);
9032 return SCRIPT_CONTINUE;
9035 if ( idx == -1 || idx > ROADMAP_SKILL_OPTIONS.length)
9037 cleanScriptVars(player);
9038 return SCRIPT_CONTINUE;
9041 //make sure player is Valid
9042 if(!isIdValid(player))
9044 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9045 cleanScriptVars(player);
9046 return SCRIPT_OVERRIDE;
9049 string prompt = "Select the desired roadmap skill option";
9050 string title = "Character Builder Terminal";
9058 handleRoadmapChoice(player);
9062 sendSystemMessageTestingOnly(player, "You cannot access that option.");
9066 string skillName = getWorkingSkill(player);
9068 dictionary xpReqs = getSkillPrerequisiteExperience(skillName);
9069 if (xpReqs == null || xpReqs.isEmpty())
9071 sendSystemMessageTestingOnly(player, "Current working skill is invalid.");
9072 return SCRIPT_CONTINUE;
9075 java.util.Enumeration e = xpReqs.keys();
9076 string xpType = (string)(e.nextElement());
9077 int xpCost = xpReqs.getInt(xpType);
9078 int curXP = getExperiencePoints(player, xpType);
9079 if ( curXP < xpCost )
9081 grantExperiencePoints(player, xpType, xpCost - curXP);
9083 skill_template.earnWorkingSkill(player);
9084 handleRoadmapSkills(player);
9087 string template = getSkillTemplate(player);
9088 sui.inputbox(self, player, "Enter your desired level.", "handleAutoLevelSelect");
9091 respec.revokeAllSkillsAndExperience(player);
9093 int currentCombatXp = getExperiencePoints(player, "combat_general");
9094 grantExperiencePoints(player, "combat_general", -currentCombatXp);
9095 skill.recalcPlayerPools(player, true);
9097 respec.autoLevelPlayer(player, 90, false);
9099 //reset the expertise
9100 utils.fullExpertiseReset(player, true);
9102 skill.setPlayerStatsForLevel(player, 90);
9104 removeObjVar(player, "expertise_reset");
9105 removeObjVar(player, "respecsBought");
9106 sendSystemMessageTestingOnly(player, "Respecced to level 90 and respecs cleared.");
9107 cleanScriptVars(player);
9110 cleanScriptVars(player);
9111 return SCRIPT_CONTINUE;
9113 return SCRIPT_CONTINUE;
9116 messageHandler handleAutoLevelSelect()
9118 obj_id player = sui.getPlayerId(params);
9119 string text = sui.getInputBoxText(params);
9121 int level = utils.stringToInt(text);
9123 if (level < 1 || level > 90)
9125 sendSystemMessageTestingOnly(player, "Invalid level entered!");
9129 respec.autoLevelPlayer(player, level, false);
9132 //reset the expertise
9133 utils.fullExpertiseReset(player, true);
9135 expertise.autoAllocateExpertiseByLevel(player, false);
9136 handleRoadmapSkills(player);
9138 return SCRIPT_CONTINUE;
9141 void handleRoadmapChoice(obj_id player)
9143 obj_id self = getSelf();
9144 string[] roadmapList = getRoadmapList();
9146 if (roadmapList == null || roadmapList.length == 0)
9148 sendSystemMessage(player, SID_TERMINAL_DENIED);
9149 cleanScriptVars(player);
9154 closeOldWindow(player);
9155 utils.setBatchScriptVar(player, "character_builder.roadmap_list", roadmapList);
9157 refreshMenu ( player, "Select a skill roadmap.", "Character Builder Terminal", convertRoadmapNames(roadmapList), "handleRoadmapChoiceSelection", false);
9160 messageHandler handleRoadmapChoiceSelection()
9162 int idx = sui.getListboxSelectedRow(params);
9163 obj_id player = sui.getPlayerId(params);
9164 int btn = sui.getIntButtonPressed(params);
9166 if ( btn == sui.BP_REVERT )
9168 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
9169 return SCRIPT_CONTINUE;
9172 if(btn == sui.BP_CANCEL)
9174 cleanScriptVars(player);
9175 closeOldWindow(player);
9176 return SCRIPT_CONTINUE;
9181 cleanScriptVars(player);
9182 return SCRIPT_CONTINUE;
9185 boolean levelNinety = false;
9194 string[] roadmapList = utils.getStringBatchScriptVar(player, "character_builder.roadmap_list");
9200 handleRoadmapSkillProgression(player, roadmapList[idx]);
9204 handleProfessionLevelToNinety(player, roadmapList[idx]);
9208 return SCRIPT_CONTINUE;
9211 string[] getRoadmapList()
9213 // Moved this function to the gm scriptlib so that both this and the /grantSkill command will share the same data
9214 return gm.getRoadmapList();
9217 string[] convertRoadmapNames(string[] list)
9219 string[] newList = new string[list.length * 2];
9221 for (int i = 0; i < newList.length; i += 2)
9223 char branch = list[i / 2].charAt(list[i / 2].length() - 1);
9226 string roadmapName = "@ui_roadmap:title_" + list[i / 2].substring(0, list[i / 2].lastIndexOf('_'));
9227 string branchName = "@ui_roadmap:track_title_" + list[i / 2].substring(0, list[i / 2].lastIndexOf('_')) + "_" + branch;
9229 newList[i] = roadmapName + " - " + branchName;
9231 newList[i + 1] = roadmapName + " - Level 90";
9237 void handleProfessionLevelToNinety(obj_id player, string roadmap)
9239 revokeAllSkills(player);
9241 int currentCombatXp = getExperiencePoints(player, "combat_general");
9242 grantExperiencePoints(player, "combat_general", -currentCombatXp);
9243 skill.recalcPlayerPools(player, true);
9245 setSkillTemplate(player, roadmap);
9247 respec.autoLevelPlayer(player, 90, false);
9249 //reset the expertise
9250 utils.fullExpertiseReset(player, true);
9252 skill.setPlayerStatsForLevel(player, 90);
9254 expertise.autoAllocateExpertiseByLevel(player, false);
9255 handleRoadmapSkills(player);
9258 void handleRoadmapSkillProgression(obj_id player, string roadmap)
9260 obj_id self = getSelf();
9262 string templateSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, roadmap, "template");
9263 string[] skillList = split(templateSkills, ',');
9265 if (skillList == null || skillList.length == 0)
9267 sendSystemMessage(player, SID_TERMINAL_DENIED);
9268 cleanScriptVars(player);
9274 closeOldWindow(player);
9275 utils.setScriptVar(player, "character_builder.skill_template", roadmap);
9276 utils.setBatchScriptVar(player, "character_builder.roadmap_skills", skillList);
9279 refreshMenu ( player, "Select a the working skill in the roadmap.", "Character Builder Terminal", convertSkillListNames(skillList), "handleRoadmapSkillSelection", false);
9282 messageHandler handleRoadmapSkillSelection()
9284 int idx = sui.getListboxSelectedRow(params);
9285 obj_id player = sui.getPlayerId(params);
9286 int btn = sui.getIntButtonPressed(params);
9288 if ( btn == sui.BP_REVERT )
9290 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
9291 return SCRIPT_CONTINUE;
9294 if(btn == sui.BP_CANCEL)
9296 cleanScriptVars(player);
9297 closeOldWindow(player);
9298 return SCRIPT_CONTINUE;
9303 cleanScriptVars(player);
9304 return SCRIPT_CONTINUE;
9307 if ( exists(player) && !outOfRange(self , player, false) )
9309 sendSystemMessageTestingOnly(player, "Revoking all old skills.");
9310 revokeAllSkills(player);
9312 int currentCombatXp = getExperiencePoints(player, "combat_general");
9313 grantExperiencePoints(player, "combat_general", -currentCombatXp);
9314 skill.recalcPlayerPools(player, true);
9318 string skillTemplate = utils.getStringScriptVar(player, "character_builder.skill_template");
9319 setSkillTemplate(player, skillTemplate);
9321 string[] roadmapSkills = utils.getStringBatchScriptVar(player, "character_builder.roadmap_skills");
9323 for (int i = 0; i < idx; i++)
9325 skill.grantSkillToPlayer(player, roadmapSkills[i]);
9328 setWorkingSkill(player, roadmapSkills[idx]);
9330 //reset the expertise
9331 utils.fullExpertiseReset(player, true);
9333 expertise.autoAllocateExpertiseByLevel(player, false);
9334 skill.recalcPlayerPools(player, true);
9337 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
9339 return SCRIPT_CONTINUE;
9342 void revokeAllSkills(obj_id player)
9344 string[] skillList = getSkillListingForPlayer(player);
9345 int attempts = skillList.length;
9347 if ((skillList != null) && (skillList.length != 0))
9349 while(skillList.length > 0 && attempts > 0)
9351 for (int i = 0; i < skillList.length; i++)
9353 string skillName = skillList[i];
9354 if (!skillName.startsWith ("species_")&& //don't revoke species skills
9355 !skillName.startsWith("social_language_")&&
9356 !skillName.startsWith("utility_")&&
9357 !skillName.startsWith("common_")&&
9358 !skillName.startsWith("demo_")&&
9359 !skillName.startsWith("force_title_")&&
9360 !skillName.startsWith("force_sensitive_")&&
9361 !skillName.startsWith("combat_melee_basic")&&
9362 !skillName.startsWith("pilot_")&&
9363 !skillName.startsWith("internal_expertise_") &&
9364 !skillName.startsWith("class_chronicles_") &&
9365 !skillName.startsWith("combat_ranged_weapon_basic"))
9367 skill.revokeSkillSilent(player, skillName);
9371 // The new skill list is the remaining skills.
9372 skillList = getSkillListingForPlayer(player);
9374 // Prevent data from creating an infinite loop.
9379 //reset the expertise
9380 utils.fullExpertiseReset(player, false);
9382 skill.recalcPlayerPools(player, true);
9385 //===================================================================
9386 // CH Pet Ability Section //=========================================
9387 void handlePetAbilityOption(obj_id player)
9389 int[] abilityList = dataTableGetIntColumn(pet_lib.PET_ABILITY_TABLE, "abilityCrc");
9390 string[] abilityNames = dataTableGetStringColumn(pet_lib.PET_ABILITY_TABLE, "abilityName");
9392 for (int i = 0; i < abilityNames.length; i++)
9394 abilityNames[i] = utils.packStringId(new string_id("pet/pet_ability", abilityNames[i]));
9397 refreshMenu ( player, "Select the desired Pet Ability", "Character Builder Terminal", abilityNames, "handlePetAbilitySelection", false);
9398 utils.setScriptVar(player, "character_builder.petAbilityList", abilityList);
9399 utils.setScriptVar(player, "character_builder.petAbilityNames", abilityNames);
9402 messageHandler handlePetAbilitySelection()
9404 if ( (params == null) || (params.isEmpty()) )
9406 //cleanScriptVars(player);
9407 return SCRIPT_CONTINUE;
9410 obj_id player = sui.getPlayerId(params);
9411 int btn = sui.getIntButtonPressed(params);
9412 int idx = sui.getListboxSelectedRow(params);
9414 if ( btn == sui.BP_REVERT )
9416 startCharacterBuilder(player);
9417 return SCRIPT_CONTINUE;
9420 if(btn == sui.BP_CANCEL)
9422 cleanScriptVars(player);
9423 closeOldWindow(player);
9424 return SCRIPT_CONTINUE;
9429 cleanScriptVars(player);
9430 return SCRIPT_CONTINUE;
9433 int[] petAbilityList = utils.getIntArrayScriptVar(player, "character_builder.petAbilityList");
9434 string[] petAbilityNames = utils.getStringArrayScriptVar(player, "character_builder.petAbilityNames");
9436 int[] chAbilityList = getIntArrayObjVar(player, "ch.petAbility.abilityList");
9437 int[] newAbilityList = null;
9439 if (chAbilityList != null && chAbilityList.length > 0)
9441 if (utils.getElementPositionInArray(chAbilityList, petAbilityList[idx]) > -1)
9443 refreshMenu ( player, "Select the desired Pet Ability", "Character Builder Terminal", petAbilityNames, "handlePetAbilitySelection", false);
9444 return SCRIPT_CONTINUE;
9447 newAbilityList = new int[chAbilityList.length + 1];
9448 for (int i = 0; i < chAbilityList.length; i++)
9449 newAbilityList[i] = chAbilityList[i];
9451 newAbilityList[newAbilityList.length - 1] = petAbilityList[idx];
9455 newAbilityList = new int[1];
9456 newAbilityList[0] = petAbilityList[idx];
9458 setObjVar(player, "ch.petAbility.abilityList", newAbilityList);
9460 refreshMenu ( player, "Select the desired Pet Ability", "Character Builder Terminal", petAbilityNames, "handlePetAbilitySelection", false);
9462 return SCRIPT_CONTINUE;
9465 //===================================================================
9466 // Jedi Section //===================================================
9467 void handleJediOption(obj_id player)
9469 refreshMenu ( player, "Select the desired Jedi option", "Character Builder Terminal", JEDI_OPTIONS, "handleJediSelect", false);
9472 messageHandler handleJediSelect()
9474 if ( (params == null) || (params.isEmpty()) )
9476 //cleanScriptVars(player);
9477 return SCRIPT_CONTINUE;
9480 obj_id player = sui.getPlayerId(params);
9481 obj_id pInv = utils.getInventoryContainer(player);
9483 int btn = sui.getIntButtonPressed(params);
9484 int idx = sui.getListboxSelectedRow(params);
9486 if ( btn == sui.BP_REVERT )
9488 startCharacterBuilder(player);
9489 return SCRIPT_CONTINUE;
9492 if(btn == sui.BP_CANCEL)
9494 cleanScriptVars(player);
9495 closeOldWindow(player);
9496 return SCRIPT_CONTINUE;
9499 if ( idx == -1 || idx > JEDI_OPTIONS.length)
9501 cleanScriptVars(player);
9502 return SCRIPT_CONTINUE;
9505 //make sure player is Valid
9506 if(!isIdValid(player))
9508 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9509 cleanScriptVars(player);
9510 return SCRIPT_OVERRIDE;
9514 string prompt = "Select the desired armor option";
9515 string title = "Character Builder Terminal";
9521 refreshMenu( player, prompt, title, CRYSTAL_OPTIONS, "handleCrystalSelect", false);
9524 refreshMenu( player, prompt, title, SABER_OPTIONS, "handleSaberSelect", false);
9527 refreshMenu( player, prompt, title, ROBE_OPTIONS, "handleRobeSelect", false);
9531 refreshMenu( player, prompt, title, JEDI_PLAYTEST_OPTIONS, "handleDesignerSelect", false);
9535 cleanScriptVars(player);
9536 return SCRIPT_CONTINUE;
9538 return SCRIPT_CONTINUE;
9540 messageHandler handleCrystalSelect()
9542 if ( (params == null) || (params.isEmpty()) )
9544 //cleanScriptVars(player);
9545 return SCRIPT_CONTINUE;
9548 obj_id player = sui.getPlayerId(params);
9549 obj_id pInv = utils.getInventoryContainer(player);
9551 int btn = sui.getIntButtonPressed(params);
9552 int idx = sui.getListboxSelectedRow(params);
9554 if ( btn == sui.BP_REVERT )
9556 handleJediOption(player);
9557 return SCRIPT_CONTINUE;
9560 if(btn == sui.BP_CANCEL)
9562 cleanScriptVars(player);
9563 closeOldWindow(player);
9564 return SCRIPT_CONTINUE;
9567 if ( idx == -1 || idx > CRYSTAL_OPTIONS.length)
9569 cleanScriptVars(player);
9570 return SCRIPT_CONTINUE;
9572 //make sure player is Valid
9573 if(!isIdValid(player))
9575 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9576 cleanScriptVars(player);
9577 return SCRIPT_OVERRIDE;
9579 //make sure player's inventory is valid
9580 if (!isIdValid(pInv))
9582 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9583 cleanScriptVars(player);
9584 return SCRIPT_OVERRIDE;
9586 //make sure there is room in player's inventory
9587 if (getVolumeFree(pInv) <= 4)
9589 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 4 inventory slots and try again.");
9590 cleanScriptVars(player);
9591 return SCRIPT_OVERRIDE;
9598 for (int i = 0; i < 4; i++)
9600 jedi.createColorCrystal(pInv, rand(0, 11));
9602 sendSystemMessageTestingOnly(player, "Color Crystals Issued!");
9607 static_item.createNewItemFunction("item_tow_lava_crystal_06_01",pInv);
9608 sendSystemMessageTestingOnly(player, "Lava Crystal Issued!");
9612 sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Lava Crystal!");
9616 for (int i = 0; i < 4; i++)
9618 static_item.createNewItemFunction("item_power_crystal_04_15", pInv);
9620 sendSystemMessageTestingOnly(player, "Power Crystals Issued!");
9625 for (int i = 0; i < 4; i++)
9627 static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
9628 //obj_id crystal = createObject("object/tangible/component/weapon/lightsaber/lightsaber_module_krayt_dragon_pearl.iff", pInv, "");
9629 //setObjVar(crystal, jedi.VAR_CRYSTAL_STATS + "." + jedi.VAR_LEVEL, 350);
9631 sendSystemMessageTestingOnly(player, "Ancient Krayt Pearls Issued!");
9635 sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Ancient Krayt Pearls Issued!");
9639 cleanScriptVars(player);
9640 return SCRIPT_CONTINUE;
9644 refreshMenu( player, "Select the desired armor option", "Character Builder Terminal", CRYSTAL_OPTIONS, "handleCrystalSelect", false);
9645 return SCRIPT_CONTINUE;
9648 messageHandler handleSaberSelect()
9650 if ( (params == null) || (params.isEmpty()) )
9652 //cleanScriptVars(player);
9653 return SCRIPT_CONTINUE;
9656 obj_id player = sui.getPlayerId(params);
9657 obj_id pInv = utils.getInventoryContainer(player);
9659 int btn = sui.getIntButtonPressed(params);
9660 int idx = sui.getListboxSelectedRow(params);
9662 if ( btn == sui.BP_REVERT )
9664 handleJediOption(player);
9665 return SCRIPT_CONTINUE;
9668 if(btn == sui.BP_CANCEL)
9670 cleanScriptVars(player);
9671 closeOldWindow(player);
9672 return SCRIPT_CONTINUE;
9675 if ( idx == -1 || idx > SABER_OPTIONS.length)
9677 cleanScriptVars(player);
9678 return SCRIPT_CONTINUE;
9680 //make sure player is Valid
9681 if(!isIdValid(player))
9683 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9684 cleanScriptVars(player);
9685 return SCRIPT_OVERRIDE;
9687 //make sure player's inventory is valid
9688 if (!isIdValid(pInv))
9690 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9691 cleanScriptVars(player);
9692 return SCRIPT_OVERRIDE;
9694 //make sure there is room in player's inventory
9695 if (getVolumeFree(pInv) <= 4)
9697 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 4 inventory slots and try again.");
9698 cleanScriptVars(player);
9699 return SCRIPT_OVERRIDE;
9707 float[] weaponMinDamage = { 145f };
9708 float[] weaponMaxDamage = { 300f };
9709 float[] weaponAttackSpeed = { 1f };
9710 float weaponWoundChance = 1.0f;
9711 float weaponForceCost = 0.0f;
9712 float weaponAttackCost = 100f;
9713 generateGenerationSabers(0, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9714 jedi.createColorCrystal(pInv, rand(0, 11));
9715 sendSystemMessageTestingOnly(player, "Training Saber Issued!");
9720 float[] weaponMinDamage = { 300f, 300f, 300f };
9721 float[] weaponMaxDamage = { 611f, 611f, 611f };
9722 float[] weaponAttackSpeed = { 1f, 1f, 1f };
9723 float weaponWoundChance = 1.0f;
9724 float weaponForceCost = 0.0f;
9725 float weaponAttackCost = 1f;
9726 generateGenerationSabers(1, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9727 jedi.createColorCrystal(pInv, rand(0, 11));
9728 sendSystemMessageTestingOnly(player, "Generation One Sabers Issued!");
9733 float[] weaponMinDamage = { 360f, 360f, 360f };
9734 float[] weaponMaxDamage = { 740f, 740f, 740f };
9735 float[] weaponAttackSpeed = { 1f, 1f, 1f };
9736 float weaponWoundChance = 1.0f;
9737 float weaponForceCost = 0.0f;
9738 float weaponAttackCost = 1f;
9739 generateGenerationSabers(2, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9740 jedi.createColorCrystal(pInv, rand(0, 11));
9741 sendSystemMessageTestingOnly(player, "Generation Two Sabers Issued!");
9747 float[] weaponMinDamage = { 500f, 500f, 500f };
9748 float[] weaponMaxDamage = { 1000f, 1000f, 1000f };
9749 float[] weaponAttackSpeed = { 1f, 1f, 1f };
9750 float weaponWoundChance = 1.0f;
9751 float weaponForceCost = 0.0f;
9752 float weaponAttackCost = 1f;
9753 generateGenerationSabers(3, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9754 jedi.createColorCrystal(pInv, rand(0, 11));
9755 sendSystemMessageTestingOnly(player, "Generation Three Sabers Issued!");
9760 float[] weaponMinDamage = { 597f, 597f, 597f };
9761 float[] weaponMaxDamage = { 1193f, 1193f, 1193f };
9762 float[] weaponAttackSpeed = { 1f, 1f, 1f };
9763 float weaponWoundChance = 1.0f;
9764 float weaponForceCost = 0.0f;
9765 float weaponAttackCost = 1f;
9766 generateGenerationSabers(4, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9767 jedi.createColorCrystal(pInv, rand(0, 11));
9768 sendSystemMessageTestingOnly(player, "Generation Four Sabers Issued!");
9773 float[] weaponMinDamage = { 660f, 660f, 660f };
9774 float[] weaponMaxDamage = { 1350f, 1350f, 1350f };
9775 float[] weaponAttackSpeed = { 1f, 1f, 1f };
9776 float weaponWoundChance = 1.0f;
9777 float weaponForceCost = 0.0f;
9778 float weaponAttackCost = 1f;
9779 generateGenerationSabers(5, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
9780 jedi.createColorCrystal(pInv, rand(0, 11));
9781 sendSystemMessageTestingOnly(player, "Generation Five Sabers Issued!");
9785 cleanScriptVars(player);
9786 return SCRIPT_CONTINUE;
9790 refreshMenu( player, "Select the desired armor option", "Character Builder Terminal", SABER_OPTIONS, "handleSaberSelect", false);
9791 return SCRIPT_CONTINUE;
9794 messageHandler handleRobeSelect()
9796 if ( (params == null) || (params.isEmpty()) )
9798 //cleanScriptVars(player);
9799 return SCRIPT_CONTINUE;
9802 obj_id player = sui.getPlayerId(params);
9803 obj_id pInv = utils.getInventoryContainer(player);
9805 int btn = sui.getIntButtonPressed(params);
9806 int idx = sui.getListboxSelectedRow(params);
9808 if ( btn == sui.BP_REVERT )
9810 handleJediOption(player);
9811 return SCRIPT_CONTINUE;
9814 if(btn == sui.BP_CANCEL)
9816 cleanScriptVars(player);
9817 closeOldWindow(player);
9818 return SCRIPT_CONTINUE;
9821 if ( idx == -1 || idx > ROBE_OPTIONS.length)
9823 cleanScriptVars(player);
9824 return SCRIPT_CONTINUE;
9826 //make sure player is Valid
9827 if(!isIdValid(player))
9829 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9830 cleanScriptVars(player);
9831 return SCRIPT_OVERRIDE;
9833 //make sure player's inventory is valid
9834 if (!isIdValid(pInv))
9836 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9837 cleanScriptVars(player);
9838 return SCRIPT_OVERRIDE;
9840 //make sure there is room in player's inventory
9841 if (getVolumeFree(pInv) <= 2)
9843 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 2 inventory slots and try again.");
9844 cleanScriptVars(player);
9845 return SCRIPT_OVERRIDE;
9853 static_item.createNewItemFunction("item_jedi_robe_padawan_04_01", pInv);
9854 sendSystemMessageTestingOnly(player, "Padawan Robe Issued!");
9859 static_item.createNewItemFunction("item_jedi_robe_light_03_01", pInv);
9860 sendSystemMessageTestingOnly(player, "Light Acolyte Robe Issued!");
9865 static_item.createNewItemFunction("item_jedi_robe_dark_03_01", pInv);
9866 sendSystemMessageTestingOnly(player, "Dark Acolyte Robe Issued!");
9871 static_item.createNewItemFunction("item_jedi_robe_light_03_02", pInv);
9872 sendSystemMessageTestingOnly(player, "Light Apprentice Robe Issued!");
9877 static_item.createNewItemFunction("item_jedi_robe_dark_03_02", pInv);
9878 sendSystemMessageTestingOnly(player, "Dark Apprentice Robe Issued!");
9883 static_item.createNewItemFunction("item_jedi_robe_light_03_03", pInv);
9884 sendSystemMessageTestingOnly(player, "Light Jedi Knight Robe Issued!");
9889 static_item.createNewItemFunction("item_jedi_robe_dark_03_03", pInv);
9890 sendSystemMessageTestingOnly(player, "Dark Jedi Knight Robe Issued!");
9895 static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
9896 sendSystemMessageTestingOnly(player, "Jedi Master Cloak Issued!");
9901 static_item.createNewItemFunction("item_jedi_robe_light_04_04", pInv);
9902 sendSystemMessageTestingOnly(player, "Elder Jedi Arbiter Robe Issued!");
9907 static_item.createNewItemFunction("item_jedi_robe_dark_04_04", pInv);
9908 sendSystemMessageTestingOnly(player, "Elder Jedi Oppressor Robe Issued!");
9913 static_item.createNewItemFunction("item_jedi_robe_06_02", pInv);
9914 sendSystemMessageTestingOnly(player, "Jedi Master Cloak Issued!");
9919 if ( hasCompletedCollectionSlot(player, "jedi_robe_01_07") )
9921 modifyCollectionSlotValue(player, "jedi_robe_01_07", -1);
9923 if ( hasCompletedCollectionSlot(player, "jedi_robe_01_08") )
9925 modifyCollectionSlotValue(player, "jedi_robe_01_08", -1);
9927 sendSystemMessageTestingOnly(player, "Statue slots in Master Jedi Cloak collection reset!");
9930 cleanScriptVars(player);
9931 return SCRIPT_CONTINUE;
9935 refreshMenu( player, "Select the desired armor option", "Character Builder Terminal", ROBE_OPTIONS, "handleRobeSelect", false);
9936 return SCRIPT_CONTINUE;
9940 messageHandler handleDesignerSelect()
9942 if ( (params == null) || (params.isEmpty()) )
9944 //cleanScriptVars(player);
9945 return SCRIPT_CONTINUE;
9948 obj_id player = sui.getPlayerId(params);
9949 obj_id pInv = utils.getInventoryContainer(player);
9951 int btn = sui.getIntButtonPressed(params);
9952 int idx = sui.getListboxSelectedRow(params);
9954 if ( btn == sui.BP_REVERT )
9956 handleJediOption(player);
9957 return SCRIPT_CONTINUE;
9960 if(btn == sui.BP_CANCEL)
9962 cleanScriptVars(player);
9963 closeOldWindow(player);
9964 return SCRIPT_CONTINUE;
9967 if ( idx == -1 || idx > JEDI_PLAYTEST_OPTIONS.length)
9969 cleanScriptVars(player);
9970 return SCRIPT_CONTINUE;
9972 //make sure player is Valid
9973 if(!isIdValid(player))
9975 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9976 cleanScriptVars(player);
9977 return SCRIPT_OVERRIDE;
9979 //make sure player's inventory is valid
9980 if (!isIdValid(pInv))
9982 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9983 cleanScriptVars(player);
9984 return SCRIPT_OVERRIDE;
9986 //make sure there is room in player's inventory
9987 if (getVolumeFree(pInv) <= 4)
9989 sendSystemMessageTestingOnly(player, "Your Inventory is Full! Please free up at least 4 inventory slots and try again.");
9990 cleanScriptVars(player);
9991 return SCRIPT_OVERRIDE;
9999 float[] weaponMinDamage = { 145f };
10000 float[] weaponMaxDamage = { 300f };
10001 float[] weaponAttackSpeed = { 1f };
10002 float weaponWoundChance = 1.0f;
10003 float weaponForceCost = 0.0f;
10004 float weaponAttackCost = 1f;
10005 generateGenerationSabers(0, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
10006 jedi.createColorCrystal(pInv, rand(0, 11));
10008 static_item.createNewItemFunction("item_jedi_robe_padawan_04_01", pInv);
10010 revokeAllSkills(player);
10011 int currentCombatXp = getExperiencePoints(player, "combat_general");
10012 grantExperiencePoints(player, "combat_general", -currentCombatXp);
10013 setSkillTemplate(player, "force_sensitive_1a");
10014 string templateSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, "force_sensitive_1a", "template");
10015 string[] skillList = split(templateSkills, ',');
10016 setWorkingSkill(player, skillList[0]);
10018 respec.autoLevelPlayer(player, 26, false);
10019 skill.recalcPlayerPools(player, true);
10021 int questId = questGetQuestId("quest/naboo_theed_goto_pooja");
10022 int result = questActivateQuest(questId, player, self);
10023 badge.grantBadge(player, "bdg_content_rsf_clearance_4");
10025 sendSystemMessageTestingOnly(player, "Level 26 Gear Issued!");
10031 float[] weaponMinDamage = { 545f, 545f, 545f };
10032 float[] weaponMaxDamage = { 1100f, 1100f, 1100f };
10033 float[] weaponAttackSpeed = { 1f, 1f, 1f };
10034 float weaponWoundChance = 1.0f;
10035 float weaponForceCost = 0.0f;
10036 float weaponAttackCost = 1f;
10037 generateGenerationSabers(4, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
10038 jedi.createColorCrystal(pInv, rand(0, 11));
10040 for (int i = 0; i < 4; i++)
10042 static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
10045 static_item.createNewItemFunction("item_jedi_robe_dark_04_04", pInv);
10046 static_item.createNewItemFunction("item_jedi_robe_light_04_04", pInv);
10048 revokeAllSkills(player);
10049 int currentCombatXp = getExperiencePoints(player, "combat_general");
10050 grantExperiencePoints(player, "combat_general", -currentCombatXp);
10051 setSkillTemplate(player, "force_sensitive_1a");
10052 string templateSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, "force_sensitive_1a", "template");
10053 string[] skillList = split(templateSkills, ',');
10054 setWorkingSkill(player, skillList[0]);
10056 respec.autoLevelPlayer(player, 75, false);
10057 skill.recalcPlayerPools(player, true);
10058 sendSystemMessageTestingOnly(player, "Level 75 Gear Issued!");
10062 cleanScriptVars(player);
10063 return SCRIPT_CONTINUE;
10067 refreshMenu( player, "Select the desired armor option", "Character Builder Terminal", JEDI_PLAYTEST_OPTIONS, "handleSaberSelect", false);
10068 return SCRIPT_CONTINUE;
10072 void generateGenerationSabers (int generation, obj_id player, obj_id pInv, float[] weaponMinDamage, float[] weaponMaxDamage, float[] weaponAttackSpeed, float weaponWoundChance, float weaponForceCost,float weaponAttackCost)
10075 if (generation <1 || generation >5)
10077 saber = new string[1];
10078 saber[0] = "object/weapon/melee/sword/crafted_saber/sword_lightsaber_training.iff";
10082 saber = new string[3];
10083 saber[0] = "object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen"+ generation +".iff";
10084 saber[1] = "object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen"+ generation +".iff";
10085 saber[2] = "object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen"+ generation +".iff";
10087 if (saber.length != weaponMinDamage.length || saber.length != weaponMaxDamage.length || saber.length != weaponAttackSpeed.length)
10092 for (int i = 0; i < saber.length; i++)
10094 obj_id saberObj = createObject(saber[i], pInv, "");
10095 if (!isIdValid (saberObj))
10100 setWeaponMinDamage(saberObj, (int)(weaponMinDamage[i]));
10101 setWeaponMaxDamage(saberObj, (int)(weaponMaxDamage[i]));
10102 setWeaponAttackSpeed(saberObj, weaponAttackSpeed[i]);
10103 setWeaponAttackCost(saberObj, (int)weaponAttackCost);
10104 setWeaponWoundChance(saberObj, weaponWoundChance);
10106 setConversionId(saberObj,weapons.CONVERSION_VERSION);
10108 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_MIN_DMG, (int)weaponMinDamage[i]);
10109 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_MAX_DMG, (int)weaponMaxDamage[i]);
10110 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_SPEED, weaponAttackSpeed[i]);
10112 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_WOUND, weaponWoundChance);
10113 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_RADIUS, getWeaponDamageRadius (saberObj));
10114 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_ATTACK_COST, getWeaponAttackCost(saberObj));
10115 setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_ACCURACY, getWeaponAccuracy (saberObj));
10117 //setObjVar(saberObj, jedi.VAR_SABER_BASE + "." + jedi.VAR_FORCE, weaponForceCost);
10118 //setObjVar(saberObj, jedi.VAR_SABER_DEFAULT_STATS + "." + jedi.VAR_FORCE, weaponForceCost);
10119 setWeaponRangeInfo(saberObj, 0.0f, 5.0f);
10120 setWeaponDamageType (saberObj, DAMAGE_ENERGY);
10121 setCraftedId(saberObj, saberObj);
10122 setCrafter(saberObj, player);
10123 setSocketsUp(saberObj);
10124 weapons.setWeaponData(saberObj);
10128 //===================================================================
10129 // Launch function and other supporting functions for space mining testing
10130 //======================================
10132 void launch(obj_id player, obj_id ship, obj_id[] membersApprovedByShipOwner, location warpLocation, location groundLoc)
10134 //sendSystemMessageTestingOnly(player, "(unlocalized) Launching...");
10135 space_transition.clearOvertStatus(ship);
10136 resizeable obj_id[] groupMembersToWarp = utils.addElement(null, player);
10137 resizeable int[] groupMemberStartIndex = utils.addElement(null, 0);
10138 utils.setScriptVar(player, "strLaunchPointName", "launching");
10139 resizeable location[] shipStartLocations = space_transition.getShipStartLocations(ship);
10140 if (shipStartLocations != null && shipStartLocations.length > 0)
10142 int startIndex = 0;
10143 location playerLoc = getLocation(player);
10144 if (isIdValid(playerLoc.cell))
10146 obj_id group = getGroupObject(player);
10147 if (isIdValid(group))
10149 obj_id[] groupMembers = getGroupMemberIds(group);
10150 for (int i = 0; i < groupMembers.length; ++i)
10152 if (groupMembers[i] != player
10153 && exists(groupMembers[i])
10154 && getLocation(groupMembers[i]).cell == playerLoc.cell
10155 && groupMemberApproved(membersApprovedByShipOwner, groupMembers[i]))
10158 startIndex = getNextStartIndex(shipStartLocations, startIndex);
10159 if (startIndex <= shipStartLocations.length)
10161 groupMembersToWarp = utils.addElement(groupMembersToWarp, groupMembers[i]);
10162 groupMemberStartIndex = utils.addElement(groupMemberStartIndex, startIndex);
10167 string_id strSpam = new string_id("space/space_interaction", "no_space_expansion");
10168 sendSystemMessage(groupMembers[i], strSpam);
10176 for (int i = 0; i < groupMembersToWarp.length; ++i)
10178 space_transition.setLaunchInfo(groupMembersToWarp[i], ship, groupMemberStartIndex[i], groundLoc);
10180 groupMembersToWarp[i],
10182 warpLocation.x, warpLocation.y, warpLocation.z,
10184 warpLocation.x, warpLocation.y, warpLocation.z);
10186 //sendSystemMessageTestingOnly(player, "(unlocalized) Finishing launch sequence...");
10189 int getNextStartIndex(resizeable location[] shipStartLocations, int lastStartIndex)
10191 int startIndex = lastStartIndex+1;
10193 // If we have more players than start locations, see if we have any start
10194 // locations in cells and reuse those. We assume that all start locations
10195 // not in cells come at the beginning of the list.
10197 if (startIndex > shipStartLocations.length)
10199 for (startIndex = 1; startIndex <= shipStartLocations.length; ++startIndex)
10200 if (shipStartLocations[startIndex-1].cell != null)
10207 boolean groupMemberApproved(obj_id[] membersApprovedByShipOwner, obj_id memberToTest)
10209 for (int i = 0; i < membersApprovedByShipOwner.length; ++i)
10211 if (membersApprovedByShipOwner[i] == memberToTest)
10219 //--- CYBERNETICS ------------
10220 void handleCyberneticsOption( obj_id player )
10222 obj_id inv = utils.getInventoryContainer(player);
10223 if ( !isIdValid( inv ) )
10226 for ( int i = 0; i < CYBERNETIC_ITEMS.length; ++i )
10228 createObject(CYBERNETIC_ITEMS[i], inv, "");
10230 sendSystemMessageTestingOnly( player, "Cybernetics issued. Pay a cybernetic Engineer to install the items" );
10231 sendSystemMessageTestingOnly( player, "Locate the cybernetic engineer on the 2nd floor of a medical center" );
10232 location warpLocation = getLocation( player );
10233 warpLocation.area = "tatooine";
10234 warpLocation.x = 1305f;
10235 warpLocation.y = 7f;
10236 warpLocation.z = 3261f;
10237 warpPlayer( player, warpLocation.area, warpLocation.x, warpLocation.y, warpLocation.z, null, 0.0f, 0.0f, 0.0f);
10240 // Refresh Function
10242 void refreshMenu ( obj_id player, string prompt, string title, string[] options, string myHandler, boolean draw)
10244 obj_id self = getSelf();
10245 closeOldWindow(player);
10247 if(outOfRange(self , player, true))
10249 cleanScriptVars(player);
10255 int pid = sui.listbox(self, player, prompt, sui.OK_CANCEL_REFRESH, title, options, myHandler, false, false);
10256 sui.listboxUseOtherButton(pid, "Back");
10257 sui.showSUIPage(pid);
10258 setWindowPid(player, pid);
10263 int pid = sui.listbox(self, player, prompt, sui.OK_CANCEL, title, options, myHandler, true, false);
10264 sui.showSUIPage(pid);
10265 setWindowPid(player, pid);
10270 boolean outOfRange(obj_id self, obj_id player, boolean message)
10272 //gods override range checks
10276 location a = getLocation(self);
10277 location b = getLocation(player);
10278 if (a.cell == b.cell && a.distance(b) < 8.0f)
10282 sendSystemMessageTestingOnly(player, "Out of Range of Character Builder Terminal.");
10288 //===================================================================
10289 // Publish Section //===================================================
10290 void handlePublishOption(obj_id player)
10292 refreshMenu ( player, "Select the desired Publish 27 option", "Character Builder Terminal", PUBLISH_OPTIONS, "handlePublishOptions", false);
10295 messageHandler handlePublishOptions()
10297 if ( (params == null) || (params.isEmpty()) )
10299 //cleanScriptVars(player);
10300 return SCRIPT_CONTINUE;
10303 obj_id player = sui.getPlayerId(params);
10304 obj_id pInv = utils.getInventoryContainer(player);
10305 int btn = sui.getIntButtonPressed(params);
10306 int idx = sui.getListboxSelectedRow(params);
10310 if ( btn == sui.BP_REVERT )
10312 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
10313 return SCRIPT_CONTINUE;
10316 if(btn == sui.BP_CANCEL)
10318 cleanScriptVars(player);
10319 closeOldWindow(player);
10320 return SCRIPT_CONTINUE;
10323 if ( idx == -1 || idx > PUBLISH_OPTIONS.length)
10325 cleanScriptVars(player);
10326 closeOldWindow(player);
10327 return SCRIPT_CONTINUE;
10329 //make sure player is Valid
10330 if(!isIdValid(player))
10332 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10333 cleanScriptVars(player);
10334 return SCRIPT_OVERRIDE;
10336 //make sure player's inventory is valid
10337 if (!isIdValid(pInv))
10339 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10340 cleanScriptVars(player);
10341 return SCRIPT_OVERRIDE;
10343 //make sure there is room in player's inventory
10344 if (getVolumeFree(pInv) <= 12)
10346 sendSystemMessageTestingOnly(player, "Your Inventory has less than 12 slots, please make room and try again.");
10347 cleanScriptVars(player);
10348 return SCRIPT_OVERRIDE;
10357 for(int i = 0; i < PUB27_HEAVYPACK.length; i++)
10359 if(PUB27_HEAVYPACK[i].startsWith("object"))
10361 weapons.createWeapon(PUB27_HEAVYPACK[i], pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
10365 static_item.createNewItemFunction(PUB27_HEAVYPACK[i], pInv);
10369 string template = getSkillTemplate(player);
10370 if (!template.startsWith("trader") && !template.startsWith("entertainer"))
10372 if (!isGod(player))
10373 respec.autoLevelPlayer(player, 88, false);
10377 sendSystemMessageTestingOnly(player, "Heavy Weapons Pack Issued!");
10381 float[] weaponMinDamage = { 239f, 239f, 239f };
10382 float[] weaponMaxDamage = { 477f, 477f, 477f };
10383 float[] weaponAttackSpeed = { .5f, .5f, .5f };
10384 float weaponWoundChance = 1.0f;
10385 float weaponForceCost = 0.0f;
10386 float weaponAttackCost = 1f;
10387 generateGenerationSabers(4, player, pInv, weaponMinDamage, weaponMaxDamage, weaponAttackSpeed, weaponWoundChance,weaponForceCost,weaponAttackCost);
10388 jedi.createColorCrystal(pInv, rand(0, 11));
10390 for (int i = 0; i < 4; i++)
10392 static_item.createNewItemFunction("item_krayt_pearl_04_16", pInv);
10395 static_item.createNewItemFunction("item_jedi_robe_dark_03_03", pInv);
10396 static_item.createNewItemFunction("item_jedi_robe_light_03_03", pInv);
10398 revokeAllSkills(player);
10399 int currentCombatXp = getExperiencePoints(player, "combat_general");
10400 grantExperiencePoints(player, "combat_general", -currentCombatXp);
10401 setSkillTemplate(player, "force_sensitive_1a");
10402 string templateSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, "force_sensitive_1a", "template");
10403 string[] skillList = split(templateSkills, ',');
10404 setWorkingSkill(player, skillList[0]);
10406 respec.autoLevelPlayer(player, 88, false);
10407 skill.recalcPlayerPools(player, true);
10408 sendSystemMessageTestingOnly(player, "Level 78 Gear Issued!");
10413 for(int i = 0; i < PUB27_TRAPS.length; i++)
10415 stealth.createRangerLoot(100, PUB27_TRAPS[i], pInv, 100);
10418 sendSystemMessageTestingOnly(player, "Traps Issued!");
10424 setObjVar(player, "mand.acknowledge", true);
10425 sendSystemMessageTestingOnly(player, "Death Watch Bunker Access Granted!");
10429 for(int i = 0; i < PUB27_CAMOSTUFF.length; i++)
10431 static_item.createNewItemFunction(PUB27_CAMOSTUFF[i],pInv);
10433 sendSystemMessageTestingOnly(player, "Spy Gear Issued!");
10436 cleanScriptVars(player);
10437 return SCRIPT_CONTINUE;
10441 refreshMenu (player, "Select the desired option", "Character Builder Terminal", PUBLISH_OPTIONS, "handlePublishOptions", false);
10442 return SCRIPT_CONTINUE;
10445 void flagAllHeroicInstances(obj_id player)
10447 string[] instanceFlags = dataTableGetStringColumn(instance.INSTANCE_DATATABLE, "key_required");
10448 if ( instanceFlags != null && instanceFlags.length > 0 )
10450 for ( int i = 0; i < instanceFlags.length; i++ )
10452 string flag = instanceFlags[i];
10453 if ( flag != null && flag.length() > 0 )
10455 instance.flagPlayerForInstance(player, flag);
10459 sendSystemMessageTestingOnly(player, "All Heroic Instances Flagged");
10463 sendSystemMessageTestingOnly(player, "No Instance Flags Found.");
10467 //---------------------
10468 //Function to reset ship component stats to stats that exist in a table.
10469 //---------------------
10470 obj_id tweakSpaceShipComponent(obj_id objComponent)
10472 string strComponentType = space_crafting.getShipComponentStringType(objComponent);
10474 if(strComponentType == null)
10476 LOG("tweakSpaceShipComponent", "MAJOR MESSUP! " + objComponent + " is 9 kinds of messed up");
10477 setName(objComponent, "BAD COMPONENT: " + getTemplateName(objComponent) + " : PLEASE REPORT BUG");
10481 if(strComponentType != "")
10484 dictionary dctParams = dataTableGetRow("datatables/ship/components/character_builder/frog_" + strComponentType + ".iff", getTemplateName(objComponent));
10486 if(dctParams == null)
10488 LOG("tweakSpaceShipComponent", "TEMPLATE OF TYPE " + getTemplateName(objComponent) + " HAS BEEN PASSED TO SETUP SPACE COMPONENT. THIS DOES NOT EXIST IN THE DATATBLE of " + "datatables/ship/components/" + strComponentType + ".iff");
10492 if(strComponentType == "armor")
10494 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10495 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10496 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10498 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10499 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10500 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10502 float fltMass = dctParams.getFloat("fltMass");
10503 space_crafting.setComponentMass(objComponent, fltMass);
10505 setComponentObjVar(objComponent, "character.builder", 1);
10506 string newName = dctParams.getString("strName");
10507 setName(objComponent, newName);
10509 else if(strComponentType == "booster")
10511 LOG("tweakSpaceShipComponent", "BOOSTER" + getTemplateName(objComponent));
10513 float fltMaximumEnergy = dctParams.getFloat("fltMaximumEnergy");
10514 space_crafting.setBoosterMaximumEnergy(objComponent, fltMaximumEnergy);
10515 space_crafting.setBoosterCurrentEnergy(objComponent, fltMaximumEnergy);
10517 float fltRechargeRate = dctParams.getFloat("fltRechargeRate");
10518 space_crafting.setBoosterEnergyRechargeRate(objComponent, fltRechargeRate);
10520 float fltConsumptionRate = dctParams.getFloat("fltConsumptionRate");
10521 space_crafting.setBoosterEnergyConsumptionRate(objComponent, fltConsumptionRate);
10523 float fltAcceleration = dctParams.getFloat("fltAcceleration");
10524 space_crafting.setBoosterAcceleration(objComponent, fltAcceleration);
10526 float fltMaxSpeed = dctParams.getFloat("fltMaxSpeed");
10527 space_crafting.setBoosterMaximumSpeed(objComponent, fltMaxSpeed);
10529 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10530 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10531 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10533 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10534 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10535 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10537 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10538 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10540 float fltMass = dctParams.getFloat("fltMass");
10541 space_crafting.setComponentMass(objComponent, fltMass);
10543 setComponentObjVar(objComponent, "character.builder", 1);
10544 string newName = dctParams.getString("strName");
10545 setName(objComponent, newName);
10547 else if(strComponentType == "cargo_hold")
10549 LOG("tweakSpaceShipComponent", "CARGO HOLD" + getTemplateName(objComponent));
10551 int intCargoHoldCapacity = dctParams.getInt("intCargoHoldCapacity");
10552 space_crafting.setCargoHoldMaxCapacity(objComponent, intCargoHoldCapacity);
10554 setComponentObjVar(objComponent, "character.builder", 1);
10555 string newName = dctParams.getString("strName");
10556 setName(objComponent, newName);
10558 else if(strComponentType == "droid_interface")
10560 LOG("tweakSpaceShipComponent", "DROID INTERFACE" + getTemplateName(objComponent));
10562 float fltCommandSpeed = dctParams.getFloat("fltCommandSpeed");
10563 space_crafting.setDroidInterfaceCommandSpeed(objComponent, fltCommandSpeed);
10565 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10566 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10567 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10569 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10570 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10571 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10573 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10574 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10576 float fltMass = dctParams.getFloat("fltMass");
10577 space_crafting.setComponentMass(objComponent, fltMass);
10579 setComponentObjVar(objComponent, "character.builder", 1);
10580 string newName = dctParams.getString("strName");
10581 setName(objComponent, newName);
10583 else if(strComponentType == "engine")
10585 LOG("tweakSpaceShipComponent", "ENGINE" + getTemplateName(objComponent));
10587 float fltMaxSpeed = dctParams.getFloat("fltMaxSpeed");
10588 space_crafting.setEngineMaximumSpeed(objComponent, fltMaxSpeed);
10590 float fltMaxPitch = dctParams.getFloat("fltMaxPitch");
10591 space_crafting.setEngineMaximumPitch(objComponent, fltMaxPitch);
10593 float fltMaxRoll = dctParams.getFloat("fltMaxRoll");
10594 space_crafting.setEngineMaximumRoll(objComponent, fltMaxRoll);
10596 float fltMaxYaw = dctParams.getFloat("fltMaxYaw");
10597 space_crafting.setEngineMaximumYaw(objComponent, fltMaxYaw);
10599 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10600 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10601 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10603 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10604 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10605 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10607 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10608 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10610 float fltMass = dctParams.getFloat("fltMass");
10611 space_crafting.setComponentMass(objComponent, fltMass);
10613 setComponentObjVar(objComponent, "character.builder", 1);
10614 string newName = dctParams.getString("strName");
10615 setName(objComponent, newName);
10617 else if(strComponentType == "reactor")
10619 LOG("tweakSpaceShipComponent", "REACTOR" + getTemplateName(objComponent));
10621 float fltEnergyGeneration = dctParams.getFloat("fltEnergyGeneration");
10622 space_crafting.setReactorEnergyGeneration(objComponent, fltEnergyGeneration);
10624 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10625 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10626 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10628 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10629 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10630 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10632 float fltMass = dctParams.getFloat("fltMass");
10633 space_crafting.setComponentMass(objComponent, fltMass);
10635 setComponentObjVar(objComponent, "character.builder", 1);
10636 string newName = dctParams.getString("strName");
10637 setName(objComponent, newName);
10639 else if(strComponentType == "shield")
10641 LOG("tweakSpaceShipComponent", "SHIELD" + getTemplateName(objComponent));
10643 float fltShieldHitpointsMaximumFront = dctParams.getFloat("fltShieldHitpointsMaximumFront");
10644 float fltShieldHitpointsMaximumBack = dctParams.getFloat("fltShieldHitpointsMaximumFront");
10645 space_crafting.setShieldGeneratorCurrentFrontHitpoints(objComponent, 0f);
10646 space_crafting.setShieldGeneratorCurrentBackHitpoints(objComponent, 0f); // 0 because it's turned off
10647 space_crafting.setShieldGeneratorMaximumFrontHitpoints(objComponent, fltShieldHitpointsMaximumFront);
10648 space_crafting.setShieldGeneratorMaximumBackHitpoints(objComponent, fltShieldHitpointsMaximumBack);
10650 float fltShieldRechargeRate = dctParams.getFloat("fltShieldRechargeRate");
10651 space_crafting.setShieldGeneratorRechargeRate(objComponent, fltShieldRechargeRate);
10653 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10654 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10655 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10657 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10658 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10659 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10661 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10662 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10664 float fltMass = dctParams.getFloat("fltMass");
10665 space_crafting.setComponentMass(objComponent, fltMass);
10667 setComponentObjVar(objComponent, "character.builder", 1);
10668 string newName = dctParams.getString("strName");
10669 setName(objComponent, newName);
10671 else if(strComponentType == "weapon")
10673 float fltMinDamage = dctParams.getFloat("fltMinDamage");
10674 space_crafting.setWeaponMinimumDamage(objComponent, fltMinDamage);
10676 float fltMaxDamage = dctParams.getFloat("fltMaxDamage");
10677 space_crafting.setWeaponMaximumDamage(objComponent, fltMaxDamage);
10679 float fltShieldEffectiveness = dctParams.getFloat("fltShieldEffectiveness");
10680 space_crafting.setWeaponShieldEffectiveness(objComponent, fltShieldEffectiveness);
10682 float fltArmorEffectiveness = dctParams.getFloat("fltArmorEffectiveness");
10683 space_crafting.setWeaponArmorEffectiveness(objComponent, fltArmorEffectiveness);
10685 float fltEnergyPerShot = dctParams.getFloat("fltEnergyPerShot");
10686 space_crafting.setWeaponEnergyPerShot(objComponent, fltEnergyPerShot);
10688 float fltRefireRate = dctParams.getFloat("fltRefireRate");
10689 space_crafting.setWeaponRefireRate(objComponent, fltRefireRate);
10691 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10692 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10693 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10695 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10696 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10697 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10699 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10700 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10702 float fltMass = dctParams.getFloat("fltMass");
10703 space_crafting.setComponentMass(objComponent, fltMass);
10705 setComponentObjVar(objComponent, "character.builder", 1);
10706 string newName = dctParams.getString("strName");
10707 setName(objComponent, newName);
10709 else if(strComponentType == "capacitor")
10711 LOG("tweakSpaceShipComponent", "CAPACITOR" + getTemplateName(objComponent));
10713 float fltMaxEnergy = dctParams.getFloat("fltMaxEnergy");
10714 space_crafting.setWeaponCapacitorMaximumEnergy(objComponent, fltMaxEnergy);
10715 space_crafting.setWeaponCapacitorCurrentEnergy(objComponent, fltMaxEnergy);
10717 float fltRechargeRate = dctParams.getFloat("fltRechargeRate");
10718 space_crafting.setWeaponCapacitorRechargeRate(objComponent, fltRechargeRate);
10719 float fltMaximumHitpoints = dctParams.getFloat("fltMaximumHitpoints");
10720 space_crafting.setComponentCurrentHitpoints(objComponent, fltMaximumHitpoints);
10721 space_crafting.setComponentMaximumHitpoints(objComponent, fltMaximumHitpoints);
10723 float fltMaximumArmorHitpoints = dctParams.getFloat("fltMaximumArmorHitpoints");
10724 space_crafting.setComponentCurrentArmorHitpoints(objComponent, fltMaximumHitpoints);
10725 space_crafting.setComponentMaximumArmorHitpoints(objComponent, fltMaximumHitpoints);
10727 float fltEnergyMaintenance = dctParams.getFloat("fltEnergyMaintenance");
10728 space_crafting.setComponentEnergyMaintenance(objComponent, fltEnergyMaintenance);
10730 float fltMass = dctParams.getFloat("fltMass");
10731 space_crafting.setComponentMass(objComponent, fltMass);
10733 setComponentObjVar(objComponent, "character.builder", 1);
10734 string newName = dctParams.getString("strName");
10735 setName(objComponent, newName);
10737 return objComponent;
10741 LOG("tweakSpaceShipComponent", "MAJOR MESSUP! " + objComponent + " could not be modified as it was not valid");
10746 boolean setComponentObjVar(obj_id objComponent, string objVarName, float fltValue)
10748 return setObjVar(objComponent, objVarName, fltValue);
10751 boolean issueShipChassis(obj_id player, int idx)
10753 if (!isIdValid(player))
10756 LOG("issueShipChassis", "idx = " + idx);
10761 LOG("issueShipChassis", "issueShipChassis function");
10764 string type = dataTableGetString(SHIP_CHASSIS_TBL, idx, "shipType");
10765 //get the skill needed
10766 string skill = dataTableGetString(SHIP_CHASSIS_TBL, type, "skill");
10768 float mass = dataTableGetFloat(SHIP_CHASSIS_TBL, idx, "fltMass");
10770 float hp = dataTableGetFloat(SHIP_CHASSIS_TBL, idx, "fltHitPoints");
10772 LOG("issueShipChassis", "SKILL: " + skill);
10774 if (type.equals("firespray") || type.equals("yt2400"))
10776 if (hasSkill(player, "pilot_rebel_navy_master") || !hasSkill(player, "pilot_imperial_navy_master") || !hasSkill(player, "pilot_neutral_master"))
10778 giveShipChassis(player, type, mass, hp);
10781 sendSystemMessageTestingOnly(player, "You cannot use the Firespray due to certification requirements. Skill Required is: " + skill);
10785 if (!hasSkill(player, skill))
10787 sendSystemMessageTestingOnly(player, "You cannot use this ship due to certification requirements. Skill Required is: " + skill);
10791 giveShipChassis(player, type, mass, hp);
10795 boolean giveShipChassis(obj_id player, string type, float mass, float hp)
10797 if (!isIdValid(player))
10800 if (type == null || type.equals(""))
10803 if (mass < 0 || hp < 0)
10806 obj_id pInv = utils.getInventoryContainer(player);
10808 obj_id pcd = space_crafting.createDeedFromBlueprints(player, type, pInv, mass, hp);
10809 if (!isIdValid(pcd))
10812 sendSystemMessageTestingOnly(player, "The ship was not created due to error.");
10813 LOG("issueShipChassis", "CHASSIS" + type + " IS BAD");
10818 sendSystemMessageTestingOnly(player, "Chassis Issued.");
10822 void handleDraftSchematicsOption(obj_id player)
10824 refreshMenu(player, "Select the desired crafting profession", "Character Builder Terminal", CRAFTING_PROFESSIONS, "handleDraftSchematicsList", false);
10827 messageHandler handleDraftSchematicsList()
10829 if(params == null || params.isEmpty())
10831 //cleanScriptVars(player);
10832 return SCRIPT_CONTINUE;
10835 obj_id player = sui.getPlayerId(params);
10837 int btn = sui.getIntButtonPressed(params);
10838 int idx = sui.getListboxSelectedRow(params);
10840 if(btn == sui.BP_REVERT)
10842 startCharacterBuilder(player);
10843 return SCRIPT_CONTINUE;
10846 if(btn == sui.BP_CANCEL)
10848 cleanScriptVars(player);
10849 closeOldWindow(player);
10850 return SCRIPT_CONTINUE;
10853 if(idx == -1 || idx > CRAFTING_SKILL_TEMPLATES.length)
10855 cleanScriptVars(player);
10856 return SCRIPT_CONTINUE;
10859 //make sure player is Valid
10860 if(!isIdValid(player) || !isGod(player))
10862 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10863 cleanScriptVars(player);
10864 return SCRIPT_OVERRIDE;
10868 string[] skillList = skill_template.getSkillTemplateSkillsByTemplateName(CRAFTING_SKILL_TEMPLATES[idx]);
10870 // Get schematic groups from skills
10871 string[] schematicGroups = craftinglib.getDraftSchematicGroupsFromSkills(skillList);
10873 // Get schematics from schematic groups
10874 string[] schematics = craftinglib.getDraftSchematicsFromGroups(schematicGroups);
10876 // Get schematic names from templates (we can't do this currently, but it would be nice)
10879 Arrays.sort(schematics);
10881 utils.setScriptVar(player, "character_builder.schematicsList", schematics);
10883 float craftPercentage = 100.0f;
10885 if(!utils.hasScriptVar(player, "character_builder.qualityPercentage"))
10887 utils.setScriptVar(player, "character_builder.qualityPercentage", 100.0f);
10891 craftPercentage = utils.getFloatScriptVar(player, "character_builder.qualityPercentage");
10894 if(utils.hasScriptVar(player, "character_builder.qualityPercentagePID"))
10896 int oldpid = utils.getIntScriptVar(player, "character_builder.qualityPercentagePID");
10897 sui.closeSUI(player, oldpid);
10900 // List the schematics
10901 refreshMenu(player, "Select a profession draft schematic. Schematics that require items in addition to resources may not be crafted properly (armor, weapons, droids). Instead, use this to select the items required for their schematic and then use the crafting tool.", "Character Builder Terminal", schematics, "handleSchematicSelect", false);
10902 int pid = sui.inputbox(self, player, "A high crafting percentage can result in a crafted item that players cannot create legally.", sui.OK_CANCEL, "Crafting Percentage", sui.INPUT_NORMAL, null, "handleCraftQualityPercentage", null);
10904 utils.setScriptVar(player, "character_builder.qualityPercentagePID", pid);
10906 return SCRIPT_CONTINUE;
10909 messageHandler handleCraftQualityPercentage()
10911 obj_id player = sui.getPlayerId(params);
10912 string stringPercentage = sui.getInputBoxText(params);
10913 int btn = sui.getIntButtonPressed(params);
10915 if(btn == sui.BP_CANCEL)
10917 return SCRIPT_CONTINUE;
10920 //make sure player is Valid
10921 if(!isIdValid(player) || !isGod(player))
10923 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10924 return SCRIPT_OVERRIDE;
10927 float floatPercentage = utils.stringToFloat(stringPercentage);
10929 if(floatPercentage > 100.0f || floatPercentage < 0.0f)
10931 sendSystemMessageTestingOnly(player, "Bad Crafting Percentage.");
10932 return SCRIPT_OVERRIDE;
10935 utils.setScriptVar(player, "character_builder.qualityPercentage", floatPercentage);
10937 return SCRIPT_CONTINUE;
10940 messageHandler handleSchematicSelect()
10942 if(params == null || params.isEmpty())
10944 //cleanScriptVars(player);
10945 return SCRIPT_CONTINUE;
10948 obj_id player = sui.getPlayerId(params);
10950 int btn = sui.getIntButtonPressed(params);
10951 int idx = sui.getListboxSelectedRow(params);
10953 if(btn == sui.BP_REVERT)
10955 handleDraftSchematicsOption(player);
10956 return SCRIPT_CONTINUE;
10959 if(btn == sui.BP_CANCEL)
10961 cleanScriptVars(player);
10962 closeOldWindow(player);
10963 return SCRIPT_CONTINUE;
10966 //make sure player is Valid
10967 if(!isIdValid(player) || !isGod(player))
10969 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10970 cleanScriptVars(player);
10971 return SCRIPT_OVERRIDE;
10974 string[] schematics = utils.getStringArrayScriptVar(player, "character_builder.schematicsList");
10976 if(schematics == null || schematics.length <= 0)
10978 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10979 cleanScriptVars(player);
10980 return SCRIPT_OVERRIDE;
10983 float craftPercentage = 100.0f;
10985 if(utils.hasScriptVar(player, "character_builder.qualityPercentage"))
10987 craftPercentage = utils.getFloatScriptVar(player, "character_builder.qualityPercentage");
10990 obj_id container = utils.getInventoryContainer(player);
10992 obj_id craftedItem = makeCraftedItem(schematics[idx], craftPercentage, container);
10994 if(isIdValid(craftedItem))
10996 sendSystemMessageTestingOnly(player, "Making: " + getName(craftedItem));
11000 sendSystemMessageTestingOnly(player, "Failed to make: " + schematics[idx]);
11003 if(utils.hasScriptVar(player, "character_builder.qualityPercentagePID"))
11005 int oldpid = utils.getIntScriptVar(player, "character_builder.qualityPercentagePID");
11006 sui.closeSUI(player, oldpid);
11009 // List the schematics
11010 refreshMenu(player, "Select the draft schematic. Schematics that require items in addition to resources may not be crafted properly (armor, weapons, droids). Instead, use this to select the items required for their schematic and then use the crafting tool.", "Character Builder Terminal", schematics, "handleSchematicSelect", false);
11011 int pid = sui.inputbox(self, player, "A high crafting percentage can result in a crafted item that players cannot create legally.", sui.OK_CANCEL, "A high crafting percentage ", sui.INPUT_NORMAL, null, "handleCraftQualityPercentage", null);
11013 utils.setScriptVar(player, "character_builder.qualityPercentagePID", pid);
11015 return SCRIPT_CONTINUE;
11019 void setSocketsUp(obj_id item)
11021 //items can only have 1 socket!
11022 setSkillModSockets(item, 1);
11023 setCondition(item, CONDITION_MAGIC_ITEM);
11027 void createSnowFlakeFrogWeapon(obj_id player, string weaponName)
11029 obj_id pInv = utils.getInventoryContainer(player);
11031 obj_id weaponObject = weapons.createWeapon(weaponName, pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
11032 if(isIdValid(weaponObject))
11034 setSocketsUp(weaponObject);
11035 sendSystemMessageTestingOnly(player, "Weapon Issued!");