more vehicles
[swg-src.git] / dsrc / sku.0 / sys.server / compiled / game / script / terminal / terminal_character_builder.script
blobef0b002b73743bd4bea86c41da6bbe7e46c41d0d
1 /* Title:        terminal_character_builder.script
2  * Description:  Script that drives the Character Builder Terminals
3 */
6 /***** INCLUDES ********************************************************/
7 include library.ai_lib;
8 include library.armor;
9 include library.beast_lib;
10 include library.buff;
11 include library.callable;
12 include library.chat;
13 include library.consumable;
14 include library.craftinglib;
15 include library.create;
16 include library.expertise;
17 include library.factions;
18 include library.gm;
19 include library.healing;
20 include library.incubator;
21 include library.instance;
22 include library.jedi;
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;
38 include library.sui;
39 include library.utils;
40 include library.weapons;
41 include library.performance;
46 Old Republic one/two handed lightsaber
47 Jinsu Razor
48 Juyo Saberstaff
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;
64 // Weapon Values
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 = {
100                                                                                 "Weapons",
101                                                                                 "Armor Sets",
102                                                                                 "Roadmap Skill Builder",
103                                                                                 "Resources",
104                                                                                 "Credits",
105                                                                                 "Faction",
106                                                                                 "Vehicles/Mounts/Beasts",
107                                                                                 "Ships",
108                                                                                 "Crafting Items",
109                                                                                 "Structure Deeds",
110                                                                                 "PA Halls",
111                                                                                 "Misc Items/Medicines",
112                                                                                 "Jedi Options",
113                                                                                 "Best Resource",
114                                                                                 "Flag for All Heroic Instances",
115                                                                                 "Draft Schematics"
116                                                                         };
117 const string[] RESOURCE_TYPES = {
118                                                                                 "Creature Resources",
119                                                                                 "Flora Resources",
120                                                                                 "Chemical",
121                                                                                 "Water",
122                                                                                 "Mineral",
123                                                                                 "Gas",
124                                                                                 "Energy",
125                                                                                 "Asteroid"
126                                                                         };
128 const string[] BEST_RESOURCE_TYPES = {
129                                                                                 "Creature Resources",
130                                                                                 "Flora Resources",
131                                                                                 "Chemical",
132                                                                                 "Water",
133                                                                                 "Mineral",
134                                                                                 "Gas",
135                                                                                 "Energy",
136                                                                                 "Asteroid",
137                                                                                 "Filter by specific attribute"
138                                                                         };
140 const string[] SPACE_RESOURCE_LOCALIZED =
141                                                                         {
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"
155                                                                         };
158 const string[] SPACE_RESOURCE_CONST =
159                                                                         {
160                                                                                 "space_chemical_acid",
161                                                                                 "space_chemical_cyanomethanic",
162                                                                                 "space_chemical_petrochem",
163                                                                                 "space_chemical_sulfuric",
164                                                                                 "space_gas_methane",
165                                                                                 "space_gas_organometallic",
166                                                                                 "space_gem_crystal",
167                                                                                 "space_gem_diamond",
168                                                                                 "space_metal_carbonaceous",
169                                                                                 "space_metal_ice",
170                                                                                 "space_metal_iron",
171                                                                                 "space_metal_obsidian",
172                                                                                 "space_metal_silicaceous"
173                                                                         };
175 const string[] RESOURCE_BASE_TYPES = {
176                                                                                 "creature_resources",
177                                                                                 "flora_resources",
178                                                                                 "chemical",
179                                                                                 "water",
180                                                                                 "mineral",
181                                                                                 "gas",
182                                                                                 "energy",
183                                                                                 "Asteroid"
184                                                                         };
185 const string[] VEHICLE_MOUNT_OPTIONS = {
186                                                                                 "Vehicles",
187                                                                                 "Mounts",
188                                                                                 "Beasts",
189                                                                                 "Make Beast Level 90",
190                                                                                 "Increase Beast Loyalty",
191                                                                                 "Master Taming Necklace"
192                                                                         };
193 const string[] VEHICLE_OPTIONS = {
194                                                                                 "Swoop",
195                                                                                 "Speederbike",
196                                                                                 "X34",
197                                                                                 "AB1",
198                                                                                 "V35",
199                                                                                 "XP38",
200                                                                                 "Barc Speeder",
201                                                                                 "AV21",
202                                                                                 "X31",
203                                                                                 "Flash Speeder",
204                                                                                 "Mechno Chair",
205                                                                                 "Sith Speeder",
206                                                                                 "Merr-Sonn JT-12 Jetpack",
207                                                                                 "RIC-920",
208                                                                                 "Republic Gunship",
209                                                                                 "XJ-2 Landpeeder
210                                                                         };
211 const string[] MOUNT_OPTIONS = {
212                                                                                 "Carrion Spat",
213                                                                                 "Kaduu",
214                                                                                 "Dewback",
215                                                                                 "Bol",
216                                                                                 "Falumpaset",
217                                                                                 "Brackaset",
218                                                                                 "Cu Pa - Creature Handler Version",
219                                                                                 "Bantha - Creature Handler Version"
220                                                                         };
222 const string[] BEAST_OPTIONS_FOR_PLAYERS = {
223                                                                                 "acklay",
224                                                                                 "angler",
225                                                                                 "bageraset",
226                                                                                 "bantha",
227                                                                                 "bark_mite",
228                                                                                 "baz_nitch",
229                                                                                 "bearded_jax",
230                                                                                 "blistmok",
231                                                                                 "blurrg",
232                                                                                 "boar_wolf",
233                                                                                 "bocatt",
234                                                                                 "bol",
235                                                                                 "bolle_bol",
236                                                                                 "bolma",
237                                                                                 "bolotaur",
238                                                                                 "bordok",
239                                                                                 "borgle",
240                                                                                 "brackaset",
241                                                                                 "capper_spineflap",
242                                                                                 "carrion_spat",
243                                                                                 "choku",
244                                                                                 "chuba",
245                                                                                 "condor_dragon",
246                                                                                 "corellian_butterfly",
247                                                                                 "corellian_sand_panther",
248                                                                                 "corellian_slice_hound",
249                                                                                 "crystal_snake",
250                                                                                 "cu_pa",
251                                                                                 "dalyrake",
252                                                                                 "dewback",
253                                                                                 "dune_lizard",
254                                                                                 "durni",
255                                                                                 "dwarf_nuna",
256                                                                                 "eopie",
257                                                                                 "falumpaset",
258                                                                                 "fambaa",
259                                                                                 "fanned_rawl",
260                                                                                 "flewt",
261                                                                                 "flit",
262                                                                                 "fynock",
263                                                                                 "gackle_bat",
264                                                                                 "gaping_spider",
265                                                                                 "gnort",
266                                                                                 "graul",
267                                                                                 "gronda",
268                                                                                 "gualama",
269                                                                                 "gubbur",
270                                                                                 "guf_drolg",
271                                                                                 "gulginaw",
272                                                                                 "gurk",
273                                                                                 "gurnaset",
274                                                                                 "gurreck",
275                                                                                 "hanadak",
276                                                                                 "hermit_spider",
277                                                                                 "horned_krevol",
278                                                                                 "horned_rasp",
279                                                                                 "huf_dun",
280                                                                                 "huurton",
281                                                                                 "ikopi",
282                                                                                 "jundak",
283                                                                                 "kaadu",
284                                                                                 "kai_tok",
285                                                                                 "kashyyyk_bantha",
286                                                                                 "kima",
287                                                                                 "kimogila",
288                                                                                 "kittle",
289                                                                                 "kliknik",
290                                                                                 "krahbu",
291                                                                                 "kubaza_beetle",
292                                                                                 "kusak",
293                                                                                 "kwi",
294                                                                                 "langlatch",
295                                                                                 "lantern_bird",
296                                                                                 "lava_flea",
297                                                                                 "malkloc",
298                                                                                 "mamien",
299                                                                                 "mawgax",
300                                                                                 "merek",
301                                                                                 "minstyngar",
302                                                                                 "mott",
303                                                                                 "mouf",
304                                                                                 "murra",
305                                                                                 "mutated_acklay",
306                                                                                 "mutated_boar",
307                                                                                 "mutated_borgax",
308                                                                                 "mutated_cat",
309                                                                                 "mutated_chuba_fly",
310                                                                                 "mutated_cu_pa",
311                                                                                 "mutated_dewback",
312                                                                                 "mutated_griffon",
313                                                                                 "mutated_jax",
314                                                                                 "mutated_quenker",
315                                                                                 "mutated_rancor",
316                                                                                 "mutated_slice_hound",
317                                                                                 "mutated_varasquactyl",
318                                                                                 "mynock",
319                                                                                 "narglatch",
320                                                                                 "nerf",
321                                                                                 "nuna",
322                                                                                 "peko_peko",
323                                                                                 "perlek",
324                                                                                 "pharple",
325                                                                                 "piket",
326                                                                                 "plumed_rasp",
327                                                                                 "pugoriss",
328                                                                                 "purbole",
329                                                                                 "quenker",
330                                                                                 "rancor",
331                                                                                 "remmer",
332                                                                                 "reptilian_flier",
333                                                                                 "roba",
334                                                                                 "rock_mite",
335                                                                                 "ronto",
336                                                                                 "salt_mynock",
337                                                                                 "sharnaff",
338                                                                                 "shaupaut",
339                                                                                 "shear_mite",
340                                                                                 "skreeg",
341                                                                                 "snorbal",
342                                                                                 "spined_puc",
343                                                                                 "spined_snake",
344                                                                                 "squall",
345                                                                                 "squill",
346                                                                                 "stintaril",
347                                                                                 "swirl_prong",
348                                                                                 "tanc_mite",
349                                                                                 "tanray",
350                                                                                 "tauntaun",
351                                                                                 "thune",
352                                                                                 "torton",
353                                                                                 "tulrus",
354                                                                                 "tusk_cat",
355                                                                                 "tybis",
356                                                                                 "uller",
357                                                                                 "varactyl",
358                                                                                 "veermok",
359                                                                                 "verne",
360                                                                                 "vesp",
361                                                                                 "vir_vur",
362                                                                                 "voritor_lizard",
363                                                                                 "vynock",
364                                                                                 "walluga",
365                                                                                 "wampa",
366                                                                                 "webweaver",
367                                                                                 "whisper_bird",
368                                                                                 "womp_rat",
369                                                                                 "woolamander",
370                                                                                 "worrt",
371                                                                                 "xandank",
372                                                                                 "zucca_boar"
375 const string[] BEAST_OPTIONS = {
376                                                                                 "acklay",
377                                                                                 "angler",
378                                                                                 "bageraset",
379                                                                                 "bantha",
380                                                                                 "bark_mite",
381                                                                                 "baz_nitch",
382                                                                                 "bearded_jax",
383                                                                                 "blistmok",
384                                                                                 "blurrg",
385                                                                                 "boar_wolf",
386                                                                                 "bocatt",
387                                                                                 "bol",
388                                                                                 "bolle_bol",
389                                                                                 "bolma",
390                                                                                 "bolotaur",
391                                                                                 "bordok",
392                                                                                 "borgle",
393                                                                                 "brackaset",
394                                                                                 "capper_spineflap",
395                                                                                 "carrion_spat",
396                                                                                 "choku",
397                                                                                 "chuba",
398                                                                                 "condor_dragon",
399                                                                                 "corellian_butterfly",
400                                                                                 "corellian_sand_panther",
401                                                                                 "corellian_slice_hound",
402                                                                                 "crystal_snake",
403                                                                                 "cu_pa",
404                                                                                 "dalyrake",
405                                                                                 "dewback",
406                                                                                 "dune_lizard",
407                                                                                 "durni",
408                                                                                 "dwarf_nuna",
409                                                                                 "eopie",
410                                                                                 "falumpaset",
411                                                                                 "fambaa",
412                                                                                 "fanned_rawl",
413                                                                                 "flewt",
414                                                                                 "flit",
415                                                                                 "fynock",
416                                                                                 "gackle_bat",
417                                                                                 "gaping_spider",
418                                                                                 "gnort",
419                                                                                 "graul",
420                                                                                 "gronda",
421                                                                                 "gualama",
422                                                                                 "gubbur",
423                                                                                 "guf_drolg",
424                                                                                 "gulginaw",
425                                                                                 "gurk",
426                                                                                 "gurnaset",
427                                                                                 "gurreck",
428                                                                                 "hanadak",
429                                                                                 "hermit_spider",
430                                                                                 "horned_krevol",
431                                                                                 "horned_rasp",
432                                                                                 "huf_dun",
433                                                                                 "huurton",
434                                                                                 "ikopi",
435                                                                                 "jundak",
436                                                                                 "kaadu",
437                                                                                 "kai_tok",
438                                                                                 "kashyyyk_bantha",
439                                                                                 "kima",
440                                                                                 "kimogila",
441                                                                                 "kittle",
442                                                                                 "kliknik",
443                                                                                 "krahbu",
444                                                                                 "kubaza_beetle",
445                                                                                 "kusak",
446                                                                                 "kwi",
447                                                                                 "langlatch",
448                                                                                 "lantern_bird",
449                                                                                 "lava_flea",
450                                                                                 "malkloc",
451                                                                                 "mamien",
452                                                                                 "mawgax",
453                                                                                 "merek",
454                                                                                 "minstyngar",
455                                                                                 "mott",
456                                                                                 "mouf",
457                                                                                 "murra",
458                                                                                 "mutated_acklay",
459                                                                                 "mutated_boar",
460                                                                                 "mutated_borgax",
461                                                                                 "mutated_cat",
462                                                                                 "mutated_chuba_fly",
463                                                                                 "mutated_cu_pa",
464                                                                                 "mutated_dewback",
465                                                                                 "mutated_griffon",
466                                                                                 "mutated_jax",
467                                                                                 "mutated_quenker",
468                                                                                 "mutated_rancor",
469                                                                                 "mutated_slice_hound",
470                                                                                 "mutated_varasquactyl",
471                                                                                 "mynock",
472                                                                                 "narglatch",
473                                                                                 "nerf",
474                                                                                 "nuna",
475                                                                                 "peko_peko",
476                                                                                 "perlek",
477                                                                                 "pharple",
478                                                                                 "piket",
479                                                                                 "plumed_rasp",
480                                                                                 "pugoriss",
481                                                                                 "purbole",
482                                                                                 "quenker",
483                                                                                 "rancor",
484                                                                                 "remmer",
485                                                                                 "reptilian_flier",
486                                                                                 "roba",
487                                                                                 "rock_mite",
488                                                                                 "ronto",
489                                                                                 "salt_mynock",
490                                                                                 "sharnaff",
491                                                                                 "shaupaut",
492                                                                                 "shear_mite",
493                                                                                 "skreeg",
494                                                                                 "snorbal",
495                                                                                 "spined_puc",
496                                                                                 "spined_snake",
497                                                                                 "squall",
498                                                                                 "squill",
499                                                                                 "stintaril",
500                                                                                 "swirl_prong",
501                                                                                 "tanc_mite",
502                                                                                 "tanray",
503                                                                                 "tauntaun",
504                                                                                 "thune",
505                                                                                 "torton",
506                                                                                 "tulrus",
507                                                                                 "tusk_cat",
508                                                                                 "tybis",
509                                                                                 "uller",
510                                                                                 "varactyl",
511                                                                                 "veermok",
512                                                                                 "verne",
513                                                                                 "vesp",
514                                                                                 "vir_vur",
515                                                                                 "voritor_lizard",
516                                                                                 "vynock",
517                                                                                 "walluga",
518                                                                                 "wampa",
519                                                                                 "webweaver",
520                                                                                 "whisper_bird",
521                                                                                 "womp_rat",
522                                                                                 "woolamander",
523                                                                                 "worrt",
524                                                                                 "xandank",
525                                                                                 "zucca_boar"
526                                                                         };
527 const string[] SHIP_OPTIONS = {
528                                                                                 "Rebel",
529                                                                                 "Imperial",
530                                                                                 "Freelance",
531                                                                                 "Other",
532                                                                                 "Parts",
533                                                                                 "Pilot Skills"
534                                                                         };
535 const string[] REBEL_SHIP_OPTIONS = {
536                                                                                 "Incom X4 Gunship",
537                                                                                 "Z95",
538                                                                                 "Y-Wing",
539                                                                                 "Y-Wing Longprobe",
540                                                                                 "X-Wing",
541                                                                                 "Advanced X-Wing",
542                                                                                 "A-Wing",
543                                                                                 "B-Wing",
544                                                                                 "YKL-37R Nova Courier"
545                                                                         };
546 const string[] REBEL_SHIP_TYPES = {
547                                                                                 "gunship_rebel",
548                                                                                 "z95",
549                                                                                 "ywing",
550                                                                                 "ywing_longprobe",
551                                                                                 "xwing",
552                                                                                 "advanced_xwing",
553                                                                                 "awing",
554                                                                                 "bwing",
555                                                                                 "ykl37r"
556                                                                         };
557 const string[] IMPERIAL_SHIP_OPTIONS = {
558                                                                                 "Imperial YE-4 Gunship",
559                                                                                 "TIE Fighter (Light Duty)",
560                                                                                 "TIE Fighter",
561                                                                                 "TIE/In",
562                                                                                 "TIE Interceptor",
563                                                                                 "TIE Bomber",
564                                                                                 "TIE Advanced",
565                                                                                 "TIE Aggressor",
566                                                                                 "TIE Interceptor (Imperial Guard)",
567                                                                                 "VT-49 Decimator"
568                                                                         };
569 const string[] IMPERIAL_SHIP_TYPES = {
570                                                                                 "gunship_imperial",
571                                                                                 "tie_light_duty",
572                                                                                 "tiefighter",
573                                                                                 "tie_in",
574                                                                                 "tieinterceptor",
575                                                                                 "tiebomber",
576                                                                                 "tieadvanced",
577                                                                                 "tieaggressor",
578                                                                                 "tieinterceptor_imperial_guard",
579                                                                                 "decimator"
580                                                                         };
581 const string[] FREELANCE_SHIP_OPTIONS = {
582                                                                                 "Blacksun AEG-77 Vigo Gunship",
583                                                                                 "Naboo N-1",
584                                                                                 "Scyk",
585                                                                                 "Dunelizard",
586                                                                                 "Kimogila",
587                                                                                 "Kihraxz",
588                                                                                 "Ixiyen",
589                                                                                 "Rihkxyrk",
590                                                                                 "Vaksai",
591                                                                                 "Krayt",
592                                                                         };
593 const string[] FREELANCE_SHIP_TYPES = {
594                                                                                 "gunship_neutral",
595                                                                                 "naboo_n1",
596                                                                                 "hutt_light_s01",
597                                                                                 "hutt_medium_s01",
598                                                                                 "hutt_heavy_s01",
599                                                                                 "blacksun_light_s01",
600                                                                                 "blacksun_medium_s01",
601                                                                                 "blacksun_heavy_s01",
602                                                                                 "blacksun_vaksai",
603                                                                                 "hutt_turret_ship",
604                                                                         };
605 const string[] OTHER_SHIP_OPTIONS = {
606                                                                                 "Sorosuub",
607                                                                                 "Eta-2 Actis (Jedi Starfighter)",
608                                                                                 "Belbullab-22 (Grievous' Starship)",
609                                                                                 "ARC-170",
610                                                                                 "KSE Firespray",
611                                                                                 "Y-8 Mining Ship",
612                                                                                 "YT-1300",
613                                                                                 "YT-2400"
614                                                                         };
615 const string[] OTHER_SHIP_TYPES = {
616                                                                                 "sorosuub_space_yacht",
617                                                                                 "jedi_starfighter",
618                                                                                 "grievous_starship",
619                                                                                 "arc170",
620                                                                                 "firespray",
621                                                                                 "y8_mining_ship",
622                                                                                 "yt1300",
623                                                                                 "yt2400"
624                                                                         };
625 const string[] MAIN_SHIP_OPTIONS = {
626                                                                                 "Ship Components",
627                                                                                 "Ship Chassis",
628                                                                                 "Gunship Collection Reward Schematics",
629                                                                                 "Component Schematics",
630                                                                                 "Pilot Skills"
631                                                                         };
633 const string[] PILOT_SKILLS = {                                                 "Master Imperial Pilot",
634                                                                                 "Master Rebel Pilot",
635                                                                                 "Neutral Pilot",
636                                                                                 "Revoke Pilot"
637                                                                         };
639 const string[] DEED_CRAFTING_OPTIONS = {
640                                                                                 "Deeds",
641                                                                                 "Crafting Items"
642                                                                         };
643 const string[] DEED_OPTIONS = {
644                                                                                 "Clothing Factory",
645                                                                                 "Food Factory",
646                                                                                 "Equipment Factory",
647                                                                                 "Structure Factory",
648                                                                                 "Generic House",
649                                                                                 "Small Tatooine House",
650                                                                                 "Small Naboo House",
651                                                                                 "Small Corellia House",
652                                                                                 "Merchant Tent",
653                                                                                 "Heavy Mineral Harvester",
654                                                                                 "Heavy Flora Harvester",
655                                                                                 "Heavy Gas Harvester",
656                                                                                 "Heavy Chemical Harvester",
657                                                                                 "Heavy Moisture Vaporator",
658                                                                                 "Fusion Reactor",
659                                                                                 "Corellia City Pack",
660                                                                                 "Naboo City Pack",
661                                                                                 "Tatooine City Pack"
663                                                                         };
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"
678                                                                         };
679 const string[] PA_OPTIONS = {
680                                                                                 "Generic PA Hall",
681                                                                                 "Tatooine PA Hall",
682                                                                                 "Naboo PA Hall",
683                                                                                 "Corellia PA Hall",
684                                                                                 "Tatooine City Hall",
685                                                                                 "Naboo City Hall",
686                                                                                 "Corellia City Hall"
688                                                                         };
689 const string[] WEAPON_OPTIONS = {
690                                                                                 "Pistols",
691                                                                                 "Carbines",
692                                                                                 "Rifles",
693                                                                                 "Heavy Weapons",
694                                                                                 "Unarmed Weapons",
695                                                                                 "One-Handed Weapons",
696                                                                                 "Two-Handed Weapons",
697                                                                                 "Polearm Weapons",
698                                                                                 "Battlefield Weapons"
699 //                                                                              "Grenade Weapons"
700                                                                         };
701 const string[] PISTOL_OPTIONS = {
702                                                                                 "CDEF Pistol",
703                                                                                 "Scout Blaster",
704                                                                                 "Geonosian Sonic Blaster",
705                                                                                 "Republic Blaster",
706                                                                                 "Launcher",
707                                                                                 "High Capacity Scatter Pistol",
708                                                                                 "Scatter Pistol",
709                                                                                 "SR Combat",
710                                                                                 "Striker",
711                                                                                 "Tangle",
712                                                                                 "Power5",
713                                                                                 "FWG5",
714                                                                                 "DX2",
715                                                                                 "DL44 XT",
716                                                                                 "DL44",
717                                                                                 "DH17",
718                                                                                 "D18",
719                                                                                 "Alliance Disruptor",
720                                                                                 "Deathhammer",
721                                                                                 "Flare Pistol",
722                                                                                 "Flechette Pistol",
723                                                                                 "Intimidator",
724                                                                                 "Jawa Pistol",
725                                                                                 "Renegade Pistol",
726                                                                                 "DE-10",
727                                                                                 "DL44 Metal",
728                                                                                 "Disruptor Pistol",
729                                                                                 "Ion Relic Pistol",
730                                                                                 "Pistol Lamprey"
731                                                                         };
733 const string[] CARBINE_OPTIONS = {
734                                                                                 "CDEF Carbine",
735                                                                                 "DH 17 Carbine",
736                                                                                 "DH 17 Snubnose",
737                                                                                 "E11 Carbine",
738                                                                                 "E11 Carbine Mark 2",
739                                                                                 "Laser",
740                                                                                 "DxR 6",
741                                                                                 "EE 3",
742                                                                                 "Elite Carbine",
743                                                                                 "Nym Slugthrower",
744                                                                                 "Alliance Needler",
745                                                                                 "Bothan Bola",
746                                                                                 "E 5 Carbine",
747                                                                                 "Geonosian Carbine",
748                                                                                 "Proton Carbine",
749                                                                                 "Czerka Dart Carbine",
750                                                                                 "Sfor Carbine",
751                                                                                 "Whistler Modified"
753                                                                         };
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)",
758                                                                                 "CDEF",
759                                                                                 "DLT 20",
760                                                                                 "DLT 20a",
761                                                                                 "Tusken",
762                                                                                 "Advanced Laser Rifle",
763                                                                                 "SG 82",
764                                                                                 "Spraystick",
765                                                                                 "E 11",
766                                                                                 "Jawa Ion",
767                                                                                 "T 21",
768                                                                                 "Tenloss DxR 6",
769                                                                                 "Beserker",
770                                                                                 "Light Bowcaster",
771                                                                                 "Recon Bowcaster",
772                                                                                 "Assault Bowcaster",
773                                                                                 "Beam Rifle",
774                                                                                 "Acid Beam Rifle",
775                                                                                 "High Velocity Sniper Rifle",
776                                                                                 "LD 1 Rifle",
777                                                                                 "Massassi Ink Rifle",
778                                                                                 "Proton Rifle",
779                                                                                 "Lightning Rifle",
780                                                                                 "Laser Rifle",
781                                                                                 "Heavy Lightning Rifle",
782                                                                                 "DP-23 Rifle",
783                                                                                 "Mustafar Disruptor Rifle",
784                                                                                 "Tusken Elite"
786                                                                         };
787 const string[] HEAVY_WEAPON_OPTIONS = {
788                                                                                 "Rocket Launcher",
789                                                                                 "Plasma Flame Thrower",
790                                                                                 "Acid Beam",
791                                                                                 "Light Lightning Canon",
792                                                                                 "Heavy Acid Beam",
793                                                                                 "Heavy Lighting Beam",
794                                                                                 "Heavy Particle Beam",
795                                                                                 "Flame Thrower",
796                                                                                 "Heavy Republic Flame Thrower",
797                                                                                 "Lava Cannon",
798                                                                                 "Crusader M-XX Heavy Rifle",
799                                                                                 "C-M 'Frag Storm' Heavy Shotgun",
800                                                                                 "Devastator Acid Launcher",
801                                                                                 "CC-V 'Legion' Cryo Projector"
802                                                                         };
803 const string[] UNARMED_OPTIONS = {
804                                                                                 "Vibroknuckler",
805                                                                                 "Massasiknuckler",
806                                                                                 "Razorknuckler",
807                                                                                 "Basterfist",
808                                                                                 "Guardian Blaster Fist"
810                                                                         };
811 const string[] ONEHANDED_OPTIONS = {
812                                                                                 "Survival Knife",
813                                                                                 "'Twilek' Dagger",
814                                                                                 "Sword",
815                                                                                 "Curved Sword",
816                                                                                 "Gaderiffi Baton",
817                                                                                 "Vibroblade",
818                                                                                 "Ryyk Blade",
819                                                                                 "Rantok Blade",
820                                                                                 "Stun Baton",
821                                                                                 "Acid Sword",
822                                                                                 "Junta Mace",
823                                                                                 "Marauder Sword",
824                                                                                 "Massassi Sword",
825                                                                                 "RSF SWORD",
826                                                                                 "Stone Knife",
827                                                                                 "Janta Knife",
828                                                                                 "Donkuwa Knife",
829                                                                                 "Nyax Curved Sword",
830                                                                                 "Obsidian Sword",
831                                                                                 "Mustafar Bandit Sword",
832                                                                                 "Gaderiffi Elite"
834                                                                         };
835 const string[] TWOHANDED_OPTIONS = {
836                                                                                 "Axe",
837                                                                                 "Battleaxe",
838                                                                                 "Katana",
839                                                                                 "Vibroaxe",
840                                                                                 "Cleaver",
841                                                                                 "Power Hammer",
842                                                                                 "Scythe",
843                                                                                 "Kashyyk Sword",
844                                                                                 "Sith Sword",
845                                                                                 "Nyax Sword",
846                                                                                 "Black Sun Executioner's Hack",
847                                                                                 "Tulrus Sword",
848                                                                                 "Obsidian 2h Sword",
849                                                                                 "Massassi Enforcer Blade"
851                                                                         };
852 const string[] POLEARM_OPTIONS = {
853                                                                                 "1H Wood Staff",
854                                                                                 "Metal Staff",
855                                                                                 "Reinforced Staff",
856                                                                                 "Vibro Lance",
857                                                                                 "Long Vibro Axe",
858                                                                                 "Lance",
859                                                                                 "Kaminoan Great Staff",
860                                                                                 "Massassi Lance",
861                                                                                 "Shocklance",
862                                                                                 "Cryo Lance",
863                                                                                 "Kashyyk BladeStick",
864                                                                                 "Electric Polearm",
865                                                                                 "Nightsister Energy Lance",
866                                                                                 "Nightsister Lance",
867                                                                                 "Obsidian Lance",
868                                                                                 "Xandank Lance",
869                                                                                 "Acidic Paragon Vibro Axe"
870                                                                         };
871 const string[] GRENADE_OPTIONS = {
872                                                                                 "Light Fragmentation Grenade",
873                                                                                 "Fragmentation Grenade",
874                                                                                 "Imperial Detonator",
875                                                                                 "Proton Grenade",
876                                                                                 "Thermal Detonator",
877                                                                                 "Glop Detonator",
878                                                                                 "Cryoban"
879                                                                                 //"Bug Bomb"
880                                                                         };
882 const string[] BATTLEFIELD_WEAPON_OPTIONS = {
883                                                                                 "Westar-34 Blaster Pistol",
884                                                                                 "NGant-Zarvel 9118 Carbine",
885                                                                                 "Westar-M5 Blaster Rifle",
886                                                                                 "CR-1 Blast Cannon",
887                                                                                 "Buzz-Knuck",
888                                                                                 "Sith Sword",
889                                                                                 "Vibrosword",
890                                                                                 "Magnaguard Electrostaff",
891                                                                                 "One-Handed Sith-Saber Hilt",
892                                                                                 "Two-Handed Mysterious Lightsaber Hilt",
893                                                                                 "Double-Bladed Darth Phobos Lightsaber Hilt"
894                                                                         };
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",
902                                                                                 "PvP Sets",
903                                                                                 "Heroic Jewelry"
904                                                                         };
906 const string[] ARMOR_ASSAULT_OPTIONS = {
907                                                                                 "Composite Armor Set",
908                                                                                 "Marauder Assault Armor Set",
909                                                                                 "Chitin 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"
915                                                                         };
916 const string[] ARMOR_BATTLE_OPTIONS = {
917                                                                                 "Padded Armor Set",
918                                                                                 "Marauder Battle Armor Set",
919                                                                                 "RIS Armor Set",
920                                                                                 "Bone 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"
926                                                                         };
927 const string[] ARMOR_RECON_OPTIONS = {
928                                                                                 "Tantel Armor Set",
929                                                                                 "Ubese Armor Set",
930                                                                                 "Mabari Armor Set",
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"
937                                                                         };
938 const string[] ARMOR_PROTECTION_AMOUNT = {
939                                                                                 "Basic",
940                                                                                 "Standard",
941                                                                                 "Advanced"
942                                                                         };
943 const string[] ARMOR_PSG_OPTIONS = {
944                                                                                 "MARK I",
945                                                                                 "MARK II",
946                                                                                 "MARK III"
947                                                                         };
948 const string[] ARMOR_ENHANCEMENT_OPTIONS = {
949                                                                                 "Combat Enhancement Ring"
951                                                                         };
953 const string[] ARMOR_PVP_SETS = {
954                                                                                 "Imperial Black PvP",
955                                                                                 "Imperial White PvP",
956                                                                                 "Rebel Grey PvP",
957                                                                                 "Rebel Green PvP",
958                                                                                 "Galactic Marine Armor Set",
959                                                                                 "Rebel SpecForce Armor Set"
960                                                                         };
962 const string[] MISCITEM_OPTIONS = {
963                                                                                 "Misc Items",
964                                                                                 "Medicines",
965 //                                                                              "Smuggler Tools",
966                                                                                 "Power Ups",
967                                                                                 "Exotic Attachments",
968                                                                                 "Socketed Clothing",
969                                                                                 "Basic Armor Attachments",
970                                                                                 "Basic Clothing Attachments",
971                                                                                 "Crafting Suit",
972                                                                                 "Aurilia Crystals"
973                                                                         };
974 const string[] CLOTHING_OPTIONS = {
975                                                                                 "Socketed Shirt",
976                                                                                 "Socketed Gloves",
977                                                                                 "Socketed Hat",
978                                                                                 "Socketed Pants",
979                                                                                 "Socketed Jacket",
980                                                                                 "Socketed Boots",
982                                                                         };
985 const string[] ATTACHMENT_OPTIONS = {
986                                                                                 "Weapon",
987                                                                                 "Armor",
988                                                                                 "Chest Armor",
989                                                                                 "Shirt"
990                                                                         };
992 const string[] MISC_OPTIONS = {
993                                                                                 "Spec-Ops Pack",
994                                                                                 "Krayt Skull Pack",
995                                                                                 "Pilot Ace Pack",
996                                                                                 "Jedi Belt Pouch",
997                                                                                 "Snowtrooper Backpack",
998                                                                                 "Alliance Cold Weather Backpack",
999                                                                                 "Arakyd Probe Droid",
1000                                                                                 "Seeker 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",
1008                                                                                 "Grant Buffs"
1009                                                                         };
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"
1015 //                                                                              "All Enhancers",
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"
1029                                                                         };
1030 const string[] HEAL_OPTIONS = {
1031                                                                                 "Heal Wounds",
1032                                                                                 "Heal Battle Fatigue"
1033                                                                 };
1035 const string[] SMUGGLER_TOOLS_OPTIONS = {
1036                                                                                 "Simple Toolkit",
1037                                                                                 "Finely Crafted Toolset",
1038                                                                                 "Trandoshan Interframe",
1039                                                                                 "Delicate Trigger",
1040                                                                                 "Illegal Core Booster",
1041                                                                                 "Mandalorian Interframe",
1042                                                                                 "Micro Plating"
1043                                                                 };
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"
1054                                                                         };
1055 //const string[] FACTION_OPTIONS = {
1056 //                                                                              "Receive Imperial Faction Points",
1057 //                                                                              "Receive Rebel Faction Points"
1058 //                                                                      };
1060 const string[] ROADMAP_SKILL_OPTIONS = {
1061                                                                                 "Select Roadmap",
1062                                                                                 "Earn Current Skill",
1063                                                                                 "Set Combat Level",
1064                                                                                 "Level 90 - Reset respecs"
1065                                                                         };
1067 const string[] JEDI_OPTIONS =   {
1068                                                                                 "Saber Crystals",
1069                                                                                 "Light Sabers",
1070                                                                                 "Jedi Robes"
1071 //                                                                              "Designer Playtest"
1072 //                                                                              "DEPRECATING DO NOT USE: Enable Jedi Skills"
1073                                                                         };
1074 const string[] PUBLISH_OPTIONS =        {
1075                                                                                 "Heavy Weapons",
1076                                                                                 "Jedi Options",
1077                                                                                 "Traps",
1078                                                                                 "Death Watch Bunker Entrance Flag",
1079                                                                                 "Spy Camouflage Gear"
1080                                                                         };
1082 const string[] CRYSTAL_OPTIONS =        {
1083                                                                                 "Color Crystals",
1084                                                                                 "Lava Crystal",
1085                                                                                 "Power Crystals",
1086                                                                                 "Ancient Krayt Pearls"
1087                                                                         };
1089 const string[] SABER_OPTIONS =  {
1090                                                                                 "Training Saber",
1091                                                                                 "Generation One Sabers",
1092                                                                                 "Generation Two Sabers",
1093                                                                                 "Generation Three Sabers",
1094                                                                                 "Generation Four Sabers",
1095                                                                                 "Generation Five Sabers"
1096                                                                         };
1097 const string[] JEDI_PLAYTEST_OPTIONS =  {
1098                                                                                 "Level 26 Playtest",
1099                                                                                 "Level 86 Playtest"
1100                                                                         };
1101 const string[] ROBE_OPTIONS =   {
1102                                                                                 "Padawan Robe",
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"
1114                                                                         };
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,
1483         ARMOR_SET_ASSAULT_3
1485 const string[][] ARMOR_SETS_BATTLE = {
1486         ARMOR_SET_BATTLE_1,
1487         ARMOR_SET_BATTLE_2,
1488         ARMOR_SET_BATTLE_3,
1489         ARMOR_SET_BATTLE_4
1491 const string[][] ARMOR_SETS_RECON = {
1492         ARMOR_SET_RECON_1,
1493         ARMOR_SET_RECON_2,
1494         ARMOR_SET_RECON_3,
1495         ARMOR_SET_RECON_4
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 = {
1533                 "prx_trapCaltrop",
1534                 "tmr_trapCaltrop",
1535                 "rmt_trapCaltrop",
1536                 "prx_trapFlashbang",
1537                 "tmr_trapFlashbang",
1538                 "rmt_trapFlashbang",
1539                 "prx_trapHX2",
1540                 "tmr_trapHX2",
1541                 "rmt_trapHX2",
1542                 "prx_trapKamino",
1543                 "tmr_trapKamino",
1544                 "rmt_trapKamino"
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 =
1557         "armor",
1558         "booster",
1559         "droid_interface",
1560         "engine",
1561         "reactor",
1562         "shield_generator",
1563         "weapon",
1564         "weapon_capacitor",
1565         "Looted Droid Interface"
1568 const string[] CRAFTING_PROFESSIONS = {
1569         "Domestics",
1570         "Engineer",
1571         "Structure",
1572         "Weaponsmith",
1573         "Entertainer"
1576 // These are in order for Domestics, Engineering, Structure, and Weaponsmith
1577 const string[] CRAFTING_SKILL_TEMPLATES = {
1578         "trader_1a",
1579         "trader_1d",
1580         "trader_1b",
1581         "trader_1c",
1582         "entertainer_1a"
1585 const string[] COLLECTION_COMPONENT_SCHEMS = {
1586         "Collection Boosters",
1587         "Collection Capacitors",
1588         "Collection Engines",
1589         "Collection Reactors",
1590         "Nova Orion Weapons and Engines",
1591         "GU16 Schematic"
1594 const string[] BASIC_MOD_STRINGS= {     "precision_modified",
1595                                         "strength_modified",
1596                                         "agility_modified",
1597                                         "stamina_modified",
1598                                         "constitution_modified",
1599                                         "luck_modified",
1600                                         "camouflage",
1601                                         "combat_block_value"
1602                                 };
1604 const string[] BASIC_MOD_LIST = {       "Precision",
1605                                         "Strength",
1606                                         "Agility",
1607                                         "Stamina",
1608                                         "Constitution",
1609                                         "Luck",
1610                                         "Camouflage",
1611                                         "Block Value"
1612                                 };
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)",
1630                                         "Spy Ghost (PvP)",
1631                                         "Spy Razor Cat (DPS)",
1632                                         "Officer Dead Eye (DPS)",
1633                                         "Officer Hellstorm (AoE DPS)",
1634                                         "Officer General's (Group PvE)",
1635                                         "Heroism (Stats)"
1636                                 };
1637 const string[] AURILIA_CRYSTALS = {
1638                                         "Small Aurilian Crystal",
1639                                         "Medium Aurilian Crystal",
1640                                         "Large Aurilian Crystal"
1641                                 };
1643 const string[] CRAFTING_SUIT = {
1644                                         "Blixtev's Ultra Crafting Suit"
1645                                         "Blixtev's Body Spray"
1646                                 };
1648                                 
1649                                 
1650 const string[] buffComponentKeys = {
1651         "kinetic",
1652         "energy",
1653         "action_cost_reduction",
1654         "dodge"
1656 const int[] buffComponentValues = {
1657         15, 15, 1, 2
1660 /***** TRIGGERS ********************************************************/
1662 boolean checkConfigSetting(string configString)
1664         string enabled = toLower(getConfigSetting("CharacterBuilder", configString));
1665         if (enabled == null)
1666                 return false;
1668         if (enabled.equals("true") || enabled.equals("1"))
1669                 return true;
1671         return false;
1674 trigger OnObjectMenuRequest(obj_id player, menu_info mi)
1676         menu_info_data data = mi.getMenuItemByType (menu_info_types.ITEM_USE);
1678         if (data != null)
1679                 data.setServerNotify (true);
1680         else
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"))
1689         {
1691                 if ( item == menu_info_types.ITEM_USE )
1692                 {
1693                         startCharacterBuilder(player);
1694                 }
1695                 return SCRIPT_CONTINUE;
1696         }
1697         else
1698         {
1699                 sendSystemMessageTestingOnly(player, "Only authorized users may access this terminal.");
1700                 return SCRIPT_CONTINUE;
1701         }
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()) )
1722         {
1723                 //cleanScriptVars(player);
1724                 return SCRIPT_CONTINUE;
1725         }
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 )
1732         {
1733                 cleanScriptVars(player);
1734                 return SCRIPT_CONTINUE;
1735         }
1737         if ( idx == -1 || idx > CHARACTER_BUILDER_OPTIONS.length)
1738         {
1739                 cleanScriptVars(player);
1740                 return SCRIPT_CONTINUE;
1741         }
1743         switch(idx)
1744         {
1746                 case 0:  // weapons
1747                         if (isGod(player) || checkConfigSetting("weaponsEnabled"))
1748                                 handleWeaponOption(player);
1749                         else
1750                         {
1751                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1752                                 return SCRIPT_CONTINUE;
1753                         }
1754                         break;
1755                 case 1:  // armors
1756                         if (isGod(player) || checkConfigSetting("armorEnabled"))
1757                                 handleArmorOption(player);
1758                         else
1759                         {
1760                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1761                                 return SCRIPT_CONTINUE;
1762                         }
1763                         break;
1764                 case 2:  // roadmap skills
1765                         if (isGod(player) || checkConfigSetting("skillsEnabled"))
1766                                 handleRoadmapSkills(player);
1767                         else
1768                         {
1769                                 sendSystemMessageTestingOnly(player, "The Roadmap Skill Builder option is DISABLED.");
1770                                 return SCRIPT_CONTINUE;
1771                         }
1772                         break;
1773 /*              case 3 :  // skill loadout
1774                         if (isGod(player) || checkConfigSetting("skillsLoadoutEnabled"))
1775                                 handleSkillLoadoutOption(player);
1776                         else
1777                         {
1778                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1779                                 return SCRIPT_CONTINUE;
1780                         }
1781                         break;
1782                 case 4:  // buffs
1783                         if (isGod(player) || checkConfigSetting("buffsEnabled"))
1784                                 handleBuffOption(player);
1785                         else
1786                         {
1787                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1788                                 return SCRIPT_CONTINUE;
1789                         }
1790                         break;
1791 */              case 3:  // resources
1792                         if (isGod(player) || checkConfigSetting("resourcesEnabled"))
1793                                 handleResourceOption(player);
1794                         else
1795                         {
1796                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1797                                 return SCRIPT_CONTINUE;
1798                         }
1799                         break;
1800                 case 4:  // credits
1801                         if (isGod(player) || checkConfigSetting("creditsEnabled"))
1802                                 handleCreditOption(player);
1803                         else
1804                         {
1805                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1806                                 return SCRIPT_CONTINUE;
1807                         }
1808                         break;
1810                 case 5:  // faction options
1811                         if (isGod(player) || checkConfigSetting("factionEnabled"))
1812                                 handleFactionOption(player);
1813                         else
1814                         {
1815                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1816                                 return SCRIPT_CONTINUE;
1817                         }
1818                         break;
1819                 case 6:  // vehicles/mounts/beasts
1820                         handleVehicleOption(player);
1821                         break;
1822                 case 7:  // ships
1823                         if (isGod(player) || checkConfigSetting("shipsEnabled"))
1824                                 handleShipMenuSelect(player);
1825                         else
1826                         {
1827                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1828                                 return SCRIPT_CONTINUE;
1829                         }
1830                         break;
1831                 case 8:  // crafting items
1832                         if (isGod(player) || checkConfigSetting("craftingEnabled"))
1833                                 handleCraftingOption(player);
1834                         else
1835                         {
1836                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1837                                 return SCRIPT_CONTINUE;
1838                         }
1839                         break;
1840                 case 9:  // deeds
1841                         if (isGod(player) || checkConfigSetting("deedsEnabled"))
1842                                 handleDeedOption(player);
1843                         else
1844                         {
1845                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1846                                 return SCRIPT_CONTINUE;
1847                         }
1848                         break;
1849                 case 10:  // PA halls
1850                         if (isGod(player) || checkConfigSetting("pahallEnabled"))
1851                                 handlePAOption(player);
1852                         else
1853                         {
1854                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1855                                 return SCRIPT_CONTINUE;
1856                         }
1857                         break;
1858                 case 11:  // misc items
1859                         if (isGod(player) || checkConfigSetting("miscitemEnabled"))
1860                                 handleMiscOption(player);
1861                         else
1862                         {
1863                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1864                                 return SCRIPT_CONTINUE;
1865                         }
1866                         break;
1867                 case 12:  // Jedi
1868                         if (isGod(player) || checkConfigSetting("jediEnabled"))
1869                                 handleJediOption(player);
1870                         else
1871                         {
1872                                 sendSystemMessageTestingOnly(player, "You Are Not Authorized to use the Jedi Options!.");
1873                                 return SCRIPT_CONTINUE;
1874                         }
1875                         break;
1876                 case 13:  // Best Resource
1877                         if(isGod(player))
1878                                 handleBestResourceOption(player);
1879                         else
1880                         {
1881                                 sendSystemMessageTestingOnly(player, "This is for developers only.");
1882                                 return SCRIPT_CONTINUE;
1883                         }
1884                         break;
1886                 case 14:  // Flag all Heroic Instances
1887                         if(isGod(player))
1888                                 flagAllHeroicInstances(player);
1889                         else
1890                         {
1891                                 sendSystemMessageTestingOnly(player, "This is for developers only.");
1892                                 return SCRIPT_CONTINUE;
1893                         }
1894                         break;
1895                 case 15: // Draft Schematics
1896                         if(isGod(player))
1897                         {
1898                                 handleDraftSchematicsOption(player);
1899                         }
1900                         else
1901                         {
1902                                 sendSystemMessageTestingOnly(player, "This is for developers only.");
1903                                 return SCRIPT_CONTINUE;
1904                         }
1905                         break;
1907                 case 15:  // heal options
1908                         if (isGod(player) || checkConfigSetting("healingEnabled"))
1909                                 handleHealOption(player);
1910                         else
1911                         {
1912                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1913                                 return SCRIPT_CONTINUE;
1914                         }
1915                         break;
1916                 case 19:  // Pet Abilities
1917                         if (isGod(player) || checkConfigSetting("petAbilitiesEnabled"))
1918                                 handlePetAbilityOption(player);
1919                         else
1920                         {
1921                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
1922                                 return SCRIPT_CONTINUE;
1923                         }
1924                         break;
1926                 default:
1927                         cleanScriptVars(player);
1928                         return SCRIPT_CONTINUE;
1929         }
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"))
1949         {
1950                 int oldpid = utils.getIntScriptVar(player, "character_builder.pid");
1951                 forceCloseSUIPage (oldpid);
1952                 utils.removeScriptVar(player, "character_builder.pid");
1953         }
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++)
1967         {
1968                 skillList[i] = "@skl_n:" + skillList[i];
1969         }
1971         return skillList;
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.
1981  */
1982 void handleSkillLoadoutOption(obj_id player)
1984         // create a fast lookup set of the player's inventory
1985         if ( !isIdValid(player) )
1986                 return;
1987         obj_id inventoryId = utils.getInventoryContainer(player);
1988         if ( !isIdValid(inventoryId) )
1989                 return;
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 )
1995         {
1996                 string itemTemplate = getTemplateName(inventoryArray[i]);
1997                 if ( itemTemplate != null )
1998                         inventoryLookup.add(itemTemplate);
1999         }
2001         // get the loadout for each skill the player has
2002         int itemCount = 0;
2003         int shipCount = 0;
2004         string[] skills = getSkillListingForPlayer(player);
2005         if ( skills != null )
2006         {
2007                 for ( int i = 0; i < skills.length; ++i )
2008                 {
2009                         if (space_transition.isPlayerBelowShipLimit(player))
2010                         {
2011                                 obj_id shipId = null;
2012                                 if (skills[i].equals("pilot_rebel_navy_master"))
2013                                 {
2014                                         shipId = space_utils.createShipControlDevice(player, "advanced_xwing", false);
2015                                 }
2016                                 else if (skills[i].equals("pilot_imperial_navy_master"))
2017                                 {
2018                                         shipId = space_utils.createShipControlDevice(player, "tieinterceptor_imperial_guard", false);
2019                                 }
2020                                 else if (skills[i].equals("pilot_neutral_master"))
2021                                 {
2022                                         shipId = space_utils.createShipControlDevice(player, "yt1300", false);
2023                                 }
2024                                 else if (skills[i].equals("pilot_rebel_navy_novice"))
2025                                 {
2026                                         shipId = space_utils.createShipControlDevice(player, "z95", false);
2027                                 }
2028                                 else if (skills[i].equals("pilot_imperial_navy_novice"))
2029                                 {
2030                                         shipId = space_utils.createShipControlDevice(player, "tie_light_duty", false);
2031                                 }
2032                                 else if (skills[i].equals("pilot_neutral_novice"))
2033                                 {
2034                                         shipId = space_utils.createShipControlDevice(player, "basic_hutt_light", false);
2035                                 }
2036                                 if (isValidId(shipId))
2037                                 {
2038                                         ++shipCount;
2039                                 }
2040                         }
2042                         dictionary items = dataTableGetRow(SKILL_LOADOUT_TBL, skills[i]);
2043                         if ( items != null )
2044                         {
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() )
2048                                 {
2049                                         string key = (String)(keys.nextElement());
2050                                         if ( key == "skill" )
2051                                                 continue;
2053                                         Object value = items.get(key);
2054                                         if ( value != null && value instanceof string && ((string)value).length() > 0 )
2055                                         {
2056                                                 if ( key == "armor" )
2057                                                 {
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" )
2065                                                         {
2066                                                                 sendSystemMessageTestingOnly(player, "Invalid armor category " + armorCategoryName +
2067                                                                         " for skill entry " + skills[i]);
2068                                                                 continue;
2069                                                         }
2070                                                         if ( armorLevelName != "1" &&
2071                                                                  armorLevelName != "2" &&
2072                                                                  armorLevelName != "3" )
2073                                                         {
2074                                                                 sendSystemMessageTestingOnly(player, "Invalid armor level " + armorLevelName +
2075                                                                         " for skill entry " + skills[i]);
2076                                                                 continue;
2077                                                         }
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" )
2083                                                         {
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;
2089                                                                 else
2090                                                                         armorSet = ARMOR_SETS_ASSAULT[rand(0, ARMOR_SETS_ASSAULT.length-1)];
2091                                                         }
2092                                                         else if ( armorCategoryName == "battle" )
2093                                                         {
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;
2099                                                                 else
2100                                                                         armorSet = ARMOR_SETS_BATTLE[rand(0, ARMOR_SETS_BATTLE.length-1)];
2101                                                         }
2102                                                         else
2103                                                         {
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;
2109                                                                 else
2110                                                                         armorSet = ARMOR_SETS_RECON[rand(0, ARMOR_SETS_RECON.length-1)];
2111                                                         }
2112                                                         if ( armorSet == null )
2113                                                         {
2114                                                                 sendSystemMessageTestingOnly(player, "Unable to get armor set for armor category " + armorCategoryName);
2115                                                                 continue;
2116                                                         }
2117                                                         for ( int j = 0; j < armorSet.length; ++j )
2118                                                         {
2119                                                                 string armorTemplate = ARMOR_SET_PREFIX + armorSet[j];
2120                                                                 if ( !inventoryLookup.contains(armorTemplate) )
2121                                                                 {
2122                                                                         obj_id newItem = createObject(armorTemplate, inventoryId, "");
2123                                                                         if ( isIdValid(newItem) )
2124                                                                         {
2126                                                                                 if (!isGameObjectTypeOf(newItem, GOT_armor_foot) && !isGameObjectTypeOf(newItem, GOT_armor_hand))
2127                                                                                 {
2128                                                                                         armor.setArmorDataPercent(newItem, armorLevel, armorCategory, GENERAL_PROTECTION, CONDITION);
2129                                                                                 }
2130                                                                                 inventoryLookup.add(armorTemplate);
2131                                                                                 ++itemCount;
2132                                                                         }
2133                                                                 }
2134                                                         }
2135                                                 }
2136                                                 else
2137                                                 {
2138                                                         if ( !inventoryLookup.contains(value) )
2139                                                         {
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);
2145                                                                 else
2146                                                                         newItem = createObject(itemTemplate, inventoryId, "");
2147                                                                 if ( isIdValid(newItem) )
2148                                                                 {
2149                                                                         inventoryLookup.add(itemTemplate);
2150                                                                         ++itemCount;
2151                                                                 }
2152                                                         }
2153                                                 }
2154                                         }
2155                                 }
2156                         }
2157                 }
2158         }
2160         if (itemCount > 0 || shipCount > 0)
2161         {
2162                 if (shipCount > 0)
2163                 {
2164                         sendSystemMessageTestingOnly(player, shipCount + " ships were placed in your datapad.");
2165                 }
2166                 if (itemCount > 0)
2167                 {
2168                         sendSystemMessageTestingOnly(player, itemCount + " items were placed in your inventory.");
2169                 }
2170                 sendSystemMessageTestingOnly(player, "Have fun storming the castle!");
2171         }
2172         else
2173         {
2174                 sendSystemMessageTestingOnly(player, "No new items were placed in your inventory. You've got everything you need.");
2175         }
2177         startCharacterBuilder(player);
2180 //===================================================================
2181 // Credit Section //===============================================
2182 void handleCreditOption(obj_id player)
2185         if ( getCashBalance(player) < 100000000 )
2186         {
2187                 dictionary d = new dictionary();
2188                 d.put("payoutTarget", player);
2189                 money.systemPayout(money.ACCT_BETA_TEST, player, CASH_AMOUNT, "handlePayoutToPlayer", d);
2190         }
2191         else
2192         {
2193                 sendSystemMessageTestingOnly(player, "You already have 100,000,000+ credits. Why do you need any more money?");
2194         }
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 )
2208         {
2209                 string terminal = "Character Builder Terminal";
2210                 sendSystemMessageTestingOnly(player, "You receive " + CASH_AMOUNT + " credits from the " + terminal);
2211         }
2212         else if ( retCode == money.RET_FAIL )
2213         {
2214                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2215         }
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);
2235         return;
2238 messageHandler handleCategorySelection()
2240         if ( (params == null) || (params.isEmpty()) )
2241         {
2242                 //cleanScriptVars(player);
2243                 return SCRIPT_CONTINUE;
2244         }
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 )
2251         {
2252                 startCharacterBuilder(player);
2253                 return SCRIPT_CONTINUE;
2254         }
2256         if(btn == sui.BP_CANCEL)
2257         {
2258                 cleanScriptVars(player);
2259                 closeOldWindow(player);
2260                 return SCRIPT_CONTINUE;
2261         }
2263         if ( idx == -1 )
2264         {
2265                 cleanScriptVars(player);
2266                 return SCRIPT_CONTINUE;
2267         }
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"))
2277         {
2278                 utils.setScriptVar(player, "character_builder.resourceList", SPACE_RESOURCE_CONST);
2279         }
2280         else
2281                 utils.setScriptVar(player, "character_builder.resourceList", resourceList);
2283         return SCRIPT_CONTINUE;
2286 messageHandler handleResourceSelection()
2288         if ( (params == null) || (params.isEmpty()) )
2289         {
2290                 //cleanScriptVars(player);
2291                 return SCRIPT_CONTINUE;
2292         }
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 )
2299         {
2300                 refreshMenu ( player, "Select the desired resource category", "Character Builder Terminal", RESOURCE_TYPES, "handleCategorySelection", false);
2301                 return SCRIPT_CONTINUE;
2302         }
2304         if(btn == sui.BP_CANCEL)
2305         {
2306                 cleanScriptVars(player);
2307                 closeOldWindow(player);
2308                 return SCRIPT_CONTINUE;
2309         }
2311         if ( idx == -1 )
2312         {
2313                 cleanScriptVars(player);
2314                 return SCRIPT_CONTINUE;
2315         }
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"))
2324         {
2325                 makeSpaceResource(player, resourceName);
2326                 return SCRIPT_CONTINUE;
2327         }
2330         obj_id resourceId = getResourceTypeByName(resourceName);
2332         if (isIdNull(resourceId))
2333         {
2334                 resourceId = pickRandomNonDepeletedResource(resourceName);
2335         }
2337         obj_id inv = utils.getInventoryContainer(player);
2338         obj_id resourceCrate = createResourceCrate(resourceId, AMT, inv);
2340         if (isIdNull(resourceCrate))
2341         {
2342                 sendSystemMessageTestingOnly(player, "Resource grant failed. It is likely your inventory is full.");
2343         }
2344         else
2345         {
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);
2350         }
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))
2362         {
2363                 sendSystemMessageTestingOnly(self, "No id found");
2364                 sendSystemMessageTestingOnly(self, "Type was "+rclass);
2365                 return;
2366         }
2368         string crateTemplate = getResourceContainerForType(rtype);
2370         if ( !crateTemplate.equals("") )
2371         {
2372                 obj_id pInv = utils.getInventoryContainer(self);
2373                 if ( isIdValid(pInv))
2374                 {
2375                         obj_id crate = createObject(crateTemplate, pInv, "");
2376                         if ( addResourceToContainer (crate, rtype, AMT, self) )
2377                         {
2378                                 sendSystemMessageTestingOnly(self, "Resource of class "+rclass+" added");
2379                         }
2380                 }
2381         }
2384 string[] buildAvailableResourceTree(obj_id self, location loc, string topParent)
2386         resizeable resource_density[] allResources = new resource_density[0];
2389         if(topParent.equals("Asteroid"))
2390         {
2391                 return SPACE_RESOURCE_LOCALIZED;
2393         }
2395         if(hasObjVar(self, "allPlanetResources"))
2396         {
2397                 string[] planetNames = { "corellia", "dantooine", "lok", "naboo", "rori", "talus", "tatooine" };
2399                 for(int i = 0; i < planetNames.length; i++)
2400                 {
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++)
2406                         {
2407                                 allResources.add(resources[j]);
2408                         }
2409                 }
2410         }
2411         else
2412         {
2413                 resource_density[] resources = requestResourceList(loc, 0.0f, 1.0f, topParent);
2415                 for(int j = 0; j < resources.length; j++)
2416                 {
2417                         allResources.add(resources[j]);
2418                 }
2419         }
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)
2431         {
2432                 for (int i = 0; i < resources.length; i++)
2433                 {
2434                         if (!isResourceDerivedFrom(resources[i].getResourceType(), topParent))
2435                                 continue;
2437                         string parent = getResourceClass(resources[i].getResourceType());
2438                         string child = null;
2440                         if (parent == null)
2441                                 continue;
2443                         while (parent != topParent)
2444                         {
2445                                 child = parent;
2446                                 parent = getResourceParentClass(child);
2447                         }
2449                         if (child == null)
2450                                 child = "\\#pcontrast1 "+getResourceName(resources[i].getResourceType())+"\\#.";
2452                         for (int j = 0; j < branchLevel; j++)
2453                         {
2454                                 child = "    " + child;
2455                         }
2458                         if (resourceTree.indexOf(child) == -1)
2459                         {
2460                                 resourceTree.add(child);
2461                         }
2462                 }
2463         }
2465         for (int i = 0; i < resourceTree.size(); i++)
2466         {
2467                 string parent = resourceTree[i].trim();
2468                 string[] childBranch = buildSortedResourceTree(resources, parent, branchLevel+1);
2470                 for (int j = 0; j < childBranch.length; j++)
2471                 {
2472                         resourceTree.add(++i, childBranch[j]);
2473                 }
2474         }
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);
2486         int column = 2;
2487         while ((classString == null || classString.length() == 0) && column <= 9)
2488         {
2489                 classString = dataTableGetString(resourceTable, row, column);
2490                 column++;
2491         }
2493         return classString;
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);
2504         return;
2507 messageHandler handleBestCategorySelection()
2509         if ( (params == null) || (params.isEmpty()) )
2510         {
2511                 //cleanScriptVars(player);
2512                 return SCRIPT_CONTINUE;
2513         }
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 )
2520         {
2521                 startCharacterBuilder(player);
2522                 return SCRIPT_CONTINUE;
2523         }
2525         if(btn == sui.BP_CANCEL)
2526         {
2527                 cleanScriptVars(player);
2528                 closeOldWindow(player);
2529                 return SCRIPT_CONTINUE;
2530         }
2532         if ( idx == -1 )
2533         {
2534                 cleanScriptVars(player);
2535                 return SCRIPT_CONTINUE;
2536         }
2538         if(idx > RESOURCE_BASE_TYPES.length - 1)
2539         {
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;
2543         }
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)
2553         {
2554                 if(!hasResourceType(resourceList[i]))
2555                         resourceList[i] = null;
2556                 else
2557                         ++goodResources;
2558         }
2560         string[] temp = new string[goodResources];
2561         goodResources = 0;
2563         for(int i = 0; i < resourceList.length; ++i)
2564         {
2565                 if ( resourceList[i] != null )
2566                         temp[goodResources++] = resourceList[i];
2567         }
2569         resourceList = temp;
2570         temp = null;
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())
2581         {
2582                 //cleanScriptVars(player);
2583                 return SCRIPT_CONTINUE;
2584         }
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)
2591         {
2592                 startCharacterBuilder(player);
2593                 return SCRIPT_CONTINUE;
2594         }
2596         if(btn == sui.BP_CANCEL)
2597         {
2598                 cleanScriptVars(player);
2599                 closeOldWindow(player);
2600                 return SCRIPT_CONTINUE;
2601         }
2603         if(idx == -1)
2604         {
2605                 cleanScriptVars(player);
2606                 return SCRIPT_CONTINUE;
2607         }
2609         string[] resourceList = utils.getStringArrayScriptVar(player, "character_builder.resourceList");
2611         if(utils.hasScriptVar(player, "character_builder.specificFilter"))
2612         {
2613                 string [] attribs = craftinglib.getAttribNamesByResourceClass(resourceList[idx]);
2615                 if(attribs == null)
2616                 {
2617                         debugSpeakMsg(player, "attribs null");
2618                         return SCRIPT_CONTINUE;
2619                 }
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;
2626         }
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())
2638         {
2639                 //cleanScriptVars(player);
2640                 return SCRIPT_CONTINUE;
2641         }
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)
2648         {
2649                 startCharacterBuilder(player);
2650                 return SCRIPT_CONTINUE;
2651         }
2653         if(btn == sui.BP_CANCEL)
2654         {
2655                 cleanScriptVars(player);
2656                 closeOldWindow(player);
2657                 return SCRIPT_CONTINUE;
2658         }
2660         if(idx == -1)
2661         {
2662                 cleanScriptVars(player);
2663                 return SCRIPT_CONTINUE;
2664         }
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()) )
2693         {
2694                 //cleanScriptVars(player);
2695                 return SCRIPT_CONTINUE;
2696         }
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 )
2703         {
2704                 startCharacterBuilder(player);
2705                 return SCRIPT_CONTINUE;
2706         }
2708         if(btn == sui.BP_CANCEL)
2709         {
2710                 cleanScriptVars(player);
2711                 closeOldWindow(player);
2712                 return SCRIPT_CONTINUE;
2713         }
2715         if ( idx == -1 || idx > VEHICLE_MOUNT_OPTIONS.length)
2716         {
2717                 cleanScriptVars(player);
2718                 return SCRIPT_CONTINUE;
2719         }
2721         //make sure player is Valid
2722         if(!isIdValid(player))
2723         {
2724                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2725                 cleanScriptVars(player);
2726                 return SCRIPT_OVERRIDE;
2727         }
2729         string prompt = "Select the desired option";
2730         string title = "Character Builder Terminal";
2731         int pid = 0;
2733         switch(idx)
2734         {
2736                 case 0:
2737                         if(isGod(player) || checkConfigSetting("vehiclesEnabled"))
2738                         {
2739                                 refreshMenu ( player, prompt, title, VEHICLE_OPTIONS, "handleVehicleSelect", false);
2740                         }
2741                         else
2742                         {
2743                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
2744                                 return SCRIPT_CONTINUE;
2745                         }
2747                         break;
2749                 case 1:
2750                         if(isGod(player) || checkConfigSetting("vehiclesEnabled"))
2751                         {
2752                                 refreshMenu ( player, prompt, title, MOUNT_OPTIONS, "handleMountSelect", false);
2753                         }
2754                         else
2755                         {
2756                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
2757                                 return SCRIPT_CONTINUE;
2758                         }
2759                         break;
2761                 case 2:
2762                         if(!isGod(player))
2763                         {
2764                                 refreshMenu(player, prompt, title, BEAST_OPTIONS_FOR_PLAYERS, "handleBeastSelect", false);
2765                         }
2766                         else
2767                         {
2768                                 refreshMenu(player, prompt, title, BEAST_OPTIONS, "handleBeastSelect", false);
2769                         }
2770                         break;
2771                 case 3:
2772                         obj_id beast = beast_lib.getBeastOnPlayer(player);
2773                         if(!isIdValid(beast) || !beast_lib.isValidBeast(beast))
2774                         {
2775                                 sendSystemMessage(player, "Could not find a valid beast. Please make sure you've called your beast", null);
2776                                 return SCRIPT_CONTINUE;
2777                         }
2778         
2779                         obj_id bcd = beast_lib.getBeastBCD(beast);
2781                         if(!beast_lib.isValidBCD(bcd))
2782                         {
2783                                 return SCRIPT_CONTINUE;
2784                         }               
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);
2791                         break;
2792                 case 4:
2793                         obj_id playerBeast = beast_lib.getBeastOnPlayer(player);
2794                         if(!isIdValid(playerBeast) || !beast_lib.isValidBeast(playerBeast))
2795                         {
2796                                 sendSystemMessage(player, "Could not find a valid beast. Please make sure you've called your beast", null);
2797                                 return SCRIPT_CONTINUE;
2798                         }
2800                         obj_id beastBcd = beast_lib.getBeastBCD(playerBeast);
2802                         if(!beast_lib.isValidBCD(beastBcd))
2803                         {
2804                                 return SCRIPT_CONTINUE;
2805                         }
2806                         
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);
2811                         break;
2812                 
2813                 case 5:
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);
2817                         break;
2819                 default:
2820                         cleanScriptVars(player);
2821                         return SCRIPT_CONTINUE;
2823         }
2825         return SCRIPT_CONTINUE;
2829 messageHandler handleVehicleSelect()
2831         if ( (params == null) || (params.isEmpty()) )
2832         {
2833                 //cleanScriptVars(player);
2834                 return SCRIPT_CONTINUE;
2835         }
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 )
2844         {
2845                 handleVehicleOption(player);
2846                 return SCRIPT_CONTINUE;
2847         }
2849         if(btn == sui.BP_CANCEL)
2850         {
2851                 cleanScriptVars(player);
2852                 closeOldWindow(player);
2853                 return SCRIPT_CONTINUE;
2854         }
2856         if ( idx == -1 || idx > VEHICLE_OPTIONS.length)
2857         {
2858                 cleanScriptVars(player);
2859                 return SCRIPT_CONTINUE;
2860         }
2862         //make sure player is Valid
2863         if(!isIdValid(player))
2864         {
2865                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2866                 cleanScriptVars(player);
2867                 return SCRIPT_OVERRIDE;
2868         }
2869         //make sure player's inventory is valid
2870         if (!isIdValid(pInv))
2871         {
2872                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2873                 cleanScriptVars(player);
2874                 return SCRIPT_OVERRIDE;
2875         }
2876         //make sure there is room in player's inventory
2877         if (getVolumeFree(pInv) <= 0)
2878         {
2879                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
2880                 cleanScriptVars(player);
2881                 return SCRIPT_OVERRIDE;
2882         }
2884         switch(idx)
2885         {
2886                 case 0:  // swoop
2887                         createObject("object/tangible/deed/vehicle_deed/speederbike_swoop_deed.iff", pInv, "");
2888                         sendSystemMessageTestingOnly(player, "Swoop Deed Issued.");
2889                         break;
2891                 case 1:  // speeder
2892                         createObject("object/tangible/deed/vehicle_deed/speederbike_deed.iff", pInv, "");
2893                         sendSystemMessageTestingOnly(player, "Speederbike Deed Issued.");
2894                         break;
2895                 case 2:  // X34
2896                         createObject("object/tangible/deed/vehicle_deed/landspeeder_x34_deed.iff", pInv, "");
2897                         sendSystemMessageTestingOnly(player, "X34 Landspeeder Deed Issued.");
2898                         break;
2899                 case 3: //AB1
2900                         createObject("object/tangible/deed/vehicle_deed/landspeeder_ab1_deed.iff",pInv, "");
2901                         sendSystemMessageTestingOnly(player, "AB1 Deed Issued.");
2902                         break;
2903                 case 4: //V35
2904                         createObject("object/tangible/deed/vehicle_deed/landspeeder_v35_deed.iff", pInv, "");
2905                         sendSystemMessageTestingOnly(player, "V-35 SoroSuub Carrier Deed Issued.");
2906                         break;
2907                 case 5: //XP38
2908                         createObject("object/tangible/deed/vehicle_deed/landspeeder_xp38_deed.iff", pInv, "");
2909                         sendSystemMessageTestingOnly(player, "XP38 Landspeeder Deed Issued.");
2910                         break;
2911                 case 6: //Barc Speeder
2912                         createObject("object/tangible/deed/vehicle_deed/barc_speeder_deed.iff", pInv, "");
2913                         sendSystemMessageTestingOnly(player, "Barc Speeder Deed Issued.");
2914                         break;
2915                 case 7: //AV21
2916                         createObject("object/tangible/deed/vehicle_deed/landspeeder_av21_deed.iff", pInv, "");
2917                         sendSystemMessageTestingOnly(player, "AV21 Deed Issued.");
2918                         break;
2919                 case 8: //X31
2920                         createObject("object/tangible/deed/vehicle_deed/landspeeder_x31_deed.iff", pInv, "");
2921                         sendSystemMessageTestingOnly(player, "X31 Deed Issued.");
2922                         break;
2923                 case 9: //Hover Chair
2924                         static_item.createNewItemFunction("item_tcg_loot_reward_series1_mechno_chair",pInv);
2925                         sendSystemMessageTestingOnly(player, "Mecho Chair Issued");
2926                         break;
2927                 case 10: //Sith Speeder
2928                         static_item.createNewItemFunction("tem_tcg_loot_reward_series1_sith_speeder",pInv);
2929                         sendSystemMessageTestingOnly(player, "Sith Speeder Issued.");
2930                         break;
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");
2934                         break;
2935                 case 12: //RIC-920
2936                         static_item.createNewItemFunction("item_tcg_loot_reward_series6_ric_920_speeder",pInv);
2937                         sendSystemMessageTestingOnly(player, "RIC-920 Issued");
2938                         break;
2939                 case 13: //Republic Gunship
2940                         static_item.createNewItemFunction("item_tcg_loot_reward_series7_buildreward_republic_gunship",pInv);
2941                         sendSystemMessageTestingOnly(player, "Republic Gunship Issued");
2942                         break;
2943                         static_item.createNewItemFunction("item_tcg_loot_reward_series1_organa_speeder",pInv);
2944                         sendSystemMessageTestingOnly(player, "XJ-2 Issued");
2945                         break;
2946                 default:
2947                         cleanScriptVars(player);
2948                         return SCRIPT_CONTINUE;
2950         }
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()) )
2959         {
2960                 //cleanScriptVars(player);
2961                 return SCRIPT_CONTINUE;
2962         }
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 )
2971         {
2972                 handleVehicleOption(player);
2973                 return SCRIPT_CONTINUE;
2974         }
2976         if(btn == sui.BP_CANCEL)
2977         {
2978                 cleanScriptVars(player);
2979                 closeOldWindow(player);
2980                 return SCRIPT_CONTINUE;
2981         }
2983         if ( idx == -1 || idx > MOUNT_OPTIONS.length)
2984         {
2985                 cleanScriptVars(player);
2986                 return SCRIPT_CONTINUE;
2987         }
2989         //make sure player is Valid
2990         if(!isIdValid(player))
2991         {
2992                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
2993                 cleanScriptVars(player);
2994                 return SCRIPT_OVERRIDE;
2995         }
2997         switch(idx)
2998         {
2999                 case 0:  // cupa issed
3000                         handleMount(player, "carrion_spat");
3001                         break;
3002                 case 1:  // kaadu issued
3003                         handleMount(player, "kaadu_motley");
3004                         break;
3005                 case 2:  // dewback
3006                         handleMount(player, "lesser_dewback");
3007                         break;
3008                 case 3:  // bol
3009                         handleMount(player, "bol_lesser_plains");
3010                         break;
3011                 case 4:  // falumpaset
3012                         handleMount(player, "falumpaset_plodding");
3013                         break;
3014                 case 5:  // brackaset
3015                         handleMount(player, "brackaset_lowlands");
3016                         break;
3017                 case 6:  // cu pa
3018                         handleMount(player, "cu_pa");
3019                         break;
3020                 case 7:  // bantha
3021                         handleMount(player, "dwarf_bantha");
3022                         break;
3023                 default:
3024                         cleanScriptVars(player);
3025                         return SCRIPT_CONTINUE;
3027         }
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())
3036         {
3037                 return SCRIPT_CONTINUE;
3038         }
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)
3047         {
3048                 handleVehicleOption(player);
3049                 return SCRIPT_CONTINUE;
3050         }
3052         if(btn == sui.BP_CANCEL)
3053         {
3054                 cleanScriptVars(player);
3055                 closeOldWindow(player);
3056                 return SCRIPT_CONTINUE;
3057         }
3059         string [] beasts = (!isGod(player) ? BEAST_OPTIONS_FOR_PLAYERS : BEAST_OPTIONS);
3061         if(idx == -1 || idx > beasts.length)
3062         {
3063                 cleanScriptVars(player);
3064                 return SCRIPT_CONTINUE;
3065         }
3067         //make sure player is Valid
3068         if(!isIdValid(player))
3069         {
3070                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3071                 cleanScriptVars(player);
3072                 return SCRIPT_OVERRIDE;
3073         }
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);
3094         spawnLoc.x += 2;
3095         spawnLoc.z += 2;
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);
3102         if(chance <= 0)
3103         {
3104                 // Check to see if this pet can be tamed by anyone
3105                 if(petType == pet_lib.PET_TYPE_AGGRO)
3106                 {
3107                         // Aggresive creatures can't be tamed by non-handlers
3108                         sendSystemMessage(player, pet_lib.SID_SYS_LACK_SKILL);
3109                         return;
3110                 }
3111                 else
3112                 {
3113                         if(level > 10)
3114                         {
3115                                 // Only creatures 15 or lower can be tamed by non-handlers.
3116                                 sendSystemMessage(player, pet_lib.SID_SYS_LACK_SKILL);
3117                                 return;
3118                         }
3119                 }
3120         }
3122         obj_id mount = create.object(mountType, spawnLoc);
3124         if(!hasScript(player, "ai.pet_master"))
3125         {
3126                 attachScript(player, "ai.pet_master");
3127         }
3129         if(!createNewMount(player, mount))
3130         {
3131                 destroyObject(mount);
3132         }
3133         else
3134         {
3135                 if(getMountsEnabled())
3136                 {
3137                         if(couldPetBeMadeMountable(mount) == 0)
3138                         {
3139                                 if(makePetMountable(mount))
3140                                 {
3141                                         obj_id petControlDevice = callable.getCallableCD(mount);
3142                                         setObjVar(petControlDevice, "ai.pet.trainedMount", 1);
3143                                         setObjVar(petControlDevice, "ai.pet.type", pet_lib.getPetType(mount));
3144                                 }
3145                         }
3146                         else
3147                         {
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.");
3149                         }
3150                 }
3151         }
3154 boolean createNewMount(obj_id master, obj_id pet)
3156         string creatureName = ai_lib.getCreatureName(pet);
3158         if(creatureName == null || creatureName == "")
3159         {
3160                 return false;
3161         }
3163         int petSpecies = ai_lib.aiGetSpecies(pet);
3165         if(petSpecies == -1)
3166         {
3167                 return false;
3168         }
3170         if(callable.hasCallable(master, callable.CALLABLE_TYPE_RIDEABLE))
3171         {
3172                 return false;
3173         }
3175         if(!pet_lib.hasMaxStoredPetsOfType(master, pet_lib.PET_TYPE_MOUNT))
3176         {
3177                 obj_id petControlDevice = null;
3179                 if(!callable.hasCallableCD(pet))
3180                 {
3181                         obj_id datapad = utils.getPlayerDatapad(master);
3183                         if(!isIdValid(datapad))
3184                         {
3185                                 return false;
3186                         }
3188                         string controlTemplate = "object/intangible/pet/" + utils.dataTableGetString(create.CREATURE_TABLE, creatureName, "template");
3190                         if(!controlTemplate.endsWith(".iff"))
3191                         {
3192                                 controlTemplate = pet_lib.PET_CTRL_DEVICE_TEMPLATE;
3193                         }
3195                         petControlDevice = createObject(controlTemplate, datapad, "");
3197                         if(!isIdValid(petControlDevice))
3198                         {
3199                                 petControlDevice = createObject(pet_lib.PET_CTRL_DEVICE_TEMPLATE, datapad, "");
3201                                 if(!isIdValid(petControlDevice))
3202                                 {
3203                                         sendSystemMessage(master, pet_lib.SID_SYS_TOO_MANY_STORED_PETS);
3204                                         return false;
3205                                 }
3206                         }
3208                         setObjVar(petControlDevice, "ai.pet.trainedMount", 1);
3210                         pet_lib.setUpPetControlDevice(petControlDevice, pet);
3211                 }
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);
3225                 return true;
3226         }
3228         sendSystemMessage( master, pet_lib.SID_SYS_TOO_MANY_STORED_PETS );
3230         return false;
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()) )
3246         {
3247                 //cleanScriptVars(player);
3248                 return SCRIPT_CONTINUE;
3249         }
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 )
3256         {
3257                 startCharacterBuilder(player);
3258                 return SCRIPT_CONTINUE;
3259         }
3261         if(btn == sui.BP_CANCEL)
3262         {
3263                 cleanScriptVars(player);
3264                 closeOldWindow(player);
3265                 return SCRIPT_CONTINUE;
3266         }
3268         if ( idx == -1 || idx > SHIP_OPTIONS.length)
3269         {
3270                 cleanScriptVars(player);
3271                 return SCRIPT_CONTINUE;
3272         }
3274         //make sure player is Valid
3275         if(!isIdValid(player))
3276         {
3277                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3278                 cleanScriptVars(player);
3279                 return SCRIPT_OVERRIDE;
3280         }
3282         string prompt = "Select the desired option";
3283         string title = "Character Builder Terminal";
3284         int pid = 0;
3286         switch(idx)
3287         {
3289                 case 0:
3290                         refreshMenu ( player, prompt, title, REBEL_SHIP_OPTIONS, "handleRebelShipSelect", false);
3291                         break;
3292                 case 1:
3293                         refreshMenu ( player, prompt, title, IMPERIAL_SHIP_OPTIONS, "handleImperialShipSelect", false);
3294                         break;
3295                 case 2:
3296                         refreshMenu ( player, prompt, title, FREELANCE_SHIP_OPTIONS, "handleFreelanceShipSelect", false);
3297                         break;
3298                 case 3:
3299                         refreshMenu ( player, prompt, title, OTHER_SHIP_OPTIONS, "handleOtherShipSelect", false);
3300                         break;
3301                 case 4:
3302                         refreshMenu ( player, prompt, title, MAIN_SHIP_OPTIONS, "handlePartShipSelect", false);
3303                         break;
3304                 case 5:
3305                         if(isGod(player))
3306                         {
3307                                 refreshMenu(player, prompt, title, PILOT_SKILLS, "handlePilotSkillSelect", false);
3308                         }
3309                         else
3310                         {
3311                                 sendSystemMessageTestingOnly(player, "This Option is Currently Disabled.");
3312                                 cleanScriptVars(player);
3313                         }
3314                         break;
3315                 default:
3316                         cleanScriptVars(player);
3317                         return SCRIPT_CONTINUE;
3319         }
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"))
3327         {
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"))
3333                 {
3334                         utils.setScriptVar(player, "revokePilotSkill", 1);
3335                 }
3337                 //SNIFF OUT THE ACTUAL PILOT SKILL THE PLAYER HAS
3338                 if(hasSkill(player, "pilot_rebel_navy_novice"))
3339                 {
3340                         pilotFaction = "rebel_navy";
3341                 }
3342                 else if (hasSkill(player, "pilot_imperial_navy_novice"))
3343                 {
3344                         pilotFaction = "imperial_navy";
3345                 }
3346                 else if (hasSkill(player, "pilot_neutral_novice"))
3347                 {
3348                         pilotFaction = "neutral";
3349                 }
3351                 if(!pilotFaction.equals(""))
3352                 {
3353                         for (int i = 0; i < space_skill.SKILL_NAMES.length; i++)
3354                         {
3355                                 //BASE JAVA
3356                                 skill.revokeSkill(player, "pilot_" + pilotFaction + space_skill.SKILL_NAMES[i]);
3357                         }
3358                         //remove script var for warning/retirement popup
3359                         utils.removeScriptVar(player, "revokePilotSkill");
3360                         sendSystemMessageTestingOnly(player, "Pilot Skills Revoked.");
3361                         return true;
3362                 }
3363         }
3364         return false;
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()) )
3375         {
3376                 //cleanScriptVars(player);
3377                 return SCRIPT_CONTINUE;
3378         }
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 )
3385         {
3386                 handleShipMenuSelect(player);
3387                 return SCRIPT_CONTINUE;
3388         }
3390         if(btn == sui.BP_CANCEL)
3391         {
3392                 cleanScriptVars(player);
3393                 closeOldWindow(player);
3394                 return SCRIPT_CONTINUE;
3395         }
3397         if ( idx == -1 || idx > PILOT_SKILLS.length)
3398         {
3399                 cleanScriptVars(player);
3400                 return SCRIPT_CONTINUE;
3401         }
3403         //make sure player is Valid
3404         if(!isIdValid(player))
3405         {
3406                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3407                 cleanScriptVars(player);
3408                 return SCRIPT_OVERRIDE;
3409         }
3411         boolean pilotRevoked = true;
3413         if(space_skill.hasSpaceSkills(player))
3414                 pilotRevoked = revokePilotingSkills(player);
3416         if (!pilotRevoked)
3417         {
3418                 sendSystemMessageTestingOnly(player, "The system was unable to revoke your pilot skills.");
3419                 return SCRIPT_OVERRIDE;
3420         }
3421         // Imperial skills
3422         if(idx == 0)
3423         {
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.");
3443         }
3444         else if(idx == 1) // Rebel skills
3445         {
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.");
3465         }
3466         else if(idx == 2) // Neutral skills
3467         {
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.");
3487         }
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()) )
3520         {
3521                 //cleanScriptVars(player);
3522                 return;
3523         }
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 )
3531         {
3532                 handleShipOption(player);
3533                 return;
3534         }
3536         if(btn == sui.BP_CANCEL)
3537         {
3538                 cleanScriptVars(player);
3539                 closeOldWindow(player);
3540                 return;
3541         }
3543         if ( idx == -1 || idx > options.length)
3544         {
3545                 cleanScriptVars(player);
3546                 return;
3547         }
3549         //make sure player is Valid
3550         if(!isIdValid(player))
3551         {
3552                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3553                 cleanScriptVars(player);
3554                 return;
3555         }
3557         if (space_transition.isPlayerBelowShipLimit(player))
3558         {
3559                 obj_id shipId = space_utils.createShipControlDevice(player, types[idx], false);
3560                 if (isIdValid(shipId))
3561                 {
3562                         sendSystemMessageTestingOnly(player, "Created ship (" + options[idx] + ") in datapad.");
3563                 }
3564                 else
3565                 {
3566                         sendSystemMessageTestingOnly(player, "Failed to create ship.");
3567                 }
3568         }
3569         else
3570         {
3571                 sendSystemMessageTestingOnly(player, "Failed to create ship. No room in datapad.");
3572         }
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()) )
3586         {
3587                 //cleanScriptVars(player);
3588                 return SCRIPT_CONTINUE;
3589         }
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 )
3598         {
3599                 startCharacterBuilder(player);
3600                 return SCRIPT_CONTINUE;
3601         }
3603         if(btn == sui.BP_CANCEL)
3604         {
3605                 cleanScriptVars(player);
3606                 closeOldWindow(player);
3607                 return SCRIPT_CONTINUE;
3608         }
3610         if ( idx == -1 || idx > MAIN_SHIP_OPTIONS.length)
3611         {
3612                 cleanScriptVars(player);
3613                 return SCRIPT_CONTINUE;
3614         }
3616         //make sure player is Valid
3617         if(!isIdValid(player))
3618         {
3619                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3620                 cleanScriptVars(player);
3621                 return SCRIPT_OVERRIDE;
3622         }
3623         //make sure player's inventory is valid
3624         if (!isIdValid(pInv))
3625         {
3626                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3627                 cleanScriptVars(player);
3628                 return SCRIPT_OVERRIDE;
3629         }
3630         //make sure there is room in player's inventory
3631         if (getVolumeFree(pInv) <= 0)
3632         {
3633                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3634                 cleanScriptVars(player);
3635                 return SCRIPT_OVERRIDE;
3636         }
3638         switch(idx)
3639         {
3640                 case 0:  //ship components
3641                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, SPACE_LOOT_CATEGORIES, "handleShipComponentSelection", false);
3642                         break;
3643                 case 1:  //ship chassis
3644                         string[] shipChassisArray = dataTableGetStringColumn(SHIP_CHASSIS_TBL, "name");;
3645                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, shipChassisArray, "handleShipChasisSelection", false);
3646                         break;
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);
3654                         break;
3655                 case 3: //pilot_skills
3656                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, COLLECTION_COMPONENT_SCHEMS, "handleCollectionComponentSelect", false);
3657                         break;
3658                 case 4: //pilot_skills
3659                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, PILOT_SKILLS, "handlePilotSkillSelect", false);
3660                         break;
3661                 default:
3662                         cleanScriptVars(player);
3663                         return SCRIPT_CONTINUE;
3664         }
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()) )
3676         {
3677                 return SCRIPT_CONTINUE;
3678         }
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 )
3687         {
3688                 handleShipMenuSelect(player);
3689                 return SCRIPT_CONTINUE;
3690         }
3692         if(btn == sui.BP_CANCEL)
3693         {
3694                 cleanScriptVars(player);
3695                 closeOldWindow(player);
3696                 return SCRIPT_CONTINUE;
3697         }
3699         int dataTableLength = dataTableGetNumRows(SHIP_CHASSIS_TBL);
3700         if ( idx == -1 || idx > dataTableLength)
3701         {
3702                 cleanScriptVars(player);
3703                 return SCRIPT_CONTINUE;
3704         }
3706         //make sure player is Valid
3707         if(!isIdValid(player))
3708         {
3709                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3710                 cleanScriptVars(player);
3711                 return SCRIPT_OVERRIDE;
3712         }
3713         //make sure player's inventory is valid
3714         if (!isIdValid(pInv))
3715         {
3716                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3717                 cleanScriptVars(player);
3718                 return SCRIPT_OVERRIDE;
3719         }
3720         //make sure there is room in player's inventory
3721         if (getVolumeFree(pInv) <= 0)
3722         {
3723                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3724                 cleanScriptVars(player);
3725                 return SCRIPT_OVERRIDE;
3726         }
3727         switch(idx)
3728         {
3729                 case 0:  //Booster
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);
3737                         break;
3738                 case 1:  //Capacitor
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);
3746                         break;
3747                 case 2:  //Engine
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);
3755                         break;
3756                 case 3: //Reactor
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);
3764                         break;
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);
3772                         break;
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);
3781                         break;
3782                 default:
3783                         cleanScriptVars(player);
3784                         return SCRIPT_CONTINUE;
3785         }
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()) )
3800         {
3801                 //cleanScriptVars(player);
3802                 return SCRIPT_CONTINUE;
3803         }
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 )
3812         {
3813                 handleShipMenuSelect(player);
3814                 return SCRIPT_CONTINUE;
3815         }
3817         if(btn == sui.BP_CANCEL)
3818         {
3819                 cleanScriptVars(player);
3820                 closeOldWindow(player);
3821                 return SCRIPT_CONTINUE;
3822         }
3824         int dataTableLength = dataTableGetNumRows(SHIP_CHASSIS_TBL);
3825         if ( idx == -1 || idx > dataTableLength)
3826         {
3827                 cleanScriptVars(player);
3828                 return SCRIPT_CONTINUE;
3829         }
3831         //make sure player is Valid
3832         if(!isIdValid(player))
3833         {
3834                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3835                 cleanScriptVars(player);
3836                 return SCRIPT_OVERRIDE;
3837         }
3838         //make sure player's inventory is valid
3839         if (!isIdValid(pInv))
3840         {
3841                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3842                 cleanScriptVars(player);
3843                 return SCRIPT_OVERRIDE;
3844         }
3845         //make sure there is room in player's inventory
3846         if (getVolumeFree(pInv) <= 0)
3847         {
3848                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3849                 cleanScriptVars(player);
3850                 return SCRIPT_OVERRIDE;
3851         }
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()) )
3866         {
3867                 //cleanScriptVars(player);
3868                 return SCRIPT_CONTINUE;
3869         }
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 )
3878         {
3879                 handleShipMenuSelect(player);
3880                 return SCRIPT_CONTINUE;
3881         }
3883         if(btn == sui.BP_CANCEL)
3884         {
3885                 cleanScriptVars(player);
3886                 closeOldWindow(player);
3887                 return SCRIPT_CONTINUE;
3888         }
3890         if ( idx == -1 || idx > SPACE_LOOT_CATEGORIES.length)
3891         {
3892                 cleanScriptVars(player);
3893                 return SCRIPT_CONTINUE;
3894         }
3896         //make sure player is Valid
3897         if(!isIdValid(player))
3898         {
3899                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3900                 cleanScriptVars(player);
3901                 return SCRIPT_OVERRIDE;
3902         }
3903         //make sure player's inventory is valid
3904         if (!isIdValid(pInv))
3905         {
3906                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
3907                 cleanScriptVars(player);
3908                 return SCRIPT_OVERRIDE;
3909         }
3910         //make sure there is room in player's inventory
3911         if (getVolumeFree(pInv) <= 0)
3912         {
3913                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
3914                 cleanScriptVars(player);
3915                 return SCRIPT_OVERRIDE;
3916         }
3917         switch(idx)
3918         {
3919                 case 0:  //armor
3920                         string armorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ARMOR_TBL, "strName");
3921                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, armorMenuArray, "handleShipComponentArmorSelection", false);
3922                         break;
3923                 case 1:  //booster
3924                         string boosterMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_BOOSTER_TBL, "strName");
3925                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, boosterMenuArray, "handleShipComponentBoosterSelection", false);
3926                         break;
3927                 case 2:  //droid_interface
3928                         string droidInterfaceMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_DROIDINTERFACE_TBL, "strName");
3929                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, droidInterfaceMenuArray, "handleShipComponentDroidInterfaceSelection", false);
3930                         break;
3931                 case 3:  //engine
3932                         string engineMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_ENGINE_TBL, "strName");
3933                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, engineMenuArray, "handleShipComponentEngineSelection", false);
3934                         break;
3935                 case 4:  //reactor
3936                         string reactorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_REACTOR_TBL, "strName");
3937                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, reactorMenuArray, "handleShipComponentReactorSelection", false);
3938                         break;
3939                 case 5:  //shield_generator
3940                         string shieldMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_SHIELD_TBL, "strName");
3941                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, shieldMenuArray, "handleShipComponentShieldSelection", false);
3942                         break;
3943                 case 6:  //weapon
3944                         string weaponMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_WEAPON_TBL, "strName");
3945                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, weaponMenuArray, "handleShipComponentWeaponSelection", false);
3946                         break;
3947                 case 7:  //weapon_capacitor
3948                         string capacitorMenuArray[] = dataTableGetStringColumn(SHIPCOMPONENT_CAPACITOR_TBL, "strName");
3949                         refreshMenu(player, GENERIC_PROMPT, GENERIC_TITLE, capacitorMenuArray, "handleShipComponentCapacitorSelection", false);
3950                         break;
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);
3954                         break;
3956                 default:
3957                         cleanScriptVars(player);
3958                         return SCRIPT_CONTINUE;
3959         }
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()) )
3972         {
3973                 //cleanScriptVars(player);
3974                 return SCRIPT_CONTINUE;
3975         }
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 )
3984         {
3985                 handleShipComponentSelection(player);
3986                 return SCRIPT_CONTINUE;
3987         }
3989         if(btn == sui.BP_CANCEL)
3990         {
3991                 cleanScriptVars(player);
3992                 closeOldWindow(player);
3993                 return SCRIPT_CONTINUE;
3994         }
3996         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_ARMOR_TBL);
3997         if ( idx == -1 || idx > dataTableLength)
3998         {
3999                 cleanScriptVars(player);
4000                 return SCRIPT_CONTINUE;
4001         }
4003         //make sure player is Valid
4004         if(!isIdValid(player))
4005         {
4006                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4007                 cleanScriptVars(player);
4008                 return SCRIPT_OVERRIDE;
4009         }
4010         //make sure player's inventory is valid
4011         if (!isIdValid(pInv))
4012         {
4013                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4014                 cleanScriptVars(player);
4015                 return SCRIPT_OVERRIDE;
4016         }
4017         //make sure there is room in player's inventory
4018         if (getVolumeFree(pInv) <= 0)
4019         {
4020                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4021                 cleanScriptVars(player);
4022                 return SCRIPT_OVERRIDE;
4023         }
4024         string objString = dataTableGetString(SHIPCOMPONENT_ARMOR_TBL, idx, "strType");
4025         obj_id objectOID = createObject(objString, pInv, "");
4027         if(!isIdValid(objectOID))
4028         {
4029                 sendSystemMessage(player, "The component could not be created", null);
4030                 return SCRIPT_CONTINUE;
4031         }
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()) )
4048         {
4049                 //cleanScriptVars(player);
4050                 return SCRIPT_CONTINUE;
4051         }
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 )
4060         {
4061                 handleShipComponentSelection(player);
4062                 return SCRIPT_CONTINUE;
4063         }
4065         if(btn == sui.BP_CANCEL)
4066         {
4067                 cleanScriptVars(player);
4068                 closeOldWindow(player);
4069                 return SCRIPT_CONTINUE;
4070         }
4072         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_BOOSTER_TBL);
4073         if ( idx == -1 || idx > dataTableLength)
4074         {
4075                 cleanScriptVars(player);
4076                 return SCRIPT_CONTINUE;
4077         }
4079         //make sure player is Valid
4080         if(!isIdValid(player))
4081         {
4082                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4083                 cleanScriptVars(player);
4084                 return SCRIPT_OVERRIDE;
4085         }
4086         //make sure player's inventory is valid
4087         if (!isIdValid(pInv))
4088         {
4089                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4090                 cleanScriptVars(player);
4091                 return SCRIPT_OVERRIDE;
4092         }
4093         //make sure there is room in player's inventory
4094         if (getVolumeFree(pInv) <= 0)
4095         {
4096                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4097                 cleanScriptVars(player);
4098                 return SCRIPT_OVERRIDE;
4099         }
4100         string objectString = dataTableGetString(SHIPCOMPONENT_BOOSTER_TBL, idx, "strType");
4101         obj_id objectOID = createObject(objectString, pInv, "");
4103         if(!isIdValid(objectOID))
4104         {
4105                 sendSystemMessage(player, "The component could not be created", null);
4106                 return SCRIPT_CONTINUE;
4107         }
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()) )
4124         {
4125                 //cleanScriptVars(player);
4126                 return SCRIPT_CONTINUE;
4127         }
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 )
4136         {
4137                 handleShipComponentSelection(player);
4138                 return SCRIPT_CONTINUE;
4139         }
4141         if(btn == sui.BP_CANCEL)
4142         {
4143                 cleanScriptVars(player);
4144                 closeOldWindow(player);
4145                 return SCRIPT_CONTINUE;
4146         }
4148         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_CAPACITOR_TBL);
4149         if ( idx == -1 || idx > dataTableLength)
4150         {
4151                 cleanScriptVars(player);
4152                 return SCRIPT_CONTINUE;
4153         }
4155         //make sure player is Valid
4156         if(!isIdValid(player))
4157         {
4158                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4159                 cleanScriptVars(player);
4160                 return SCRIPT_OVERRIDE;
4161         }
4162         //make sure player's inventory is valid
4163         if (!isIdValid(pInv))
4164         {
4165                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4166                 cleanScriptVars(player);
4167                 return SCRIPT_OVERRIDE;
4168         }
4169         //make sure there is room in player's inventory
4170         if (getVolumeFree(pInv) <= 0)
4171         {
4172                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4173                 cleanScriptVars(player);
4174                 return SCRIPT_OVERRIDE;
4175         }
4176         string objectString = dataTableGetString(SHIPCOMPONENT_CAPACITOR_TBL, idx, "strType");
4177         obj_id objectOID = createObject(objectString, pInv, "");
4179         if(!isIdValid(objectOID))
4180         {
4181                 sendSystemMessage(player, "The component could not be created", null);
4182                 return SCRIPT_CONTINUE;
4183         }
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()) )
4200         {
4201                 //cleanScriptVars(player);
4202                 return SCRIPT_CONTINUE;
4203         }
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 )
4212         {
4213                 handleShipComponentSelection(player);
4214                 return SCRIPT_CONTINUE;
4215         }
4217         if(btn == sui.BP_CANCEL)
4218         {
4219                 cleanScriptVars(player);
4220                 closeOldWindow(player);
4221                 return SCRIPT_CONTINUE;
4222         }
4224         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_DROIDINTERFACE_TBL);
4225         if ( idx == -1 || idx > dataTableLength)
4226         {
4227                 cleanScriptVars(player);
4228                 return SCRIPT_CONTINUE;
4229         }
4231         //make sure player is Valid
4232         if(!isIdValid(player))
4233         {
4234                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4235                 cleanScriptVars(player);
4236                 return SCRIPT_OVERRIDE;
4237         }
4238         //make sure player's inventory is valid
4239         if (!isIdValid(pInv))
4240         {
4241                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4242                 cleanScriptVars(player);
4243                 return SCRIPT_OVERRIDE;
4244         }
4245         //make sure there is room in player's inventory
4246         if (getVolumeFree(pInv) <= 0)
4247         {
4248                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4249                 cleanScriptVars(player);
4250                 return SCRIPT_OVERRIDE;
4251         }
4252         string objectString = dataTableGetString(SHIPCOMPONENT_DROIDINTERFACE_TBL, idx, "strType");
4253         obj_id objectOID = createObject(objectString, pInv, "");
4255         if(!isIdValid(objectOID))
4256         {
4257                 sendSystemMessage(player, "The component could not be created", null);
4258                 return SCRIPT_CONTINUE;
4259         }
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()) )
4276         {
4277                 //cleanScriptVars(player);
4278                 return SCRIPT_CONTINUE;
4279         }
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 )
4288         {
4289                 handleShipComponentSelection(player);
4290                 return SCRIPT_CONTINUE;
4291         }
4293         if(btn == sui.BP_CANCEL)
4294         {
4295                 cleanScriptVars(player);
4296                 closeOldWindow(player);
4297                 return SCRIPT_CONTINUE;
4298         }
4300         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_ENGINE_TBL);
4301         if ( idx == -1 || idx > dataTableLength)
4302         {
4303                 cleanScriptVars(player);
4304                 return SCRIPT_CONTINUE;
4305         }
4307         //make sure player is Valid
4308         if(!isIdValid(player))
4309         {
4310                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4311                 cleanScriptVars(player);
4312                 return SCRIPT_OVERRIDE;
4313         }
4314         //make sure player's inventory is valid
4315         if (!isIdValid(pInv))
4316         {
4317                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4318                 cleanScriptVars(player);
4319                 return SCRIPT_OVERRIDE;
4320         }
4321         //make sure there is room in player's inventory
4322         if (getVolumeFree(pInv) <= 0)
4323         {
4324                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4325                 cleanScriptVars(player);
4326                 return SCRIPT_OVERRIDE;
4327         }
4328         string objectString = dataTableGetString(SHIPCOMPONENT_ENGINE_TBL, idx, "strType");
4329         obj_id objectOID = createObject(objectString, pInv, "");
4331         if(!isIdValid(objectOID))
4332         {
4333                 sendSystemMessage(player, "The component could not be created", null);
4334                 return SCRIPT_CONTINUE;
4335         }
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()) )
4352         {
4353                 //cleanScriptVars(player);
4354                 return SCRIPT_CONTINUE;
4355         }
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 )
4364         {
4365                 handleShipComponentSelection(player);
4366                 return SCRIPT_CONTINUE;
4367         }
4369         if(btn == sui.BP_CANCEL)
4370         {
4371                 cleanScriptVars(player);
4372                 closeOldWindow(player);
4373                 return SCRIPT_CONTINUE;
4374         }
4376         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_REACTOR_TBL);
4377         if ( idx == -1 || idx > dataTableLength)
4378         {
4379                 cleanScriptVars(player);
4380                 return SCRIPT_CONTINUE;
4381         }
4383         //make sure player is Valid
4384         if(!isIdValid(player))
4385         {
4386                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4387                 cleanScriptVars(player);
4388                 return SCRIPT_OVERRIDE;
4389         }
4390         //make sure player's inventory is valid
4391         if (!isIdValid(pInv))
4392         {
4393                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4394                 cleanScriptVars(player);
4395                 return SCRIPT_OVERRIDE;
4396         }
4397         //make sure there is room in player's inventory
4398         if (getVolumeFree(pInv) <= 0)
4399         {
4400                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4401                 cleanScriptVars(player);
4402                 return SCRIPT_OVERRIDE;
4403         }
4404         string objectString = dataTableGetString(SHIPCOMPONENT_REACTOR_TBL, idx, "strType");
4405         obj_id objectOID = createObject(objectString, pInv, "");
4407         if(!isIdValid(objectOID))
4408         {
4409                 sendSystemMessage(player, "The component could not be created", null);
4410                 return SCRIPT_CONTINUE;
4411         }
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()) )
4428         {
4429                 //cleanScriptVars(player);
4430                 return SCRIPT_CONTINUE;
4431         }
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 )
4440         {
4441                 handleShipComponentSelection(player);
4442                 return SCRIPT_CONTINUE;
4443         }
4445         if(btn == sui.BP_CANCEL)
4446         {
4447                 cleanScriptVars(player);
4448                 closeOldWindow(player);
4449                 return SCRIPT_CONTINUE;
4450         }
4452         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_SHIELD_TBL);
4453         if ( idx == -1 || idx > dataTableLength)
4454         {
4455                 cleanScriptVars(player);
4456                 return SCRIPT_CONTINUE;
4457         }
4459         //make sure player is Valid
4460         if(!isIdValid(player))
4461         {
4462                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4463                 cleanScriptVars(player);
4464                 return SCRIPT_OVERRIDE;
4465         }
4466         //make sure player's inventory is valid
4467         if (!isIdValid(pInv))
4468         {
4469                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4470                 cleanScriptVars(player);
4471                 return SCRIPT_OVERRIDE;
4472         }
4473         //make sure there is room in player's inventory
4474         if (getVolumeFree(pInv) <= 0)
4475         {
4476                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4477                 cleanScriptVars(player);
4478                 return SCRIPT_OVERRIDE;
4479         }
4480         string objectString = dataTableGetString(SHIPCOMPONENT_SHIELD_TBL, idx, "strType");
4481         obj_id objectOID = createObject(objectString, pInv, "");
4483         if(!isIdValid(objectOID))
4484         {
4485                 sendSystemMessage(player, "The component could not be created", null);
4486                 return SCRIPT_CONTINUE;
4487         }
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()) )
4503         {
4504                 //cleanScriptVars(player);
4505                 return SCRIPT_CONTINUE;
4506         }
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 )
4515         {
4516                 handleShipComponentSelection(player);
4517                 return SCRIPT_CONTINUE;
4518         }
4520         if(btn == sui.BP_CANCEL)
4521         {
4522                 cleanScriptVars(player);
4523                 closeOldWindow(player);
4524                 return SCRIPT_CONTINUE;
4525         }
4527         int dataTableLength = dataTableGetNumRows(SHIPCOMPONENT_WEAPON_TBL);
4528         if ( idx == -1 || idx > dataTableLength)
4529         {
4530                 cleanScriptVars(player);
4531                 return SCRIPT_CONTINUE;
4532         }
4534         //make sure player is Valid
4535         if(!isIdValid(player))
4536         {
4537                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4538                 cleanScriptVars(player);
4539                 return SCRIPT_OVERRIDE;
4540         }
4541         //make sure player's inventory is valid
4542         if (!isIdValid(pInv))
4543         {
4544                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4545                 cleanScriptVars(player);
4546                 return SCRIPT_OVERRIDE;
4547         }
4548         //make sure there is room in player's inventory
4549         if (getVolumeFree(pInv) <= 0)
4550         {
4551                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4552                 cleanScriptVars(player);
4553                 return SCRIPT_OVERRIDE;
4554         }
4555         string objectString = dataTableGetString(SHIPCOMPONENT_WEAPON_TBL, idx, "strType");
4556         obj_id objectOID = createObject(objectString, pInv, "");
4558         if(!isIdValid(objectOID))
4559         {
4560                 sendSystemMessage(player, "The component could not be created", null);
4561                 return SCRIPT_CONTINUE;
4562         }
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()) )
4581         {
4582                 //cleanScriptVars(player);
4583                 return SCRIPT_CONTINUE;
4584         }
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 )
4593         {
4594                 startCharacterBuilder(player);
4595                 return SCRIPT_CONTINUE;
4596         }
4598         if(btn == sui.BP_CANCEL)
4599         {
4600                 cleanScriptVars(player);
4601                 closeOldWindow(player);
4602                 return SCRIPT_CONTINUE;
4603         }
4605         if ( idx == -1 || idx > DEED_OPTIONS.length)
4606         {
4607                 cleanScriptVars(player);
4608                 return SCRIPT_CONTINUE;
4609         }
4611         //make sure player is Valid
4612         if(!isIdValid(player))
4613         {
4614                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4615                 cleanScriptVars(player);
4616                 return SCRIPT_OVERRIDE;
4617         }
4618         //make sure player's inventory is valid
4619         if (!isIdValid(pInv))
4620         {
4621                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4622                 cleanScriptVars(player);
4623                 return SCRIPT_OVERRIDE;
4624         }
4625         //make sure there is room in player's inventory
4626         if (getVolumeFree(pInv) <= 0)
4627         {
4628                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4629                 cleanScriptVars(player);
4630                 return SCRIPT_OVERRIDE;
4631         }
4634         switch(idx)
4635         {
4636                 case 0:  // clothing factory
4637                         createObject("object/tangible/deed/factory_deed/clothing_factory_deed.iff", pInv, "");
4638                         sendSystemMessageTestingOnly(player, "Clothing Factory Deed Issued.");
4639                         break;
4640                 case 1:  // food factory
4641                         createObject("object/tangible/deed/factory_deed/food_factory_deed.iff", pInv, "");
4642                         sendSystemMessageTestingOnly(player, "Food Factory Deed Issued.");
4643                         break;
4644                 case 2:  // equipment factory
4645                         createObject("object/tangible/deed/factory_deed/item_factory_deed.iff", pInv, "");
4646                         sendSystemMessageTestingOnly(player, "Item Factory Deed Issued.");
4647                         break;
4648                 case 3:  // structure factory
4649                         createObject("object/tangible/deed/factory_deed/structure_factory_deed.iff", pInv, "");
4650                         sendSystemMessageTestingOnly(player, "Structure Factory Deed Issued.");
4651                         break;
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.");
4655                         break;
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.");
4659                         break;
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.");
4663                         break;
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.");
4667                         break;
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.");
4671                         break;
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))
4676                         {
4677                                 setObjVar (mineral, "player_structure.deed.maxExtractionRate", 13);
4678                                 setObjVar (mineral, "player_structure.deed.currentExtractionRate", 13);
4679                         }
4680                         break;
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))
4685                         {
4686                                 setObjVar (flora, "player_structure.deed.maxExtractionRate", 13);
4687                                 setObjVar (flora, "player_structure.deed.currentExtractionRate", 13);
4688                         }
4689                         break;
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.");
4693                         if(isIdValid(gas))
4694                         {
4695                                 setObjVar (gas, "player_structure.deed.maxExtractionRate", 13);
4696                                 setObjVar (gas, "player_structure.deed.currentExtractionRate", 13);
4697                         }
4698                         break;
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))
4703                         {
4704                                 setObjVar (chemical, "player_structure.deed.maxExtractionRate", 13);
4705                                 setObjVar (chemical, "player_structure.deed.currentExtractionRate", 13);
4706                         }
4707                         break;
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))
4712                         {
4713                                 setObjVar (moisture, "player_structure.deed.maxExtractionRate", 13);
4714                                 setObjVar (moisture, "player_structure.deed.currentExtractionRate", 13);
4715                         }
4716                         break;
4717                 case 14:  // Fusion
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))
4721                         {
4722                                 setObjVar (fusion, "player_structure.deed.maxExtractionRate", 16);
4723                                 setObjVar (fusion, "player_structure.deed.currentExtractionRate", 16);
4724                         }
4725                         break;
4726                 case 15:
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");
4736                         break;
4737                 case 16:
4738                         //Naboo City Pack
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");
4747                         break;
4748                 case 17:
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");
4758                         break;
4759                 default:
4760                         cleanScriptVars(player);
4761                         return SCRIPT_CONTINUE;
4763         }
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()) )
4781         {
4782                 //cleanScriptVars(player);
4783                 return SCRIPT_CONTINUE;
4784         }
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 )
4793         {
4794                 startCharacterBuilder(player);
4795                 return SCRIPT_CONTINUE;
4796         }
4798         if(btn == sui.BP_CANCEL)
4799         {
4800                 cleanScriptVars(player);
4801                 closeOldWindow(player);
4802                 return SCRIPT_CONTINUE;
4803         }
4805         if ( idx == -1 || idx > CRAFTING_OPTIONS.length)
4806         {
4807                 cleanScriptVars(player);
4808                 return SCRIPT_CONTINUE;
4809         }
4811         //make sure player is Valid
4812         if(!isIdValid(player))
4813         {
4814                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4815                 cleanScriptVars(player);
4816                 return SCRIPT_OVERRIDE;
4817         }
4818         //make sure player's inventory is valid
4819         if (!isIdValid(pInv))
4820         {
4821                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4822                 cleanScriptVars(player);
4823                 return SCRIPT_OVERRIDE;
4824         }
4825         //make sure there is room in player's inventory
4826         if (getVolumeFree(pInv) <= 0)
4827         {
4828                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4829                 cleanScriptVars(player);
4830                 return SCRIPT_OVERRIDE;
4831         }
4834         switch(idx)
4835         {
4836                 case 0:  // weapon station
4837                         createObject("object/tangible/crafting/station/weapon_station.iff", pInv, "");
4838                         sendSystemMessageTestingOnly(player, "Weapon Crafting Station Issued.");
4839                         break;
4840                 case 1:  // structure station
4841                         createObject("object/tangible/crafting/station/structure_station.iff", pInv, "");
4842                         sendSystemMessageTestingOnly(player, "Structure Crafting Station Issued.");
4843                         break;
4844                 case 2:  // clothing station
4845                         createObject("object/tangible/crafting/station/clothing_station.iff", pInv, "");
4846                         sendSystemMessageTestingOnly(player, "Clothing Crafting Station Issued.");
4847                         break;
4848                 case 3:  // food station
4849                         createObject("object/tangible/crafting/station/food_station.iff", pInv, "");
4850                         sendSystemMessageTestingOnly(player, "Food Crafting Station Issued.");
4851                         break;
4852                 case 4:  // generic crafting tool
4853                         createObject("object/tangible/crafting/station/generic_tool.iff", pInv, "");
4854                         sendSystemMessageTestingOnly(player, "Generic Crafting Tool Issued.");
4855                         break;
4856                 case 5:  // weapon crafting tool
4857                         createObject("object/tangible/crafting/station/weapon_tool.iff", pInv, "");
4858                         sendSystemMessageTestingOnly(player, "Weapon Crafting Tool Issued.");
4859                         break;
4860                 case 6:  // structure crafting tool
4861                         createObject("object/tangible/crafting/station/structure_tool.iff", pInv, "");
4862                         sendSystemMessageTestingOnly(player, "Structure Crafting Tool Issued.");
4863                         break;
4864                 case 7:  // clothing crafting tool
4865                         createObject("object/tangible/crafting/station/clothing_tool.iff", pInv, "");
4866                         sendSystemMessageTestingOnly(player, "Clothing Crafting Tool Issued.");
4867                         break;
4868                 case 8:  // food crafting tool
4869                         createObject("object/tangible/crafting/station/food_tool.iff", pInv, "");
4870                         sendSystemMessageTestingOnly(player, "Food Crafting Tool Issued.");
4871                         break;
4872                 case 9:
4873                         createObject("object/tangible/crafting/station/space_tool.iff", pInv, "");
4874                         sendSystemMessageTestingOnly(player, "Ship Crafting Tool Issued.");
4875                         break;
4876                 case 10:
4877                         createObject("object/tangible/crafting/station/space_station.iff", pInv, "");
4878                         sendSystemMessageTestingOnly(player, "Ship Crafting Station Issued.");
4879                         break;
4880                 default:
4881                         cleanScriptVars(player);
4882                         return SCRIPT_CONTINUE;
4884         }
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()) )
4902         {
4903                 //cleanScriptVars(player);
4904                 return SCRIPT_CONTINUE;
4905         }
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 )
4913         {
4914                 startCharacterBuilder(player);
4915                 return SCRIPT_CONTINUE;
4916         }
4918         if(btn == sui.BP_CANCEL)
4919         {
4920                 cleanScriptVars(player);
4921                 closeOldWindow(player);
4922                 return SCRIPT_CONTINUE;
4923         }
4925         if ( idx == -1 || idx > PA_OPTIONS.length)
4926         {
4927                 cleanScriptVars(player);
4928                 return SCRIPT_CONTINUE;
4929         }
4931         //make sure player is Valid
4932         if(!isIdValid(player))
4933         {
4934                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4935                 cleanScriptVars(player);
4936                 return SCRIPT_OVERRIDE;
4937         }
4938         //make sure player's inventory is valid
4939         if (!isIdValid(pInv))
4940         {
4941                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
4942                 cleanScriptVars(player);
4943                 return SCRIPT_OVERRIDE;
4944         }
4945         //make sure there is room in player's inventory
4946         if (getVolumeFree(pInv) <= 0)
4947         {
4948                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
4949                 cleanScriptVars(player);
4950                 return SCRIPT_OVERRIDE;
4951         }
4954         switch(idx)
4955         {
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.");
4959                         break;
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.");
4963                         break;
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.");
4967                         break;
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.");
4971                         break;
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.");
4975                         break;
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.");
4979                         break;
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.");
4983                         break;
4984                 default:
4985                         cleanScriptVars(player);
4986                         return SCRIPT_CONTINUE;
4988         }
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()) )
5008         {
5009                 //cleanScriptVars(player);
5010                 return SCRIPT_CONTINUE;
5011         }
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 )
5018         {
5019                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
5020                 return SCRIPT_CONTINUE;
5021         }
5023         if(btn == sui.BP_CANCEL)
5024         {
5025                 cleanScriptVars(player);
5026                 closeOldWindow(player);
5027                 return SCRIPT_CONTINUE;
5028         }
5030         if ( idx == -1 || idx > WEAPON_OPTIONS.length)
5031         {
5032                 cleanScriptVars(player);
5033                 return SCRIPT_CONTINUE;
5034         }
5036         //make sure player is Valid
5037         if(!isIdValid(player))
5038         {
5039                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5040                 cleanScriptVars(player);
5041                 return SCRIPT_OVERRIDE;
5042         }
5045         switch(idx)
5046         {
5048                 case 0:
5049                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", PISTOL_OPTIONS, "handlePistolSelect", false);
5050                         break;
5051                 case 1:
5052                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", CARBINE_OPTIONS, "handleCarbineSelect", false);
5053                         break;
5054                 case 2:
5055                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", RIFLE_OPTIONS, "handleRifleSelect", false);
5056                         break;
5057                 case 3:
5058                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", HEAVY_WEAPON_OPTIONS, "handleHeavySelect", false);
5059                         break;
5060                 case 4:
5061                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", UNARMED_OPTIONS, "handleUnarmedSelect", false);
5062                         break;
5063                 case 5:
5064                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", ONEHANDED_OPTIONS, "handleOneHandedSelect", false);
5065                         break;
5066                 case 6:
5067                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", TWOHANDED_OPTIONS, "handleTwoHandedSelect", false);
5068                         break;
5069                 case 7:
5070                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", POLEARM_OPTIONS, "handlePolearmSelect", false);
5071                         break;
5072                 case 8:
5073                         refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", BATTLEFIELD_WEAPON_OPTIONS, "handleBattlefieldSelect", false);
5074                         break;
5075 //              case 9:
5076 //                      refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", GRENADE_OPTIONS, "handleGrenadeSelect", false);
5077 //                      break;
5078                 default:
5079                         cleanScriptVars(player);
5080                         return SCRIPT_CONTINUE;
5082         }
5084         return SCRIPT_CONTINUE;
5086 messageHandler handlePistolSelect()
5089         if ( (params == null) || (params.isEmpty()) )
5090         {
5091                 //cleanScriptVars(player);
5092                 return SCRIPT_CONTINUE;
5093         }
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)
5102         {
5103                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5104                 return SCRIPT_CONTINUE;
5105         }
5107         if(btn == sui.BP_CANCEL)
5108         {
5109                 cleanScriptVars(player);
5110                 closeOldWindow(player);
5111                 return SCRIPT_CONTINUE;
5112         }
5115         if ( idx == -1 || idx > PISTOL_OPTIONS.length)
5116         {
5117                 cleanScriptVars(player);
5118                 return SCRIPT_CONTINUE;
5119         }
5121         //make sure player is Valid
5122         if(!isIdValid(player))
5123         {
5124                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5125                 cleanScriptVars(player);
5126                 return SCRIPT_OVERRIDE;
5127         }
5128         //make sure player's inventory is valid
5129         if (!isIdValid(pInv))
5130         {
5131                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5132                 cleanScriptVars(player);
5133                 return SCRIPT_OVERRIDE;
5134         }
5135         //make sure there is room in player's inventory
5136         if (getVolumeFree(pInv) <= 0)
5137         {
5138                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5139                 cleanScriptVars(player);
5140                 return SCRIPT_OVERRIDE;
5141         }
5143         string weapon = "";
5145         switch(idx)
5146         {
5147                 case 0:  // cdef
5148                         weapon = "object/weapon/ranged/pistol/pistol_cdef.iff";
5149                         break;
5150                 case 1:  // scout blaster
5151                         weapon = "object/weapon/ranged/pistol/pistol_scout_blaster.iff";
5152                         break;
5153                 case 2:  // sonic blaster
5154                         weapon = "object/weapon/ranged/pistol/pistol_geonosian_sonic_blaster_loot.iff";
5155                         break;
5156                 case 3:  // republic blaster
5157                         weapon = "object/weapon/ranged/pistol/pistol_republic_blaster.iff";
5158                         break;
5159                 case 4:  // launcher
5160                         weapon = "object/weapon/ranged/pistol/pistol_launcher.iff";
5161                         break;
5162                 case 5:  // scatter
5163                         weapon = "object/weapon/ranged/pistol/pistol_scatter.iff";
5164                         break;
5165                 case 6:  // light scatter
5166                         weapon = "object/weapon/ranged/pistol/pistol_scatter_light.iff";
5167                         break;
5168                 case 7:  // sr combat
5169                         weapon = "object/weapon/ranged/pistol/pistol_srcombat.iff";
5170                         break;
5171                 case 8:  // striker
5172                         weapon = "object/weapon/ranged/pistol/pistol_striker.iff";
5173                         break;
5174                 case 9:  // tangle
5175                         weapon = "object/weapon/ranged/pistol/pistol_tangle.iff";
5176                         break;
5177                 case 10:  // power5
5178                         weapon = "object/weapon/ranged/pistol/pistol_power5.iff";
5179                         break;
5180                 case 11:  // fwg5
5181                         weapon = "object/weapon/ranged/pistol/pistol_fwg5.iff";
5182                         break;
5183                 case 12:  // dx2
5184                         weapon = "object/weapon/ranged/pistol/pistol_dx2.iff";
5185                         break;
5186                 case 13:  // dl44 XT
5187                         weapon = "object/weapon/ranged/pistol/pistol_dl44_metal.iff";
5188                         break;
5189                 case 14:  // dl44
5190                         weapon = "object/weapon/ranged/pistol/pistol_dl44.iff";
5191                         break;
5192                 case 15:  // dh17
5193                         weapon = "object/weapon/ranged/pistol/pistol_dh17.iff";
5194                         break;
5195                 case 16:  // d18
5196                         weapon = "object/weapon/ranged/pistol/pistol_d18.iff";
5197                         break;
5198                 case 17:  // alliance disruptor
5199                         weapon = "object/weapon/ranged/pistol/pistol_alliance_disruptor.iff";
5200                         break;
5201                 case 18:  // deathhammer
5202                         weapon = "object/weapon/ranged/pistol/pistol_deathhammer.iff";
5203                         break;
5204                 case 19:  // flare pistol
5205                         weapon = "object/weapon/ranged/pistol/pistol_flare.iff";
5206                         break;
5207                 case 20:  // flechette pistol
5208                         weapon = "object/weapon/ranged/pistol/pistol_flechette.iff";
5209                         break;
5210                 case 21:  // intimidator
5211                         weapon = "object/weapon/ranged/pistol/pistol_intimidator.iff";
5212                         break;
5213                 case 22:  // jawa pistol
5214                         weapon = "object/weapon/ranged/pistol/pistol_jawa.iff";
5215                         break;
5216                 case 23:  // renegade pistol
5217                         weapon = "object/weapon/ranged/pistol/pistol_renegade.iff";
5218                         break;
5219                 case 24: // DE-10
5220                         weapon = "object/weapon/ranged/pistol/pistol_de_10.iff";
5221                         break;
5222                 case 25: // DL44 Metal
5223                         weapon = "object/weapon/ranged/pistol/pistol_dl44_metal_light.iff";
5224                         break;
5225                 case 26: // Disruptor
5226                         weapon = "object/weapon/ranged/pistol/som_disruptor_pistol.iff";
5227                         break;
5228                 case 27: // Ion Relic
5229                         weapon = "object/weapon/ranged/pistol/som_ion_relic_pistol.iff";
5230                         break;
5231                 case 28: // heroic SD
5232                         weapon = "object/weapon/ranged/pistol/pistol_heroic_sd.iff";
5233                         break;
5234                 default:
5235                         cleanScriptVars(player);
5236                         return SCRIPT_CONTINUE;
5237         }
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()) )
5249         {
5250                 //cleanScriptVars(player);
5251                 return SCRIPT_CONTINUE;
5252         }
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 )
5261         {
5262                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5263                 return SCRIPT_CONTINUE;
5264         }
5266         if(btn == sui.BP_CANCEL)
5267         {
5268                 cleanScriptVars(player);
5269                 closeOldWindow(player);
5270                 return SCRIPT_CONTINUE;
5271         }
5274         if ( idx == -1 || idx > CARBINE_OPTIONS.length)
5275         {
5276                 cleanScriptVars(player);
5277                 return SCRIPT_CONTINUE;
5278         }
5280         //make sure player is Valid
5281         if(!isIdValid(player))
5282         {
5283                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5284                 cleanScriptVars(player);
5285                 return SCRIPT_OVERRIDE;
5286         }
5287         //make sure player's inventory is valid
5288         if (!isIdValid(pInv))
5289         {
5290                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5291                 cleanScriptVars(player);
5292                 return SCRIPT_OVERRIDE;
5293         }
5294         //make sure there is room in player's inventory
5295         if (getVolumeFree(pInv) <= 0)
5296         {
5297                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5298                 cleanScriptVars(player);
5299                 return SCRIPT_OVERRIDE;
5300         }
5302         string weapon = "";
5304         switch(idx)
5305         {
5306                 case 0:  // cdef
5307                         weapon = "object/weapon/ranged/carbine/carbine_cdef.iff";
5308                         break;
5309                 case 1:  // dh17
5310                         weapon = "object/weapon/ranged/carbine/carbine_dh17.iff";
5311                         break;
5312                 case 2:  // dh17 snubnose
5313                         weapon = "object/weapon/ranged/carbine/carbine_dh17_snubnose.iff";
5314                         break;
5315                 case 3:  // e11
5316                         weapon = "object/weapon/ranged/carbine/carbine_e11.iff";
5317                         break;
5318                 case 4:  // e11 mark 2
5319                         weapon = "object/weapon/ranged/carbine/carbine_e11_mark2.iff";
5320                         break;
5321                 case 5:  // laser
5322                         weapon = "object/weapon/ranged/carbine/carbine_laser.iff";
5323                         break;
5324                 case 6:  // dxr6
5325                         weapon = "object/weapon/ranged/carbine/carbine_dxr6.iff";
5326                         break;
5327                 case 7:  // ee3 carbine
5328                         weapon = "object/weapon/ranged/carbine/carbine_ee3.iff";
5329                         break;
5330                 case 8:  // elite
5331                         weapon = "object/weapon/ranged/carbine/carbine_elite.iff";
5332                         break;
5333                 case 9:  // nyms
5334                         weapon = "object/weapon/ranged/carbine/carbine_nym_slugthrower.iff";
5335                         break;
5336                 case 10:  // alliance needler
5337                         weapon = "object/weapon/ranged/carbine/carbine_alliance_needler.iff";
5338                         break;
5339                 case 11:  // bothan bola
5340                         weapon = "object/weapon/ranged/carbine/carbine_bothan_bola.iff";
5341                         break;
5342                 case 12:  // e 5
5343                         weapon ="object/weapon/ranged/carbine/carbine_e5.iff";
5344                         break;
5345                 case 13:  // geonosian
5346                         weapon = "object/weapon/ranged/carbine/carbine_geo.iff";
5347                         break;
5348                 case 14:  // proton
5349                         weapon = "object/weapon/ranged/carbine/carbine_proton.iff";
5350                         break;
5351                 case 15:  // czerka
5352                         weapon = "object/weapon/ranged/carbine/carbine_czerka_dart.iff";
5353                         break;
5354                 case 16:  // sfor
5355                         weapon = "object/weapon/ranged/carbine/som_carbine_republic_sfor.iff";
5356                         break;
5357                 case 17:  // heroic sd
5358                         weapon = "object/weapon/ranged/carbine/carbine_heroic_sd.iff";
5359                         break;
5360                 default:
5361                         cleanScriptVars(player);
5362                         return SCRIPT_CONTINUE;
5363         }
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()) )
5375         {
5376                 //cleanScriptVars(player);
5377                 return SCRIPT_CONTINUE;
5378         }
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 )
5387         {
5388                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5389                 return SCRIPT_CONTINUE;
5390         }
5392         if(btn == sui.BP_CANCEL)
5393         {
5394                 cleanScriptVars(player);
5395                 closeOldWindow(player);
5396                 return SCRIPT_CONTINUE;
5397         }
5400         if ( idx == -1 || idx > RIFLE_OPTIONS.length)
5401         {
5402                 cleanScriptVars(player);
5403                 return SCRIPT_CONTINUE;
5404         }
5406         //make sure player is Valid
5407         if(!isIdValid(player))
5408         {
5409                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5410                 cleanScriptVars(player);
5411                 return SCRIPT_OVERRIDE;
5412         }
5413         //make sure player's inventory is valid
5414         if (!isIdValid(pInv))
5415         {
5416                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5417                 cleanScriptVars(player);
5418                 return SCRIPT_OVERRIDE;
5419         }
5420         //make sure there is room in player's inventory
5421         if (getVolumeFree(pInv) <= 0)
5422         {
5423                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5424                 cleanScriptVars(player);
5425                 return SCRIPT_OVERRIDE;
5426         }
5428         string weapon = "";
5430         switch(idx)
5431         {
5432                 case 0:  // Death Trooper
5433                         weapon = "item_outbreak_deathrooper_rifle";
5434                         break;
5435                 case 1:  // TC-22 GCW
5436                         weapon = "weapon_gcw_tc22_rifle_03_01";
5437                         break;
5438                 case 2:  // Jinkins J-1 Nym's Themepark
5439                         weapon = "weapon_jinkins_j1_01_01";
5440                         break;
5441                 case 3:  // cdef
5442                         weapon = "object/weapon/ranged/rifle/rifle_cdef.iff";
5443                         break;
5444                 case 4:  // dlt20 rifle
5445                         weapon = "object/weapon/ranged/rifle/rifle_dlt20.iff";
5446                         break;
5447                 case 5:  // dlt20a rifle
5448                         weapon = "object/weapon/ranged/rifle/rifle_dlt20a.iff";
5449                         break;
5450                 case 6:  // tusken rifle
5451                         weapon = "object/weapon/ranged/rifle/rifle_tusken.iff";
5452                         break;
5453                 case 7:  // laser
5454                         weapon = "object/weapon/ranged/rifle/rifle_laser.iff";
5455                         break;
5456                 case 8:  // sg82
5457                         weapon = "object/weapon/ranged/rifle/rifle_sg82.iff";
5458                         break;
5459                 case 9:  // spraystick
5460                         weapon = "object/weapon/ranged/rifle/rifle_spraystick.iff";
5461                         break;
5462                 case 10:  // e11 rifle
5463                         weapon = "object/weapon/ranged/rifle/rifle_e11.iff";
5464                         break;
5465                 case 11:  // jawa ion
5466                         weapon = "object/weapon/ranged/rifle/rifle_jawa_ion.iff";
5467                         break;
5468                 case 12:  // t21
5469                         weapon = "object/weapon/ranged/rifle/rifle_t21.iff";
5470                         break;
5471                 case 13:  // tenloss
5472                         weapon = "object/weapon/ranged/rifle/rifle_tenloss_dxr6_disruptor_loot.iff";
5473                         break;
5474                 case 14:  // berserker
5475                         weapon = "object/weapon/ranged/rifle/rifle_berserker.iff";
5476                         break;
5477                 case 15:  // light bowcaster
5478                         weapon = "object/weapon/ranged/rifle/rifle_bowcaster.iff";
5479                         break;
5480                 case 16:  // recon bowcaster
5481                         weapon = "object/weapon/ranged/rifle/rifle_bowcaster_medium.iff";
5482                         break;
5483                 case 17:  // assault bowcaster
5484                         weapon = "object/weapon/ranged/rifle/rifle_bowcaster_heavy.iff";
5485                         break;
5486                 case 18:  // rifle beam
5487                         weapon = "object/weapon/ranged/rifle/rifle_beam.iff";
5488                         break;
5489                 case 19:  // acid beam
5490                         weapon = "object/weapon/ranged/rifle/rifle_acid_beam.iff";
5491                         break;
5492                 case 20:  // high velocity sniper rifle
5493                         weapon = "object/weapon/ranged/rifle/rifle_adventurer.iff";
5494                         break;
5495                 case 21:  // LD1 Rifle
5496                         weapon = "object/weapon/ranged/rifle/rifle_ld1.iff";
5497                         break;
5498                 case 22:  // massassi rifle
5499                         weapon = "object/weapon/ranged/rifle/rifle_massassi_ink.iff";
5500                         break;
5501                 case 23:  // proton rifle
5502                         weapon = "object/weapon/ranged/rifle/rifle_proton.iff";
5503                         break;
5504                 case 24:  // lightning
5505                         weapon = "object/weapon/ranged/rifle/rifle_lightning_light.iff";
5506                         break;
5507                 case 25:  // light laser
5508                         weapon = "object/weapon/ranged/rifle/rifle_laser_light.iff";
5509                         break;
5510                 case 26:  // Heavy Lightning
5511                         weapon = "object/weapon/ranged/rifle/rifle_lightning_heavy.iff";
5512                         break;
5513                 case 27:  // dp23
5514                         weapon = "object/weapon/ranged/rifle/som_rifle_dp23.iff";
5515                         break;
5516                 case 28:  // disruptor rifle
5517                         weapon = "object/weapon/ranged/rifle/som_rifle_mustafar_disruptor.iff";
5518                         break;
5519                 case 29:  // tusken eilte
5520                         weapon = "object/weapon/ranged/rifle/rifle_tusken_elite.iff";
5521                         break;
5522                 default:
5523                         cleanScriptVars(player);
5524                         return SCRIPT_CONTINUE;
5525         }
5527         if(weapon != null && weapon != "")
5528         {
5529                 if(static_item.isStaticItem(weapon))
5530                 {
5531                         static_item.createNewItemFunction(weapon, pInv);
5532                 }
5533                 else
5534                 {       
5535                         createSnowFlakeFrogWeapon(player, weapon);
5536                 }
5537         }
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()) )
5546         {
5547                 //cleanScriptVars(player);
5548                 return SCRIPT_CONTINUE;
5549         }
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 )
5558         {
5559                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5560                 return SCRIPT_CONTINUE;
5561         }
5563         if(btn == sui.BP_CANCEL)
5564         {
5565                 cleanScriptVars(player);
5566                 closeOldWindow(player);
5567                 return SCRIPT_CONTINUE;
5568         }
5570         if ( idx == -1 || idx > HEAVY_WEAPON_OPTIONS.length)
5571         {
5572                 cleanScriptVars(player);
5573                 return SCRIPT_CONTINUE;
5574         }
5576         //make sure player is Valid
5577         if(!isIdValid(player))
5578         {
5579                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5580                 cleanScriptVars(player);
5581                 return SCRIPT_OVERRIDE;
5582         }
5583         //make sure player's inventory is valid
5584         if (!isIdValid(pInv))
5585         {
5586                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5587                 cleanScriptVars(player);
5588                 return SCRIPT_OVERRIDE;
5589         }
5590         //make sure there is room in player's inventory
5591         if (getVolumeFree(pInv) <= 0)
5592         {
5593                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5594                 cleanScriptVars(player);
5595                 return SCRIPT_OVERRIDE;
5596         }
5598         string weapon = "";
5600         switch(idx)
5601         {
5602                 case 0:  // Rocket Launcher
5603                         weapon = "object/weapon/ranged/heavy/heavy_rocket_launcher.iff";
5604                         break;
5605                 case 1:  // flame thrower
5606                         weapon = "object/weapon/ranged/rifle/rifle_flame_thrower.iff";
5607                         break;
5608                 case 2:  // Acid Rifle
5609                         weapon = "object/weapon/ranged/rifle/rifle_acid_beam.iff";
5610                         break;
5611                 case 3:  // lightning
5612                         weapon = "object/weapon/ranged/rifle/rifle_lightning.iff";
5613                         break;
5614                 case 4:  // heavy acid beam
5615                         weapon = "object/weapon/ranged/heavy/heavy_acid_beam.iff";
5616                         break;
5617                 case 5:  // heavy lightning beam
5618                         weapon = "object/weapon/ranged/heavy/heavy_lightning_beam.iff";
5619                         break;
5620                 case 6:  // heavy particle beam
5621                         weapon = "object/weapon/ranged/heavy/heavy_particle_beam.iff";
5622                         break;
5623                 case 7:  // flame thrower
5624                         weapon = "object/weapon/ranged/rifle/rifle_flame_thrower_light.iff";
5625                         break;
5626                 case 8:  // republic flame thrower
5627                         weapon = "object/weapon/ranged/heavy/som_republic_flamer.iff";
5628                         break;
5629                 case 9:  // lava cannon
5630                         weapon = "object/weapon/ranged/heavy/som_lava_cannon.iff";
5631                         break;
5632                 case 10:
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.");
5636                         break;
5637                 case 11:
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.");
5641                         break;
5642                 case 12:
5643                         // Devastator Acid Launcher
5644                         static_item.createNewItemFunction("weapon_tow_heavy_acid_beam_04_01",pInv);
5645                         sendSystemMessageTestingOnly(player, "Devastator Acid Launcher Issued.");
5646                         break;
5647                 case 13:  // Ice Gun
5648                         weapon = "object/weapon/ranged/heavy/heavy_carbonite_rifle.iff";
5649                         break;
5650                 default:
5651                         cleanScriptVars(player);
5652                         return SCRIPT_CONTINUE;
5653         }
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()) )
5666         {
5667                 //cleanScriptVars(player);
5668                 return SCRIPT_CONTINUE;
5669         }
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)
5678         {
5679                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5680                 return SCRIPT_CONTINUE;
5681         }
5683         if(btn == sui.BP_CANCEL)
5684         {
5685                 cleanScriptVars(player);
5686                 closeOldWindow(player);
5687                 return SCRIPT_CONTINUE;
5688         }
5691         if ( idx == -1 || idx > UNARMED_OPTIONS.length)
5692         {
5693                 cleanScriptVars(player);
5694                 return SCRIPT_CONTINUE;
5695         }
5697         //make sure player is Valid
5698         if(!isIdValid(player))
5699         {
5700                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5701                 cleanScriptVars(player);
5702                 return SCRIPT_OVERRIDE;
5703         }
5704         //make sure player's inventory is valid
5705         if (!isIdValid(pInv))
5706         {
5707                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5708                 cleanScriptVars(player);
5709                 return SCRIPT_OVERRIDE;
5710         }
5711         //make sure there is room in player's inventory
5712         if (getVolumeFree(pInv) <= 0)
5713         {
5714                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5715                 cleanScriptVars(player);
5716                 return SCRIPT_OVERRIDE;
5717         }
5719         string weapon = "";
5721         switch(idx)
5722         {
5723                 case 0:  // Vibroknuckler
5724                         weapon = "object/weapon/melee/special/vibroknuckler.iff";
5725                         break;
5726                 case 1:  // Massasi Knuckler
5727                         weapon = "object/weapon/melee/special/massassiknuckler.iff";
5728                         break;
5729                 case 2:  // Razor Knuckler
5730                         weapon = "object/weapon/melee/special/blacksun_razor.iff";
5731                         break;
5732                 case 3:  // Blasterfist
5733                         weapon = "object/weapon/melee/special/blasterfist.iff";
5734                         break;
5736                 case 4:  // Guardian Blasterfist
5737                         static_item.createNewItemFunction("weapon_tow_blasterfist_04_01",pInv);
5738                         sendSystemMessageTestingOnly(player, "Guardian Blaster Fist");
5739                         break;
5740                 default:
5741                         cleanScriptVars(player);
5742                         return SCRIPT_CONTINUE;
5743         }
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()) )
5756         {
5757                 //cleanScriptVars(player);
5758                 return SCRIPT_CONTINUE;
5759         }
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 )
5768         {
5769                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5770                 return SCRIPT_CONTINUE;
5771         }
5773         if(btn == sui.BP_CANCEL)
5774         {
5775                 cleanScriptVars(player);
5776                 closeOldWindow(player);
5777                 return SCRIPT_CONTINUE;
5778         }
5781         if ( idx == -1 || idx > ONEHANDED_OPTIONS.length)
5782         {
5783                 cleanScriptVars(player);
5784                 return SCRIPT_CONTINUE;
5785         }
5787         //make sure player is Valid
5788         if(!isIdValid(player))
5789         {
5790                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5791                 cleanScriptVars(player);
5792                 return SCRIPT_OVERRIDE;
5793         }
5794         //make sure player's inventory is valid
5795         if (!isIdValid(pInv))
5796         {
5797                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5798                 cleanScriptVars(player);
5799                 return SCRIPT_OVERRIDE;
5800         }
5801         //make sure there is room in player's inventory
5802         if (getVolumeFree(pInv) <= 0)
5803         {
5804                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5805                 cleanScriptVars(player);
5806                 return SCRIPT_OVERRIDE;
5807         }
5809         string weapon = "";
5811         switch(idx)
5812         {
5813                 case 0:  // survival knife
5814                         weapon = "object/weapon/melee/knife/knife_survival.iff";
5815                         break;
5816                 case 1:  // twilek dagger
5817                         weapon = "object/weapon/melee/knife/knife_dagger.iff";
5818                         break;
5819                 case 2:  // sword
5820                         weapon = "object/weapon/melee/sword/sword_01.iff";
5821                         break;
5822                 case 3:  // curved sword
5823                         weapon = "object/weapon/melee/sword/sword_02.iff";
5824                         break;
5825                 case 4:  // gaderiffi
5826                         weapon = "object/weapon/melee/baton/baton_gaderiffi.iff";
5827                         break;
5828                 case 5:  // vibroblade
5829                         weapon = "object/weapon/melee/knife/knife_vibroblade.iff";
5830                         break;
5831                 case 6:  // ryyk blade
5832                         weapon = "object/weapon/melee/sword/sword_blade_ryyk.iff";
5833                         break;
5834                 case 7:  // rantok sword
5835                         weapon = "object/weapon/melee/sword/sword_rantok.iff";
5836                         break;
5837                 case 8:  // stun baton
5838                         weapon = "object/weapon/melee/baton/baton_stun.iff";
5839                         break;
5840                 case 9:  // acid sword
5841                         weapon = "object/weapon/melee/sword/sword_acid.iff";
5842                         break;
5843                 case 10:  // junta mace
5844                         weapon = "object/weapon/melee/sword/sword_mace_junti.iff";
5845                         break;
5846                 case 11:  // marauder sword
5847                         weapon = "object/weapon/melee/sword/sword_marauder.iff";
5848                         break;
5849                 case 12:  // massassi sword
5850                         weapon = "object/weapon/melee/sword/sword_massassi.iff";
5851                         break;
5852                 case 13:  // RSF Sword
5853                         weapon = "object/weapon/melee/sword/sword_rsf.iff";
5854                         break;
5855                 case 14: //"Stone Knife"
5856                         weapon = "object/weapon/melee/knife/knife_stone.iff";
5857                         break;
5858                 case 15: //"Janta Knife"
5859                         weapon = "object/weapon/melee/knife/knife_janta.iff";
5860                         break;
5861                 case 16:// "Donkuwa Knife"
5862                         weapon = "object/weapon/melee/knife/knife_donkuwah.iff";
5863                         break;
5864                 case 17: // Curved Nyax sword
5865                         weapon = "object/weapon/melee/sword/sword_curved_nyax.iff";
5866                         break;
5867                 case 18: // Obsidian sword
5868                         weapon = "object/weapon/melee/sword/som_sword_obsidian.iff";
5869                         break;
5870                 case 19: // Mustafar Bandit sword
5871                         weapon = "object/weapon/melee/sword/som_sword_mustafar_bandit.iff";
5872                         break;
5873                 case 20: // Gaderiffi Elite
5874                         weapon = "object/weapon/melee/baton/baton_gaderiffi_elite.iff";
5875                         break;
5876                 default:
5877                         cleanScriptVars(player);
5878                         return SCRIPT_CONTINUE;
5879         }
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()) )
5892         {
5893                 //cleanScriptVars(player);
5894                 return SCRIPT_CONTINUE;
5895         }
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 )
5904         {
5905                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
5906                 return SCRIPT_CONTINUE;
5907         }
5909         if(btn == sui.BP_CANCEL)
5910         {
5911                 cleanScriptVars(player);
5912                 closeOldWindow(player);
5913                 return SCRIPT_CONTINUE;
5914         }
5916         if ( idx == -1 || idx > TWOHANDED_OPTIONS.length)
5917         {
5918                 cleanScriptVars(player);
5919                 return SCRIPT_CONTINUE;
5920         }
5922         //make sure player is Valid
5923         if(!isIdValid(player))
5924         {
5925                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5926                 cleanScriptVars(player);
5927                 return SCRIPT_OVERRIDE;
5928         }
5929         //make sure player's inventory is valid
5930         if (!isIdValid(pInv))
5931         {
5932                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
5933                 cleanScriptVars(player);
5934                 return SCRIPT_OVERRIDE;
5935         }
5936         //make sure there is room in player's inventory
5937         if (getVolumeFree(pInv) <= 0)
5938         {
5939                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
5940                 cleanScriptVars(player);
5941                 return SCRIPT_OVERRIDE;
5942         }
5944         string weapon = "";
5946         switch(idx)
5947         {
5948                 case 0:  // axe
5949                         weapon = "object/weapon/melee/axe/axe_heavy_duty.iff";
5950                         break;
5951                 case 1:  // battleaxe
5952                         weapon = "object/weapon/melee/2h_sword/2h_sword_battleaxe.iff";
5953                         break;
5954                 case 2:  // katana
5955                         weapon = "object/weapon/melee/2h_sword/2h_sword_katana.iff";
5956                         break;
5957                 case 3:  // vibroaxe
5958                         weapon = "object/weapon/melee/axe/axe_vibroaxe.iff";
5959                         break;
5960                 case 4:  // cleaver
5961                         weapon = "object/weapon/melee/2h_sword/2h_sword_cleaver.iff";
5962                         break;
5963                 case 5:  // maul
5964                         weapon = "object/weapon/melee/2h_sword/2h_sword_maul.iff";
5965                         break;
5966                 case 6:  // scythe
5967                         weapon = "object/weapon/melee/2h_sword/2h_sword_scythe.iff";
5968                         break;
5969                 case 7:  // kashyyk sword
5970                         weapon = "object/weapon/melee/2h_sword/2h_sword_kashyyk.iff";
5971                         break;
5972                 case 8:  // sith sword
5973                         weapon = "object/weapon/melee/2h_sword/2h_sword_sith.iff";
5974                         break;
5975                 case 9: // Nyax sword
5976                         weapon = "object/weapon/melee/sword/sword_nyax.iff";
5977                         break;
5978                 case 10: // Black Sun Executioner's Hack
5979                         weapon = "object/weapon/melee/2h_sword/2h_sword_blacksun_hack.iff";
5980                         break;
5981                 case 11: // Tulrus
5982                         weapon = "object/weapon/melee/2h_sword/som_2h_sword_tulrus.iff";
5983                         break;
5984                 case 12: // Obsidian 2h
5985                         weapon = "object/weapon/melee/2h_sword/som_2h_sword_obsidian.iff";
5986                         break;
5987                 case 13: // Massassi Enforcer Blade
5988                         weapon = "object/weapon/melee/2h_sword/2h_sword_kun_massassi.iff";
5989                         break;
5990                 default:
5991                         cleanScriptVars(player);
5992                         return SCRIPT_CONTINUE;
5993         }
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()) )
6006         {
6007                 //cleanScriptVars(player);
6008                 return SCRIPT_CONTINUE;
6009         }
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 )
6018         {
6019                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6020                 return SCRIPT_CONTINUE;
6021         }
6023         if(btn == sui.BP_CANCEL)
6024         {
6025                 cleanScriptVars(player);
6026                 closeOldWindow(player);
6027                 return SCRIPT_CONTINUE;
6028         }
6030         if ( idx == -1 || idx > POLEARM_OPTIONS.length)
6031         {
6032                 cleanScriptVars(player);
6033                 return SCRIPT_CONTINUE;
6034         }
6036         //make sure player is Valid
6037         if(!isIdValid(player))
6038         {
6039                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6040                 cleanScriptVars(player);
6041                 return SCRIPT_OVERRIDE;
6042         }
6043         //make sure player's inventory is valid
6044         if (!isIdValid(pInv))
6045         {
6046                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6047                 cleanScriptVars(player);
6048                 return SCRIPT_OVERRIDE;
6049         }
6050         //make sure there is room in player's inventory
6051         if (getVolumeFree(pInv) <= 0)
6052         {
6053                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6054                 cleanScriptVars(player);
6055                 return SCRIPT_OVERRIDE;
6056         }
6058         string weapon = "";
6060         switch(idx)
6061         {
6062                 case 0:  // 1h wood staff
6063                         weapon = "object/weapon/melee/polearm/lance_staff_wood_s1.iff";
6064                         break;
6065                 case 1:  // metal staff
6066                         weapon = "object/weapon/melee/polearm/lance_staff_metal.iff";
6067                         break;
6068                 case 2:  // reinforced staff
6069                         weapon = "object/weapon/melee/polearm/lance_staff_wood_s2.iff";
6070                         break;
6071                 case 3:  // vibrolance
6072                         weapon = "object/weapon/melee/polearm/lance_vibrolance.iff";
6073                         break;
6074                 case 4:  // polearm vibroaxe
6075                         weapon = "object/weapon/melee/polearm/polearm_vibro_axe.iff";
6076                         break;
6077                 case 5:  // lance
6078                         weapon = "object/weapon/melee/polearm/lance_controllerfp.iff";
6079                         break;
6080                 case 6:  // kaminoan greatstaff
6081                         weapon = "object/weapon/melee/polearm/lance_kaminoan.iff";
6082                         break;
6083                 case 7:  // massassi lance
6084                         weapon = "object/weapon/melee/polearm/lance_massassi.iff";
6085                         break;
6086                 case 8:  // shocklance
6087                         weapon = "object/weapon/melee/polearm/lance_shock.iff";
6088                         break;
6089                 case 9:  // cryo lance
6090                         weapon = "object/weapon/melee/polearm/lance_cryo.iff";
6091                         break;
6092                 case 10:  // kashyyk bladestick
6093                         weapon = "object/weapon/melee/polearm/lance_kashyyk.iff";
6094                         break;
6095                 case 11:  // electric polearm
6096                         weapon = "object/weapon/melee/polearm/polearm_lance_electric_polearm.iff";
6097                         break;
6098                 case 12:  // nightsister energy lance
6099                         weapon = "object/weapon/melee/polearm/lance_nightsister.iff";
6100                         break;
6101                 case 13:  // nightsister vibro lance
6102                         weapon = "object/weapon/melee/polearm/lance_controllerfp_nightsister.iff";
6103                         break;
6104                 case 14:  // obsidian lance
6105                         weapon = "object/weapon/melee/polearm/som_lance_obsidian.iff";
6106                         break;
6107                 case 15:  // xandank lance
6108                         weapon = "object/weapon/melee/polearm/som_lance_xandank.iff";
6109                         break;
6110                 case 16:  // Acidic Paragon Axe
6111                         weapon = "object/weapon/melee/polearm/polearm_heroic_sd.iff";
6112                         break;
6113                 default:
6114                         cleanScriptVars(player);
6115                         return SCRIPT_CONTINUE;
6116         }
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()) )
6129         {
6130                 //cleanScriptVars(player);
6131                 return SCRIPT_CONTINUE;
6132         }
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 )
6141         {
6142                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6143                 return SCRIPT_CONTINUE;
6144         }
6146         if(btn == sui.BP_CANCEL)
6147         {
6148                 cleanScriptVars(player);
6149                 closeOldWindow(player);
6150                 return SCRIPT_CONTINUE;
6151         }
6153         if ( idx == -1 || idx > BATTLEFIELD_WEAPON_OPTIONS.length)
6154         {
6155                 cleanScriptVars(player);
6156                 return SCRIPT_CONTINUE;
6157         }
6159         //make sure player is Valid
6160         if(!isIdValid(player))
6161         {
6162                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6163                 cleanScriptVars(player);
6164                 return SCRIPT_OVERRIDE;
6165         }
6166         //make sure player's inventory is valid
6167         if (!isIdValid(pInv))
6168         {
6169                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6170                 cleanScriptVars(player);
6171                 return SCRIPT_OVERRIDE;
6172         }
6173         //make sure there is room in player's inventory
6174         if (getVolumeFree(pInv) <= 0)
6175         {
6176                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6177                 cleanScriptVars(player);
6178                 return SCRIPT_OVERRIDE;
6179         }
6181         string weapon = "";
6183         switch(idx)
6184         {
6186                 case 0:
6187                         // Battlefield Pistol
6188                         static_item.createNewItemFunction("weapon_westar_pistol_04_01",pInv);
6189                         sendSystemMessageTestingOnly(player, "Westar-34 Blaster Pistol Issued.");
6190                         break;
6191                 case 1:
6192                         // Battlefield Carbine
6193                         static_item.createNewItemFunction("weapon_carbine_ngant_zarvel_04_01",pInv);
6194                         sendSystemMessageTestingOnly(player, "NGant-Zarvel 9118 Carbine Issued.");
6195                         break;
6196                 case 2:
6197                         // Battlefield Rifle
6198                         static_item.createNewItemFunction("weapon_westar_rifle_04_01",pInv);
6199                         sendSystemMessageTestingOnly(player, "Westar-M5 Blaster Rifle Issued.");
6200                         break;
6201                 case 3:
6202                         // Battlefield Heavy Weapon
6203                         static_item.createNewItemFunction("weapon_heavy_cr1_04_01",pInv);
6204                         sendSystemMessageTestingOnly(player, "CR-1 Blast Cannon Issued.");
6205                         break;
6207                 case 4:
6208                         // Battlefield Unarmed
6209                         static_item.createNewItemFunction("weapon_knuckler_buzz_knuck",pInv);
6210                         sendSystemMessageTestingOnly(player, "Buzz-Knuck Issued.");
6211                         break;
6212                 case 5:
6213                         // Battlefield 1h sword
6214                         static_item.createNewItemFunction("weapon_sword_1h_pvp_04_01",pInv);
6215                         sendSystemMessageTestingOnly(player, "Sith Sword Issued.");
6216                         break;
6217                 case 6:
6218                         // Battlefield 2h sword
6219                         static_item.createNewItemFunction("weapon_sword_2h_pvp_04_01",pInv);
6220                         sendSystemMessageTestingOnly(player, "Vibrosword Issued.");
6221                         break;
6222                 case 7:
6223                         // Battlefield Polearm
6224                         static_item.createNewItemFunction("weapon_magna_guard_polearm_04_01",pInv);
6225                         sendSystemMessageTestingOnly(player, "Magnaguard Electrostaff Issued.");
6226                         break;
6227                 case 8:
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.");
6231                         break;
6232                 case 9:
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.");
6236                         break;
6237                 case 10:
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.");
6241                         break;
6243                 default:
6244                         cleanScriptVars(player);
6245                         return SCRIPT_CONTINUE;
6246         }
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()) )
6256         {
6257                 //cleanScriptVars(player);
6258                 return SCRIPT_CONTINUE;
6259         }
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 )
6268         {
6269                 refreshMenu (player, "Select the desired weapon option", "Character Builder Terminal", WEAPON_OPTIONS, "handleWeaponOptions", false);
6270                 return SCRIPT_CONTINUE;
6271         }
6273         if(btn == sui.BP_CANCEL)
6274         {
6275                 cleanScriptVars(player);
6276                 closeOldWindow(player);
6277                 return SCRIPT_CONTINUE;
6278         }
6280         if ( idx == -1 || idx > GRENADE_OPTIONS.length)
6281         {
6282                 cleanScriptVars(player);
6283                 return SCRIPT_CONTINUE;
6284         }
6285         //make sure player is Valid
6286         if(!isIdValid(player))
6287         {
6288                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6289                 cleanScriptVars(player);
6290                 return SCRIPT_OVERRIDE;
6291         }
6292         //make sure player's inventory is valid
6293         if (!isIdValid(pInv))
6294         {
6295                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6296                 cleanScriptVars(player);
6297                 return SCRIPT_OVERRIDE;
6298         }
6299         //make sure there is room in player's inventory
6300         if (getVolumeFree(pInv) <= 0)
6301         {
6302                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
6303                 cleanScriptVars(player);
6304                 return SCRIPT_OVERRIDE;
6305         }
6306         obj_id item = null;
6307         switch(idx)
6308         {
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.");
6313                         break;
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.");
6318                         break;
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.");
6323                         break;
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.");
6328                         break;
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.");
6333                         break;
6334                 case 5:  // glop
6335                         item = createObject("object/weapon/ranged/grenade/grenade_glop.iff", pInv, "");
6336                         setCount(item, 500);
6337                         sendSystemMessageTestingOnly(player, "Glop Grenade with many charges Issued.");
6338                         break;
6339                 case 6:  // cryoban
6340                         item = createObject("object/weapon/ranged/grenade/grenade_cryoban.iff", pInv, "");
6341                         setCount(item, 500);
6342                         sendSystemMessageTestingOnly(player, "Cryoban Grenade with many charges Issued.");
6343                         break;
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.");
6348 //                      break;
6349                 default:
6350                         cleanScriptVars(player);
6351                         return SCRIPT_CONTINUE;
6352         }
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()) )
6371         {
6372                 //cleanScriptVars(player);
6373                 return SCRIPT_CONTINUE;
6374         }
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 )
6383         {
6384                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
6385                 return SCRIPT_CONTINUE;
6386         }
6388         if(btn == sui.BP_CANCEL)
6389         {
6390                 cleanScriptVars(player);
6391                 closeOldWindow(player);
6392                 return SCRIPT_CONTINUE;
6393         }
6395         if ( idx == -1 || idx > ARMOR_OPTIONS.length)
6396         {
6397                 cleanScriptVars(player);
6398                 return SCRIPT_CONTINUE;
6399         }
6401         //make sure player is Valid
6402         if(!isIdValid(player))
6403         {
6404                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6405                 cleanScriptVars(player);
6406                 return SCRIPT_OVERRIDE;
6407         }
6410                 string prompt = "Select the desired armor option";
6411                 string title = "Character Builder Terminal";
6412                 int pid = 0;
6414                 switch(idx)
6415                 {
6417                         case 0:
6418                                 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6419                                 utils.setScriptVar(player, "character_builder.armorType", 2);
6420                                 break;
6421                         case 1:
6422                                 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6423                                 utils.setScriptVar(player, "character_builder.armorType", 1);
6424                                 break;
6425                         case 2:
6426                                 refreshMenu (player, prompt, title, ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6427                                 utils.setScriptVar(player, "character_builder.armorType", 0);
6428                                 break;
6429                         case 3:
6430                                 refreshMenu (player, prompt, title, ARMOR_PSG_OPTIONS, "handlePsgSelect", false);
6431                                 break;
6432                         case 4:
6433                                 refreshMenu (player, prompt, title, ARMOR_ENHANCEMENT_OPTIONS, "handleEnhancementSelect", false);
6434                                 break;
6435                         case 5:
6436                                 refreshMenu (player, prompt, title, ARMOR_PVP_SETS, "handlePvPSelect", false);
6437                                 break;
6438                         case 6:
6439                                 refreshMenu (player, prompt, title, HEROIC_JEWELRY_LIST, "handleHeroicJewelrySelect", false);
6440                                 break;
6441                         default:
6442                                 cleanScriptVars(player);
6443                                 return SCRIPT_CONTINUE;
6445                 }
6446                 return SCRIPT_CONTINUE;
6449 messageHandler handleProtectionAmount()
6451         if ( (params == null) || (params.isEmpty()) )
6452         {
6453                 //cleanScriptVars(player);
6454                 return SCRIPT_CONTINUE;
6455         }
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 )
6464         {
6465                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_OPTIONS, "handleArmorSelect", false);
6466                 return SCRIPT_CONTINUE;
6467         }
6469         if(btn == sui.BP_CANCEL)
6470         {
6471                 cleanScriptVars(player);
6472                 closeOldWindow(player);
6473                 return SCRIPT_CONTINUE;
6474         }
6476         if ( idx == -1 || idx > ARMOR_PROTECTION_AMOUNT.length)
6477         {
6478                 cleanScriptVars(player);
6479                 return SCRIPT_CONTINUE;
6480         }
6481         //make sure player is Valid
6482         if(!isIdValid(player))
6483         {
6484                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6485                 cleanScriptVars(player);
6486                 return SCRIPT_OVERRIDE;
6487         }
6488         //make sure player's inventory is valid
6489         if (!isIdValid(pInv))
6490         {
6491                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6492                 cleanScriptVars(player);
6493                 return SCRIPT_OVERRIDE;
6494         }
6495         //make sure there is room in player's inventory
6496         if (getVolumeFree(pInv) <= 9)
6497         {
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;
6501         }
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 = "";
6507         int pid = 0;
6508         string prompt = "Select the desired armor level option";
6509         string title = "Character Builder Terminal";
6510         switch(type)
6511         {
6512                 case 0:  // basic
6513                         options = ARMOR_RECON_OPTIONS;
6514                         handler = "handleReconSelect";
6515                         break;
6516                 case 1:  //standard
6517                         options = ARMOR_BATTLE_OPTIONS;
6518                         handler = "handleBattleSelect";
6519                         break;
6520                 case 2:  //advanced
6521                         options = ARMOR_ASSAULT_OPTIONS;
6522                         handler = "handleAssaultSelect";
6523                         break;
6524                 default:
6525                         cleanScriptVars(player);
6526                         return SCRIPT_CONTINUE;
6527         }
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()) )
6539         {
6540                 //cleanScriptVars(player);
6541                 return SCRIPT_CONTINUE;
6542         }
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 )
6551         {
6552                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6553                 return SCRIPT_CONTINUE;
6554         }
6556         if(btn == sui.BP_CANCEL)
6557         {
6558                 cleanScriptVars(player);
6559                 closeOldWindow(player);
6560                 return SCRIPT_CONTINUE;
6561         }
6563         if ( idx == -1 || idx > ARMOR_ASSAULT_OPTIONS.length)
6564         {
6565                 cleanScriptVars(player);
6566                 return SCRIPT_CONTINUE;
6567         }
6568         //make sure player is Valid
6569         if(!isIdValid(player))
6570         {
6571                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6572                 cleanScriptVars(player);
6573                 return SCRIPT_OVERRIDE;
6574         }
6575         //make sure player's inventory is valid
6576         if (!isIdValid(pInv))
6577         {
6578                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6579                 cleanScriptVars(player);
6580                 return SCRIPT_OVERRIDE;
6581         }
6582         //make sure there is room in player's inventory
6583         if (getVolumeFree(pInv) <= 9)
6584         {
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;
6588         }
6590         switch(idx)
6591         {
6592                 case 0:  // composite
6593                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_1);
6594                         sendSystemMessageTestingOnly(player, "Composite Armor Set Issued.");
6595                         break;
6596                 case 1:  // marauder
6597                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_3);
6598                         sendSystemMessageTestingOnly(player, "Marauder Assault Armor Set Issued.");
6599                         break;
6600                 case 2:  //Chitin
6601                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_2);
6602                         sendSystemMessageTestingOnly(player, "Chitin Armor Set Issued.");
6603                         break;
6604                 case 3:  //Crafted Bounty Hunter
6605                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_4);
6606                         sendSystemMessageTestingOnly(player, "Crafted Bounty Hunter Armor Set Issued.");
6607                         break;
6608                 case 4:  //Kashyyykian Hunting
6609                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_WOOKIEE);
6610                         sendSystemMessageTestingOnly(player, "Kashyyykian Hunting Armor Set Issued.");
6611                         break;
6612                 case 5:  //Ithorian Sentinel
6613                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_ITHORIAN);
6614                         sendSystemMessageTestingOnly(player, "Ithorian Sentinel Armor Set Issued.");
6615                         break;
6616                 case 6:  //Shocktrooper
6617                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_IMPERIAL);
6618                         sendSystemMessageTestingOnly(player, "Shocktrooper Armor Set Issued.");
6619                         break;
6620                 case 7:  //Rebel Assault
6621                         issueAssaultArmorSet(player,ARMOR_SET_ASSAULT_REBEL);
6622                         sendSystemMessageTestingOnly(player, "Rebel Assault Armor Set Issued.");
6623                         break;
6624                 default:
6625                         cleanScriptVars(player);
6626                         return SCRIPT_CONTINUE;
6627         }
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()) )
6637         {
6638                 //cleanScriptVars(player);
6639                 return SCRIPT_CONTINUE;
6640         }
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 )
6649         {
6650                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6651                 return SCRIPT_CONTINUE;
6652         }
6654         if(btn == sui.BP_CANCEL)
6655         {
6656                 cleanScriptVars(player);
6657                 closeOldWindow(player);
6658                 return SCRIPT_CONTINUE;
6659         }
6661         if ( idx == -1 || idx > ARMOR_BATTLE_OPTIONS.length)
6662         {
6663                 cleanScriptVars(player);
6664                 return SCRIPT_CONTINUE;
6665         }
6666         //make sure player is Valid
6667         if(!isIdValid(player))
6668         {
6669                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6670                 cleanScriptVars(player);
6671                 return SCRIPT_OVERRIDE;
6672         }
6673         //make sure player's inventory is valid
6674         if (!isIdValid(pInv))
6675         {
6676                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6677                 cleanScriptVars(player);
6678                 return SCRIPT_OVERRIDE;
6679         }
6680         //make sure there is room in player's inventory
6681         if (getVolumeFree(pInv) <= 9)
6682         {
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;
6686         }
6688         switch(idx)
6689                                 {
6690                 case 0:  // padded
6691                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_3);
6692                         sendSystemMessageTestingOnly(player, "Padded Armor Set Issued.");
6693                         break;
6694                 case 1:  // marauder
6695                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_2);
6696                         sendSystemMessageTestingOnly(player, "Marauder Battle Armor Set Issued.");
6697                         break;
6698                 case 2:  // RIS
6699                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_4);
6700                         sendSystemMessageTestingOnly(player, "RIS Armor Set Issued.");
6701                         break;
6702                 case 3:  //Bone
6703                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_1);
6704                         sendSystemMessageTestingOnly(player, "Bone Armor Set Issued.");
6705                         break;
6706                 case 4:  //Kashyyykian Black Mountain Armor Set
6707                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_WOOKIEE);
6708                         sendSystemMessageTestingOnly(player, "Kashyyykian Black Mountain Armor Set Issued.");
6709                         break;
6710                 case 5:  //Ithorian Defender
6711                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_ITHORIAN);
6712                         sendSystemMessageTestingOnly(player, "Ithorian Defender Armor Set Issued.");
6713                         break;
6714                 case 6:  //Stormtrooper
6715                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_IMPERIAL);
6716                         sendSystemMessageTestingOnly(player, "Stormtrooper Armor Set Issued.");
6717                         break;
6718                 case 7:  //Rebel Battle
6719                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_REBEL);
6720                         sendSystemMessageTestingOnly(player, "Rebel Battle Armor Set Issued.");
6721                         break;
6722                 case 8:  //Imperial Snowtrooper
6723                         issueBattleArmorSet(player,ARMOR_SET_BATTLE_SNOWTROOPER);
6724                         sendSystemMessageTestingOnly(player, "Imperial Snowtrooper Set Issued.");
6725                         break;
6726                 default:
6727                         cleanScriptVars(player);
6728                         return SCRIPT_CONTINUE;
6729         }
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()) )
6738         {
6739                 //cleanScriptVars(player);
6740                 return SCRIPT_CONTINUE;
6741         }
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 )
6750         {
6751                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6752                 return SCRIPT_CONTINUE;
6753         }
6755         if(btn == sui.BP_CANCEL)
6756         {
6757                 cleanScriptVars(player);
6758                 closeOldWindow(player);
6759                 return SCRIPT_CONTINUE;
6760         }
6762         if ( idx == -1 || idx > ARMOR_RECON_OPTIONS.length)
6763         {
6764                 cleanScriptVars(player);
6765                 return SCRIPT_CONTINUE;
6766         }
6767         //make sure player is Valid
6768         if(!isIdValid(player))
6769         {
6770                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6771                 cleanScriptVars(player);
6772                 return SCRIPT_OVERRIDE;
6773         }
6774         //make sure player's inventory is valid
6775         if (!isIdValid(pInv))
6776         {
6777                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6778                 cleanScriptVars(player);
6779                 return SCRIPT_OVERRIDE;
6780         }
6781         //make sure there is room in player's inventory
6782         if (getVolumeFree(pInv) <= 9)
6783         {
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;
6787         }
6789         switch(idx)
6790         {
6791                 case 0:  // tantel
6792                         issueReconArmorSet(player,ARMOR_SET_RECON_3);
6793                         sendSystemMessageTestingOnly(player, "Tantel Armor Set Issued.");
6794                         break;
6795                 case 1:  //Ubese
6796                         issueReconArmorSet(player,ARMOR_SET_RECON_4);
6797                         sendSystemMessageTestingOnly(player, "Ubese Armor Set Issued.");
6798                         break;
6799                 case 2:  //mabari
6800                         issueReconArmorSet(player,ARMOR_SET_RECON_1);
6801                         sendSystemMessageTestingOnly(player, "Mabari Armor Set Issued.");
6802                         break;
6803                 case 3:  //marauder
6804                         issueReconArmorSet(player,ARMOR_SET_RECON_2);
6805                         sendSystemMessageTestingOnly(player, "Recon Marauder Armor Set Issued.");
6806                         break;
6807                 case 4:  //Kashyyykian Ceremonial Armor Set
6808                         issueReconArmorSet(player,ARMOR_SET_RECON_WOOKIEE);
6809                         sendSystemMessageTestingOnly(player, "Kashyyykian Ceremonial Armor Set Issued.");
6810                         break;
6811                 case 5:  //Ithorian Guardian
6812                         issueReconArmorSet(player,ARMOR_SET_RECON_ITHORIAN);
6813                         sendSystemMessageTestingOnly(player, "Ithorian Guardian Armor Set Issued.");
6814                         break;
6815                 case 6:  //Scout Trooper
6816                         issueReconArmorSet(player,ARMOR_SET_RECON_IMPERIAL);
6817                         sendSystemMessageTestingOnly(player, "Scout Trooper Armor Set Issued.");
6818                         break;
6819                 case 7:  //Marine Rebel
6820                         issueReconArmorSet(player,ARMOR_SET_RECON_REBEL);
6821                         sendSystemMessageTestingOnly(player, "Rebel Marine Armor Set Issued.");
6822                         break;
6823                 case 8: //Alliance Cold Weather
6824                         issueReconArmorSet(player,ARMOR_SET_REBEL_SNOW);
6825                         sendSystemMessageTestingOnly(player, "Rebel Snow Armor Set Issued.");
6826                         break;
6827                 default:
6828                         cleanScriptVars(player);
6829                         return SCRIPT_CONTINUE;
6830         }
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()) )
6839         {
6840                 //cleanScriptVars(player);
6841                 return SCRIPT_CONTINUE;
6842         }
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 )
6851         {
6852                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_OPTIONS, "handleArmorSelect", false);
6853                 return SCRIPT_CONTINUE;
6854         }
6856         if(btn == sui.BP_CANCEL)
6857         {
6858                 cleanScriptVars(player);
6859                 closeOldWindow(player);
6860                 return SCRIPT_CONTINUE;
6861         }
6863         if ( idx == -1 || idx > ARMOR_PSG_OPTIONS.length)
6864                         {
6865                 cleanScriptVars(player);
6866                 return SCRIPT_CONTINUE;
6867         }
6868         //make sure player is Valid
6869         if(!isIdValid(player))
6870         {
6871                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6872                 cleanScriptVars(player);
6873                 return SCRIPT_OVERRIDE;
6874         }
6875         //make sure player's inventory is valid
6876         if (!isIdValid(pInv))
6877         {
6878                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6879                 cleanScriptVars(player);
6880                 return SCRIPT_OVERRIDE;
6881         }
6882         //make sure there is room in player's inventory
6883         if (getVolumeFree(pInv) <= 2)
6884         {
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;
6888         }
6889         obj_id item = null;
6890         switch(idx)
6891         {
6892                 case 0:  // mark I
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.");
6896                         break;
6897                 case 1:  // mark II
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.");
6901                         break;
6902                 case 2:  // mark III
6903                         item = createObject("object/tangible/component/armor/shield_generator_personal_c.iff", pInv, "");
6904                         armor.initializePsg(item, 2.5f, 2000, 10000);
6905                         setSocketsUp(item);
6906                         sendSystemMessageTestingOnly(player, "PSG Mark III Issued.");
6907                         break;
6908                 default:
6909                         cleanScriptVars(player);
6910                         return SCRIPT_CONTINUE;
6911         }
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()) )
6920         {
6921                 //cleanScriptVars(player);
6922                 return SCRIPT_CONTINUE;
6923         }
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 )
6932         {
6933                 refreshMenu (player, "Select the desired armor option", "Character Builder Terminal", ARMOR_PROTECTION_AMOUNT, "handleProtectionAmount", false);
6934                 return SCRIPT_CONTINUE;
6935         }
6937         if(btn == sui.BP_CANCEL)
6938         {
6939                 cleanScriptVars(player);
6940                 closeOldWindow(player);
6941                 return SCRIPT_CONTINUE;
6942         }
6944         if ( idx == -1 || idx > ARMOR_ASSAULT_OPTIONS.length)
6945         {
6946                 cleanScriptVars(player);
6947                 return SCRIPT_CONTINUE;
6948         }
6949         //make sure player is Valid
6950         if(!isIdValid(player))
6951         {
6952                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6953                 cleanScriptVars(player);
6954                 return SCRIPT_OVERRIDE;
6955         }
6956         //make sure player's inventory is valid
6957         if (!isIdValid(pInv))
6958         {
6959                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
6960                 cleanScriptVars(player);
6961                 return SCRIPT_OVERRIDE;
6962         }
6963         //make sure there is room in player's inventory
6964         if (getVolumeFree(pInv) <= 9)
6965         {
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;
6969         }
6971         switch(idx)
6972         {
6973                 case 0:
6974                         issuePvPSet(player, ARMOR_SET_PVP_IMPERIAL_BLACK);
6975                         sendSystemMessageTestingOnly(player, "Imperial Black PvP Set Issued.");
6976                         break;
6977                 case 1:
6978                         issuePvPSet(player,ARMOR_SET_PVP_IMPERIAL_WHITE);
6979                         sendSystemMessageTestingOnly(player, "Imperial White PvP Set Issued.");
6980                         break;
6981                 case 2:
6982                         issuePvPSet(player,ARMOR_SET_PVP_REBEL_GREY);
6983                         sendSystemMessageTestingOnly(player, "Rebel Grey PvP Set Issued.");
6984                         break;
6985                 case 3:
6986                         issuePvPSet(player,ARMOR_SET_PVP_REBEL_GREEN);
6987                         sendSystemMessageTestingOnly(player, "Rebel Green PvP Set Issued.");
6988                         break;
6989                 case 4:  //Galactic Marine
6990                         issueAssaultArmorSet(player,ARMOR_SET_ASSUALT_GALACTIC_MARINE);
6991                         sendSystemMessageTestingOnly(player, "Galactic Marine Armor Set Issued.");
6992                         break;
6993                 case 5:  //Rebel SpecForce
6994                         issueAssaultArmorSet(player,ARMOR_SET_ASSUALT_REBEL_SPECFORCE);
6995                         sendSystemMessageTestingOnly(player, "Rebel SpecForce Armor Set Issued.");
6996                         break;
6997                 default:
6998                         cleanScriptVars(player);
6999                         return SCRIPT_CONTINUE;
7000         }
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++)
7011         {
7012                 static_item.createNewItemFunction(armorPieces[i], pInv);
7013         }
7016 void issueAssaultArmorSet(obj_id player, string[] armorPieces)
7018         obj_id pInv = utils.getInventoryContainer(player);
7019         for ( int j = 0; j < armorPieces.length; ++j )
7020         {
7021                 if(static_item.isStaticItem(armorPieces[j]))
7022                 {
7023                         obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7025                         if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7026                                 setBioLink(armorItem, player);
7027                 }
7028                 else
7029                 {
7030                         string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7031                         obj_id armorItem = createObject(armorTemplate, pInv, "");
7032                         if ( isIdValid(armorItem) )
7033                         {
7034                                 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7035                                 {
7036                                         armor.setArmorDataPercent(armorItem, 2, 2, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7037                                         armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_ASSAULT_LAYER, 1.0f);
7038                                 }
7039                                 setSocketsUp(armorItem);
7040                         }
7041                 }
7043         }
7046 void issueBattleArmorSet(obj_id player, string[] armorPieces)
7048         obj_id pInv = utils.getInventoryContainer(player);
7049         for ( int j = 0; j < armorPieces.length; ++j )
7050         {
7051                 if(static_item.isStaticItem(armorPieces[j]))
7052                 {
7053                         obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7055                         if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7056                                 setBioLink(armorItem, player);
7057                 }
7058                 else
7059                 {
7060                         string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7061                         obj_id armorItem = createObject(armorTemplate, pInv, "");
7062                         if ( isIdValid(armorItem) )
7063                         {
7064                                 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7065                                 {
7066                                         armor.setArmorDataPercent(armorItem, 2, 1, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7067                                 }
7068                                 setSocketsUp(armorItem);
7069                         }
7070                 }
7071         }
7074 void issueReconArmorSet(obj_id player, string[] armorPieces)
7076         obj_id pInv = utils.getInventoryContainer(player);
7077         for ( int j = 0; j < armorPieces.length; ++j )
7078         {
7079                 if(static_item.isStaticItem(armorPieces[j]))
7080                 {
7081                         obj_id armorItem = static_item.createNewItemFunction(armorPieces[j], pInv);
7083                         if(hasScript(armorItem, "npc.faction_recruiter.biolink_item"))
7084                                 setBioLink(armorItem, player);
7085                 }
7086                 else
7087                 {
7088                         string armorTemplate = ARMOR_SET_PREFIX + armorPieces[j];
7089                         obj_id armorItem = createObject(armorTemplate, pInv, "");
7090                         if ( isIdValid(armorItem) )
7091                         {
7092                                 if (!isGameObjectTypeOf(armorItem, GOT_armor_foot) && !isGameObjectTypeOf(armorItem, GOT_armor_hand))
7093                                 {
7094                                         armor.setArmorDataPercent(armorItem, 2, 0, utils.getIntScriptVar(player,"character_builder.armorLevel")*.33f, CONDITION);
7095                                         armor.setArmorSpecialProtectionPercent(armorItem, armor.DATATABLE_RECON_LAYER, 1.0f);
7096                                 }
7097                                 setSocketsUp(armorItem);
7098                         }
7099                 }
7100         }
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()) )
7112         {
7113                 //cleanScriptVars(player);
7114                 return SCRIPT_CONTINUE;
7115         }
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 )
7124         {
7125                 startCharacterBuilder(player);
7126                 return SCRIPT_CONTINUE;
7127         }
7129         if(btn == sui.BP_CANCEL)
7130         {
7131                 cleanScriptVars(player);
7132                 closeOldWindow(player);
7133                 return SCRIPT_CONTINUE;
7134         }
7136         if ( idx == -1 || idx > ARMOR_ENHANCEMENT_OPTIONS.length)
7137         {
7138                 cleanScriptVars(player);
7139                 return SCRIPT_CONTINUE;
7140         }
7142         //make sure player is Valid
7143         if(!isIdValid(player))
7144         {
7145                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7146                 cleanScriptVars(player);
7147                 return SCRIPT_OVERRIDE;
7148         }
7149         //make sure player's inventory is valid
7150         if (!isIdValid(pInv))
7151         {
7152                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7153                 cleanScriptVars(player);
7154                 return SCRIPT_OVERRIDE;
7155         }
7156         //make sure there is room in player's inventory
7157         if (getVolumeFree(pInv) <= 0)
7158         {
7159                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7160                 cleanScriptVars(player);
7161                 return SCRIPT_OVERRIDE;
7162         }
7164         switch(idx)
7165         {
7166                 case 0:  //combat ring
7167                         if(isGod(player))
7168                         {
7169                                 static_item.createNewItemFunction("item_development_combat_test_ring_06_01",pInv);
7170                                 sendSystemMessageTestingOnly(player, "Combat Enhancement Ring Issued");
7171                         }
7172                         else
7173                         {
7174                                 sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Combat Ring!");
7175                         }
7176                         break;
7177                 default:
7178                         cleanScriptVars(player);
7179                         return SCRIPT_CONTINUE;
7180         }
7182         handleEnhancementSelect(player);
7183         return SCRIPT_CONTINUE;
7189 messageHandler handleHeroicJewelrySelect()
7191         if ( (params == null) || (params.isEmpty()) )
7192         {
7193                 //cleanScriptVars(player);
7194                 return SCRIPT_CONTINUE;
7195         }
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 )
7204         {
7205                 startCharacterBuilder(player);
7206                 return SCRIPT_CONTINUE;
7207         }
7209         if(btn == sui.BP_CANCEL)
7210         {
7211                 cleanScriptVars(player);
7212                 closeOldWindow(player);
7213                 return SCRIPT_CONTINUE;
7214         }
7216         if ( idx == -1 || idx > HEROIC_JEWELRY_LIST.length)
7217         {
7218                 cleanScriptVars(player);
7219                 return SCRIPT_CONTINUE;
7220         }
7222         //make sure player is Valid
7223         if(!isIdValid(player))
7224         {
7225                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7226                 cleanScriptVars(player);
7227                 return SCRIPT_OVERRIDE;
7228         }
7229         //make sure player's inventory is valid
7230         if (!isIdValid(pInv))
7231         {
7232                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7233                 cleanScriptVars(player);
7234                 return SCRIPT_OVERRIDE;
7235         }
7236         //make sure there is room in player's inventory
7237         if (getVolumeFree(pInv) <= 5)
7238         {
7239                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7240                 cleanScriptVars(player);
7241                 return SCRIPT_OVERRIDE;
7242         }
7244         string column = "";
7246         switch(idx)
7247         {
7248                 case 0:
7249                         column = "set_bh_dps";
7250                         break;
7251                 case 1:
7252                         column = "set_bh_utility_a";
7253                         break;
7254                 case 2:
7255                         column = "set_bh_utility_b";
7256                         break;
7257                 case 3:
7258                         column = "set_medic_dps";
7259                         break;
7260                 case 4:
7261                         column = "set_medic_utility_a";
7262                         break;
7263                 case 5:
7264                         column = "set_medic_utility_b";
7265                         break;
7266                 case 6:
7267                         column = "set_jedi_dps";
7268                         break;
7269                 case 7:
7270                         column = "set_jedi_utility_a";
7271                         break;
7272                 case 8:
7273                         column = "set_jedi_utility_b";
7274                         break;
7275                 case 9:
7276                         column = "set_commando_dps";
7277                         break;
7278                 case 10:
7279                         column = "set_commando_utility_a";
7280                         break;
7281                 case 11:
7282                         column = "set_commando_utility_b";
7283                         break;
7284                 case 12:
7285                         column = "set_smuggler_dps";
7286                         break;
7287                 case 13:
7288                         column = "set_smuggler_utility_a";
7289                         break;
7290                 case 14:
7291                         column = "set_smuggler_utility_b";
7292                         break;
7293                 case 15:
7294                         column = "set_spy_dps";
7295                         break;
7296                 case 16:
7297                         column = "set_spy_utility_a";
7298                         break;
7299                 case 17:
7300                         column = "set_spy_utility_b";
7301                         break;
7302                 case 18:
7303                         column = "set_officer_dps";
7304                         break;
7305                 case 19:
7306                         column = "set_officer_utility_a";
7307                         break;
7308                 case 20:
7309                         column = "set_officer_utility_b";
7310                         break;
7311                 case 21:
7312                         column = "set_hero";
7313                         break;
7314                 default:
7315                         cleanScriptVars(player);
7316                         return SCRIPT_CONTINUE;
7317         }
7319         if(column != null && column != "")
7320         {
7321                 string[] itemSet = dataTableGetStringColumn(HEROIC_JEWELRY_SETS, column);
7323                 if ((itemSet != null) && (itemSet.length != 0))
7324                 {
7325                         for (int i = 0; i < itemSet.length; i++)
7326                         {
7327                                 static_item.createNewItemFunction(itemSet[i], pInv);
7328                         }
7329                 }
7330         }
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()) )
7349         {
7350                 //cleanScriptVars(player);
7351                 return SCRIPT_CONTINUE;
7352         }
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 )
7359         {
7360                 startCharacterBuilder(player);
7361                 return SCRIPT_CONTINUE;
7362         }
7364         if(btn == sui.BP_CANCEL)
7365         {
7366                 cleanScriptVars(player);
7367                 closeOldWindow(player);
7368                 return SCRIPT_CONTINUE;
7369         }
7371         if ( idx == -1 || idx > MISCITEM_OPTIONS.length)
7372         {
7373                 cleanScriptVars(player);
7374                 return SCRIPT_CONTINUE;
7375         }
7377         //make sure player is Valid
7378         if(!isIdValid(player))
7379         {
7380                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7381                 cleanScriptVars(player);
7382                 return SCRIPT_OVERRIDE;
7383         }
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";
7388         int pid = 0;
7390         switch(idx)
7391         {
7393                 case 0:
7394                         refreshMenu ( player, prompt, title, MISC_OPTIONS, "handleMiscSelect", false);
7395                         break;
7396                 case 1:
7397                         refreshMenu ( player, prompt, title, MEDICINE_OPTIONS, "handleMedicineSelect", false);
7398                         break;
7399 //              case 2:
7400 //                      refreshMenu ( player, prompt, title, SMUGGLER_TOOLS_OPTIONS, "handleSmugglerSelect", false);
7401 //                      break;
7402                 case 2:
7403                         refreshMenu ( player, prompt, title, getExoticMods(), "handlePowerUpSelect", false);
7404                         break;
7405                 case 3:
7406                         refreshMenu ( player, promptTwo, title, getExoticMods(), "handleAttachmentOneSelect", false);
7407                         break;
7408                 case 4:
7409                         refreshMenu ( player, prompt, title, CLOTHING_OPTIONS, "handleClothingSelect", false);
7410                         break;
7411                 case 5:
7412                         refreshMenu ( player, promptTwo, title, BASIC_MOD_LIST, "handleBasicArmorAttachmentOne", false);
7413                         utils.setScriptVar(player, "character_builder.attachment", "object/tangible/gem/armor.iff");
7414                         break;
7415                 case 6:
7416                         refreshMenu ( player, promptTwo, title, BASIC_MOD_LIST, "handleBasicArmorAttachmentOne", false);
7417                         utils.setScriptVar(player, "character_builder.attachment", "object/tangible/gem/clothing.iff");
7418                         break;
7419                 case 7:
7420                         refreshMenu ( player, prompt, title, CRAFTING_SUIT, "handleCraftingSuitSelect", false);
7421                         break;
7422                 case 8:
7423                         refreshMenu ( player, prompt, title, AURILIA_CRYSTALS, "handleBuffCrystalSelect", false);
7424                         break;
7426                 default:
7427                         cleanScriptVars(player);
7428                         return SCRIPT_CONTINUE;
7430         }
7432         return SCRIPT_CONTINUE;
7436 messageHandler handleMiscSelect()
7438         if ( (params == null) || (params.isEmpty()) )
7439         {
7440                 //cleanScriptVars(player);
7441                 return SCRIPT_CONTINUE;
7442         }
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 )
7451         {
7452                 handleMiscOption(player);
7453                 return SCRIPT_CONTINUE;
7454         }
7456         if(btn == sui.BP_CANCEL)
7457         {
7458                 cleanScriptVars(player);
7459                 closeOldWindow(player);
7460                 return SCRIPT_CONTINUE;
7461         }
7463         if ( idx == -1 || idx > MISC_OPTIONS.length)
7464         {
7465                 cleanScriptVars(player);
7466                 return SCRIPT_CONTINUE;
7467         }
7469         //make sure player is Valid
7470         if(!isIdValid(player))
7471         {
7472                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7473                 cleanScriptVars(player);
7474                 return SCRIPT_OVERRIDE;
7475         }
7476         //make sure player's inventory is valid
7477         if (!isIdValid(pInv))
7478         {
7479                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7480                 cleanScriptVars(player);
7481                 return SCRIPT_OVERRIDE;
7482         }
7483         //make sure there is room in player's inventory
7484         if (getVolumeFree(pInv) <= 0)
7485         {
7486                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7487                 cleanScriptVars(player);
7488                 return SCRIPT_OVERRIDE;
7489         }
7491         switch(idx)
7492         {
7493                 case 0:  // spec-ops pack
7494                         createObject("object/tangible/wearables/backpack/backpack_s06.iff", pInv, "");
7495                         sendSystemMessageTestingOnly(player, "Spec-Ops Pack Issued.");
7496                         break;
7497                 case 1:  // krayt pack
7498                         createObject("object/tangible/wearables/backpack/backpack_krayt_skull.iff", pInv, "");
7499                         sendSystemMessageTestingOnly(player, "Krayt Pack Issued.");
7500                         break;
7501                 case 2:  // pilot ace pack
7502                         createObject("object/tangible/wearables/backpack/backpack_s09.iff", pInv, "");
7503                         sendSystemMessageTestingOnly(player, "Pilot Ace Pack Issued.");
7504                         break;
7505                 case 3:  // jedi pack
7506                         static_item.createNewItemFunction("item_fannypack_04_01", pInv);
7507                         sendSystemMessageTestingOnly(player, "Jedi Belt of Master Bodo Baas Issued.");
7508                         break;
7509                 case 4:
7510                         static_item.createNewItemFunction("armor_snowtrooper_backpack", pInv);
7511                         sendSystemMessageTestingOnly(player, "Snowtrooper Backpack Issued.");
7512                         break;
7513                 case 5:
7514                         static_item.createNewItemFunction("armor_rebel_snow_backpack", pInv);
7515                         sendSystemMessageTestingOnly(player, "Alliance Cold Weather Backpack Issued.");
7516                         break;
7517                 case 6:  // arakyd probe droid
7518                         createObject("object/tangible/mission/mission_bounty_droid_probot.iff", pInv, "");
7519                         sendSystemMessageTestingOnly(player, "Arakyd Probe Droid Issued.");
7520                         break;
7521                 case 7:  // seeker droid
7522                         createObject("object/tangible/mission/mission_bounty_droid_seeker.iff", pInv, "");
7523                         sendSystemMessageTestingOnly(player, "Seeker Droid Issued.");
7524                         break;
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.");
7528                         break;
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.");
7532                         break;
7533                 case 10:  // resource kit
7534                         createObject("object/tangible/veteran_reward/resource.iff", pInv, "");
7535                         sendSystemMessageTestingOnly(player, "Resource Kit Issued");
7536                         break;
7537                 case 11:  // Bio Focus Crystal 
7538                         static_item.createNewItemFunction("item_force_crystal_04_01", pInv);
7539                         sendSystemMessageTestingOnly(player, "Biological Focus Crystal Issued");
7540                         break;
7541                 case 12:  // Synapse Focus Crystal 
7542                         static_item.createNewItemFunction("item_force_crystal_04_02", pInv);
7543                         sendSystemMessageTestingOnly(player, "Synapse Focus Crystal Issued");
7544                         break;
7545                 case 13:  // Musty Injector
7546                         static_item.createNewItemFunction("item_tow_proc_generic_03_01", pInv);
7547                         sendSystemMessageTestingOnly(player, "Mustafarian Injector Issued");
7548                         break;
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");
7552                         break;
7553                 case 15:        
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.");
7591                         
7592                 default:
7593                         cleanScriptVars(player);
7594                         return SCRIPT_CONTINUE;
7596         }
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()) )
7606         {
7607                 //cleanScriptVars(player);
7608                 return SCRIPT_CONTINUE;
7609         }
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 )
7618         {
7619                 handleMiscOption(player);
7620                 return SCRIPT_CONTINUE;
7621         }
7623         if(btn == sui.BP_CANCEL)
7624         {
7625                 cleanScriptVars(player);
7626                 closeOldWindow(player);
7627                 return SCRIPT_CONTINUE;
7628         }
7630         if ( idx == -1 || idx > CRAFTING_SUIT.length)
7631         {
7632                 cleanScriptVars(player);
7633                 return SCRIPT_CONTINUE;
7634         }
7636         //make sure player is Valid
7637         if(!isIdValid(player))
7638         {
7639                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7640                 cleanScriptVars(player);
7641                 return SCRIPT_OVERRIDE;
7642         }
7643         //make sure player's inventory is valid
7644         if (!isIdValid(pInv))
7645         {
7646                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7647                 cleanScriptVars(player);
7648                 return SCRIPT_OVERRIDE;
7649         }
7650         //make sure there is room in player's inventory
7651         if (getVolumeFree(pInv) <= 0)
7652         {
7653                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7654                 cleanScriptVars(player);
7655                 return SCRIPT_OVERRIDE;
7656         }
7658         switch(idx)
7659         {
7660                 case 0:  // crafting suit
7661                         obj_id suit = static_item.createNewItemFunction("item_god_craftingsuit_06_01", pInv);
7662                         if(isIdValid(suit))
7663                                 sendSystemMessageTestingOnly(player, "Blix's Ultra Crafting Suit Issued, May you see nothing but Amazing Crafts!");
7664                         break;
7666                 default:
7667                         cleanScriptVars(player);
7668                         return SCRIPT_CONTINUE;
7670         }
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()) )
7680         {
7681                 //cleanScriptVars(player);
7682                 return SCRIPT_CONTINUE;
7683         }
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 )
7692         {
7693                 handleMiscOption(player);
7694                 return SCRIPT_CONTINUE;
7695         }
7697         if(btn == sui.BP_CANCEL)
7698         {
7699                 cleanScriptVars(player);
7700                 closeOldWindow(player);
7701                 return SCRIPT_CONTINUE;
7702         }
7704         if ( idx == -1 || idx > SMUGGLER_TOOLS_OPTIONS.length)
7705         {
7706                 cleanScriptVars(player);
7707                 return SCRIPT_CONTINUE;
7708         }
7710         //make sure player is Valid
7711         if(!isIdValid(player))
7712         {
7713                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7714                 cleanScriptVars(player);
7715                 return SCRIPT_OVERRIDE;
7716         }
7717         //make sure player's inventory is valid
7718         if (!isIdValid(pInv))
7719         {
7720                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7721                 cleanScriptVars(player);
7722                 return SCRIPT_OVERRIDE;
7723         }
7724         //make sure there is room in player's inventory
7725         if (getVolumeFree(pInv) <= 0)
7726         {
7727                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7728                 cleanScriptVars(player);
7729                 return SCRIPT_OVERRIDE;
7730         }
7732         switch(idx)
7733         {
7734                 case 0:  // Simple Toolkit
7735                         createObject("object/tangible/smuggler/simple_toolkit.iff", pInv, "");
7736                         sendSystemMessageTestingOnly(player, "Simple Toolkit Issued.");
7737                         break;
7738                 case 1:  // Finely Crafted Toolset
7739                         createObject("object/tangible/smuggler/finely_crafted_toolset.iff", pInv, "");
7740                         sendSystemMessageTestingOnly(player, "Finely Crafted Toolset Issued.");
7741                         break;
7742                 case 2:  // Trandoshan Interframe
7743                         createObject("object/tangible/smuggler/trandoshan_interframe.iff", pInv, "");
7744                         sendSystemMessageTestingOnly(player, "Trandoshan Interframe Issued.");
7745                         break;
7746                 case 3:  // Delicate Trigger
7747                         createObject("object/tangible/smuggler/delicate_trigger_assembly.iff", pInv, "");
7748                         sendSystemMessageTestingOnly(player, "Delicate Trigger Issued.");
7749                         break;
7750                 case 4:  // Illegal Core booster
7751                         createObject("object/tangible/smuggler/illegal_core_booster.iff", pInv, "");
7752                         sendSystemMessageTestingOnly(player, "Illegal Core Booster Issued.");
7753                         break;
7754                 case 5:  // Mandalorian Interframe
7755                         createObject("object/tangible/smuggler/mandalorian_interframe.iff", pInv, "");
7756                         sendSystemMessageTestingOnly(player, "Mandalorian Interframe Issued.");
7757                         break;
7758                 case 6:  // Micro Plating
7759                         createObject("object/tangible/smuggler/reactive_micro_plating.iff", pInv, "");
7760                         sendSystemMessageTestingOnly(player, "Micro Plating Issued.");
7761                         break;
7762                 default:
7763                         cleanScriptVars(player);
7764                         return SCRIPT_CONTINUE;
7766         }
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++)
7778         {
7779                 skillMods[i] = utils.packStringId(new string_id("stat_n", skillMods[i]));
7780         }
7782         return skillMods;
7785 messageHandler handlePowerUpSelect()
7787         if ( (params == null) || (params.isEmpty()) )
7788         {
7789                 //cleanScriptVars(player);
7790                 return SCRIPT_CONTINUE;
7791         }
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 )
7802         {
7803                 handleMiscOption(player);
7804                 return SCRIPT_CONTINUE;
7805         }
7807         if(btn == sui.BP_CANCEL)
7808         {
7809                 cleanScriptVars(player);
7810                 closeOldWindow(player);
7811                 return SCRIPT_CONTINUE;
7812         }
7814         if ( idx == -1 || idx > skillMods.length)
7815         {
7816                 cleanScriptVars(player);
7817                 return SCRIPT_CONTINUE;
7818         }
7820         //make sure player is Valid
7821         if(!isIdValid(player))
7822         {
7823                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7824                 cleanScriptVars(player);
7825                 return SCRIPT_OVERRIDE;
7826         }
7827         //make sure player's inventory is valid
7828         if (!isIdValid(pInv))
7829         {
7830                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
7831                 cleanScriptVars(player);
7832                 return SCRIPT_OVERRIDE;
7833         }
7834         //make sure there is room in player's inventory
7835         if (getVolumeFree(pInv) <= 0)
7836         {
7837                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
7838                 cleanScriptVars(player);
7839                 return SCRIPT_OVERRIDE;
7840         }
7842         string skillMod = dataTableGetString(EXOTIC_SKILL_MODS, idx, "name");
7843         int powerRatio = dataTableGetInt(EXOTIC_SKILL_MODS, idx, "ratio");
7844         int power = 75;
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))
7851         {
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");
7857         }
7859         if(isIdValid(shirtPower))
7860         {
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");
7866         }
7868         if(isIdValid(weaponPower))
7869         {
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");
7875         }
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()) )
7884         {
7885                 //cleanScriptVars(player);
7886                 return SCRIPT_CONTINUE;
7887         }
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 )
7901         {
7902                 handleMiscOption(player);
7903                 return SCRIPT_CONTINUE;
7904         }
7906         if(btn == sui.BP_CANCEL)
7907         {
7908                 cleanScriptVars(player);
7909                 closeOldWindow(player);
7910                 return SCRIPT_CONTINUE;
7911         }
7913         if ( idx == -1 || idx > skillMods.length)
7914         {
7915                 cleanScriptVars(player);
7916                 return SCRIPT_CONTINUE;
7917         }
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()) )
7931         {
7932                 //cleanScriptVars(player);
7933                 return SCRIPT_CONTINUE;
7934         }
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 )
7948         {
7949                 handleMiscOption(player);
7950                 return SCRIPT_CONTINUE;
7951         }
7953         if(btn == sui.BP_CANCEL)
7954         {
7955                 cleanScriptVars(player);
7956                 closeOldWindow(player);
7957                 return SCRIPT_CONTINUE;
7958         }
7960         if ( idx == -1 || idx > skillMods.length)
7961         {
7962                 cleanScriptVars(player);
7963                 return SCRIPT_CONTINUE;
7964         }
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()) )
7977         {
7978                 //cleanScriptVars(player);
7979                 return SCRIPT_CONTINUE;
7980         }
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 )
7991         {
7992                 handleMiscOption(player);
7993                 return SCRIPT_CONTINUE;
7994         }
7996         if(btn == sui.BP_CANCEL)
7997         {
7998                 cleanScriptVars(player);
7999                 closeOldWindow(player);
8000                 return SCRIPT_CONTINUE;
8001         }
8003         if ( idx == -1 || idx > skillMods.length)
8004         {
8005                 cleanScriptVars(player);
8006                 return SCRIPT_CONTINUE;
8007         }
8009         utils.setScriptVar(player, "character_builder.modTypeThree", idx);
8011         //make sure player is Valid
8012         if(!isIdValid(player))
8013         {
8014                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8015                 cleanScriptVars(player);
8016                 return SCRIPT_OVERRIDE;
8017         }
8018         //make sure player's inventory is valid
8019         if (!isIdValid(pInv))
8020         {
8021                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8022                 cleanScriptVars(player);
8023                 return SCRIPT_OVERRIDE;
8024         }
8025         //make sure there is room in player's inventory
8026         if (getVolumeFree(pInv) <= 0)
8027         {
8028                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8029                 cleanScriptVars(player);
8030                 return SCRIPT_OVERRIDE;
8031         }
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");
8046         int power = 35;
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))
8056         {
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");
8062         }
8064         if(isIdValid(shirtPower))
8065         {
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");
8071         }
8073         if(isIdValid(weaponPower))
8074         {
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");
8080         }
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()) )
8089         {
8090                 //cleanScriptVars(player);
8091                 return SCRIPT_CONTINUE;
8092         }
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 )
8101         {
8102                 handleMiscOption(player);
8103                 return SCRIPT_CONTINUE;
8104         }
8106         if(btn == sui.BP_CANCEL)
8107         {
8108                 cleanScriptVars(player);
8109                 closeOldWindow(player);
8110                 return SCRIPT_CONTINUE;
8111         }
8113         if ( idx == -1 || idx > CLOTHING_OPTIONS.length)
8114         {
8115                 cleanScriptVars(player);
8116                 return SCRIPT_CONTINUE;
8117         }
8119         //make sure player is Valid
8120         if(!isIdValid(player))
8121         {
8122                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8123                 cleanScriptVars(player);
8124                 return SCRIPT_OVERRIDE;
8125         }
8126         //make sure player's inventory is valid
8127         if (!isIdValid(pInv))
8128         {
8129                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8130                 cleanScriptVars(player);
8131                 return SCRIPT_OVERRIDE;
8132         }
8133         //make sure there is room in player's inventory
8134         if (getVolumeFree(pInv) <= 0)
8135         {
8136                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8137                 cleanScriptVars(player);
8138                 return SCRIPT_OVERRIDE;
8139         }
8141         string clothing = "";
8143         switch(idx)
8144         {
8145                 case 0:  //socketed shirt
8146                         clothing = "object/tangible/wearables/shirt/npe_shirt.iff";
8147                         break;
8148                 case 1:  //socketed gloves
8149                         clothing = "object/tangible/wearables/gloves/gloves_s14.iff";
8150                         break;
8151                 case 2:  //socketed hat
8152                         clothing = "object/tangible/wearables/hat/hat_s02.iff";
8153                         break;
8154                 case 3:  //socketed pants
8155                         clothing = "object/tangible/wearables/pants/pants_s07.iff";
8156                         break;
8157                 case 4:  //socketed jacket
8158                         clothing = "object/tangible/wearables/jacket/jacket_s13.iff";
8159                         break;
8160                 case 5:  //socketed boots
8161                         clothing = "object/tangible/wearables/boots/boots_s05.iff";
8162                         break;
8163                 default:
8164                         cleanScriptVars(player);
8165                         return SCRIPT_CONTINUE;
8166         }
8168         if(clothing != null && clothing != "")
8169         {
8170                 obj_id clothingObject = createObject(clothing, pInv, "");
8172                 if(isIdValid(clothingObject))
8173                 {
8174                         setSocketsUp(clothingObject);
8175                         sendSystemMessageTestingOnly(player, "Clothing Issued");
8176                 }
8177         }
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()) )
8186         {
8187                 //cleanScriptVars(player);
8188                 return SCRIPT_CONTINUE;
8189         }
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 )
8201         {
8202                 handleMiscOption(player);
8203                 return SCRIPT_CONTINUE;
8204         }
8206         if(btn == sui.BP_CANCEL)
8207         {
8208                 cleanScriptVars(player);
8209                 closeOldWindow(player);
8210                 return SCRIPT_CONTINUE;
8211         }
8213         if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8214         {
8215                 cleanScriptVars(player);
8216                 return SCRIPT_CONTINUE;
8217         }
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()) )
8229         {
8230                 //cleanScriptVars(player);
8231                 return SCRIPT_CONTINUE;
8232         }
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 )
8244         {
8245                 handleMiscOption(player);
8246                 return SCRIPT_CONTINUE;
8247         }
8249         if(btn == sui.BP_CANCEL)
8250         {
8251                 cleanScriptVars(player);
8252                 closeOldWindow(player);
8253                 return SCRIPT_CONTINUE;
8254         }
8256         if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8257         {
8258                 cleanScriptVars(player);
8259                 return SCRIPT_CONTINUE;
8260         }
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()) )
8272         {
8273                 //cleanScriptVars(player);
8274                 return SCRIPT_CONTINUE;
8275         }
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 )
8284         {
8285                 handleMiscOption(player);
8286                 return SCRIPT_CONTINUE;
8287         }
8289         if(btn == sui.BP_CANCEL)
8290         {
8291                 cleanScriptVars(player);
8292                 closeOldWindow(player);
8293                 return SCRIPT_CONTINUE;
8294         }
8296         if ( idx == -1 || idx > BASIC_MOD_LIST.length)
8297         {
8298                 cleanScriptVars(player);
8299                 return SCRIPT_CONTINUE;
8300         }
8302         utils.setScriptVar(player, "character_builder.basicModTypeThree", idx);
8304         //make sure player is Valid
8305         if(!isIdValid(player))
8306         {
8307                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8308                 cleanScriptVars(player);
8309                 return SCRIPT_OVERRIDE;
8310         }
8311         //make sure player's inventory is valid
8312         if (!isIdValid(pInv))
8313         {
8314                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8315                 cleanScriptVars(player);
8316                 return SCRIPT_OVERRIDE;
8317         }
8318         //make sure there is room in player's inventory
8319         if (getVolumeFree(pInv) <= 0)
8320         {
8321                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8322                 cleanScriptVars(player);
8323                 return SCRIPT_OVERRIDE;
8324         }
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];
8334         int powerRatio = 1;
8335         int power = 35;
8336         power = power/powerRatio;
8338         string attachment = utils.getStringScriptVar(player, "character_builder.attachment");
8339         obj_id armorPower = createObject(attachment, pInv, "");
8341         if(isIdValid(armorPower))
8342         {
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);
8349         }
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()) )
8359         {
8360                 //cleanScriptVars(player);
8361                 return SCRIPT_CONTINUE;
8362         }
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 )
8371         {
8372                 handleMiscOption(player);
8373                 return SCRIPT_CONTINUE;
8374         }
8376         if(btn == sui.BP_CANCEL)
8377         {
8378                 cleanScriptVars(player);
8379                 closeOldWindow(player);
8380                 return SCRIPT_CONTINUE;
8381         }
8383         if ( idx == -1 || idx > AURILIA_CRYSTALS.length)
8384         {
8385                 cleanScriptVars(player);
8386                 return SCRIPT_CONTINUE;
8387         }
8389         //make sure player is Valid
8390         if(!isIdValid(player))
8391         {
8392                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8393                 cleanScriptVars(player);
8394                 return SCRIPT_OVERRIDE;
8395         }
8396         //make sure player's inventory is valid
8397         if (!isIdValid(pInv))
8398         {
8399                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8400                 cleanScriptVars(player);
8401                 return SCRIPT_OVERRIDE;
8402         }
8403         //make sure there is room in player's inventory
8404         if (getVolumeFree(pInv) <= 0)
8405         {
8406                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8407                 cleanScriptVars(player);
8408                 return SCRIPT_OVERRIDE;
8409         }
8411         string crystal = "";
8413         switch(idx)
8414         {
8415                 case 0:
8416                         crystal = "item_aurilia_buff_crystal_03_01";
8417                         break;
8418                 case 1:
8419                         crystal = "item_aurilia_buff_crystal_03_02";
8420                         break;
8421                 case 2:
8422                         crystal = "item_aurilia_buff_crystal_03_03";
8423                         break;
8424                 default:
8425                         cleanScriptVars(player);
8426                         return SCRIPT_CONTINUE;
8427         }
8429         if(crystal != null && crystal != "")
8430         {
8431                 if(isGod(player))
8432                         static_item.createNewItemFunction(crystal, pInv);
8433                 else
8434                         sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Aurilia Crystals!");
8435         }
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()) )
8447         {
8448                 //cleanScriptVars(player);
8449                 return SCRIPT_CONTINUE;
8450         }
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 )
8459         {
8460                 handleMiscOption(player);
8461                 return SCRIPT_CONTINUE;
8462         }
8464         if(btn == sui.BP_CANCEL)
8465         {
8466                 cleanScriptVars(player);
8467                 closeOldWindow(player);
8468                 return SCRIPT_CONTINUE;
8469         }
8471         if ( idx == -1 || idx > MEDICINE_OPTIONS.length)
8472         {
8473                 cleanScriptVars(player);
8474                 return SCRIPT_CONTINUE;
8475         }
8477         //make sure player is Valid
8478         if(!isIdValid(player))
8479         {
8480                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8481                 cleanScriptVars(player);
8482                 return SCRIPT_OVERRIDE;
8483         }
8484         //make sure player's inventory is valid
8485         if (!isIdValid(pInv))
8486         {
8487                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8488                 cleanScriptVars(player);
8489                 return SCRIPT_OVERRIDE;
8490         }
8491         //make sure there is room in player's inventory
8492         if (getVolumeFree(pInv) <= 0)
8493         {
8494                 sendSystemMessageTestingOnly(player, "Your Inventory is Full, please make room and try again.");
8495                 cleanScriptVars(player);
8496                 return SCRIPT_OVERRIDE;
8497         }
8499         string[] allTemplates = new string[]{
8500                                 "bactainfusion",
8501                                 "bactajab",
8502                                 "bactashot",
8503                                 "bactaspray",
8504                                 "bactatoss",
8505                                 "deuteriumtoss",
8506                                 "disinfect",
8507                                 "endorphineinjection",
8508                                 "neurotoxin",
8509                                 "nutrientinjection",
8510                                 "stabilizer",
8511                                 "thyroidrupture",
8512                                 "traumatize"
8513                         };
8516         switch(idx)
8517         {
8518                 case 0:  // stimpack a
8519                         obj_id stima = createObject("object/tangible/medicine/instant_stimpack/stimpack_a.iff", pInv, "");
8520                         if(isIdValid(stima))
8521                         {
8522                                 setCount(stima, 350);
8523                                 setObjVar(stima, "healing.power", 250);
8524                                 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-A Issued!");
8525                         }
8526                         else
8527                         {
8528                                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8529                         }
8530                         break;
8531                 case 1:  // stimpack b
8533                         obj_id stimb = createObject("object/tangible/medicine/instant_stimpack/stimpack_b.iff", pInv, "");
8534                         if(isIdValid(stimb))
8535                         {
8536                                 setCount(stimb, 350);
8537                                 setObjVar(stimb, "healing.power", 400);
8538                                 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-B Issued!");
8539                         }
8540                         else
8541                         {
8542                                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8543                         }
8544                         break;
8545                 case 2:  // stimpack c
8546                         obj_id stimc = createObject("object/tangible/medicine/instant_stimpack/stimpack_c.iff", pInv, "");
8547                         if(isIdValid(stimc))
8548                         {
8549                                 setCount(stimc, 350);
8550                                 setObjVar(stimc, "healing.power", 700);
8551                                 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-C Issued!");
8552                         }
8553                         else
8554                         {
8555                                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8556                         }
8557                         break;
8558                 case 3:  // stimpack d
8559                         obj_id stimd = createObject("object/tangible/medicine/instant_stimpack/stimpack_d.iff", pInv, "");
8560                         if(isIdValid(stimd))
8561                         {
8562                                 setCount(stimd, 350);
8563                                 setObjVar(stimd, "healing.power", 1200);
8564                                 sendSystemMessageTestingOnly(player, "High Charge Instant Stimpack-D Issued!");
8565                         }
8566                         else
8567                         {
8568                                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction, Invalid Stim.");
8569                         }
8570                         break;
8571 /*              case 4: // All enhancers
8572                         for(int i = 0; i < allTemplates.length; i++)
8573                         {
8574                                 obj_id enh = createObject("object/tangible/medicine/enhancer/enhancer_" + allTemplates[i] + ".iff", pInv, "");
8575                                 if(isIdValid(enh))
8576                                 {
8577                                         setCount(enh, 150);
8578                                         setObjVar(enh, "healing.enhancement", 700.0f);
8579                                 }
8580                         }
8581                         break;
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, "");
8596                         if(isIdValid(enh))
8597                         {
8598                                 setCount(enh, 150);
8599                                 setObjVar(enh, "healing.enhancement", 700.0f);
8600                         }
8601                         break;
8603                 default:
8604                         cleanScriptVars(player);
8605                         return SCRIPT_CONTINUE;
8606         }
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()) )
8623         {
8624                 //cleanScriptVars(player);
8625                 return SCRIPT_CONTINUE;
8626         }
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 )
8633         {
8634                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
8635                 return SCRIPT_CONTINUE;
8636         }
8638         if(btn == sui.BP_CANCEL)
8639         {
8640                 cleanScriptVars(player);
8641                 closeOldWindow(player);
8642                 return SCRIPT_CONTINUE;
8643         }
8645         if ( idx == -1 || idx > HEAL_OPTIONS.length)
8646         {
8647                 cleanScriptVars(player);
8648                 closeOldWindow(player);
8649                 return SCRIPT_CONTINUE;
8650         }
8652         //make sure player is Valid
8653         if(!isIdValid(player))
8654         {
8655                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8656                 cleanScriptVars(player);
8657                 return SCRIPT_OVERRIDE;
8658         }
8661                 switch(idx)
8662                 {
8664                 case 0:
8665                         {
8666                         sendSystemMessageTestingOnly(player, "You have been licked by a Frog!  All wounds have been Healed!");
8667                         }
8668                         break;
8669                 case 1:
8671                         healShockWound(player, 1000);
8672                         sendSystemMessageTestingOnly(player, "You have been licked by a Frog!  All Battle Fatigue has been Healed!");
8673                         break;
8674                 default:
8675                         cleanScriptVars(player);
8676                         return SCRIPT_CONTINUE;
8678         }
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);
8692                                 }
8694 messageHandler handleFactionOptions()
8696         if ( (params == null) || (params.isEmpty()) )
8697         {
8698                 //cleanScriptVars(player);
8699                 return SCRIPT_CONTINUE;
8700         }
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 )
8707         {
8708                 startCharacterBuilder(player);
8709                 return SCRIPT_CONTINUE;
8710         }
8712         if(btn == sui.BP_CANCEL)
8713         {
8714                 cleanScriptVars(player);
8715                 closeOldWindow(player);
8716                 return SCRIPT_CONTINUE;
8717         }
8719         if ( idx == -1 || idx > FACTION_OPTIONS.length)
8720         {
8721                 cleanScriptVars(player);
8722                 return SCRIPT_CONTINUE;
8723         }
8725         //make sure player is Valid
8726         if(!isIdValid(player))
8727         {
8728                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8729                 cleanScriptVars(player);
8730                 return SCRIPT_OVERRIDE;
8731         }
8733         string prompt = "Select the desired option";
8734         string title = "Character Builder Terminal";
8735         int pid = 0;
8736         string factionName = factions.getFaction(player);
8737         int current_rank = pvpGetCurrentGcwRank(player);
8738         int standing  = 0;
8739         switch(idx)
8740         {
8742                 case 0:
8743                         factionName = "Imperial";
8744                         if (factionName == null)
8745                         {
8746                                 //sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8747                                 return SCRIPT_OVERRIDE;
8748                         }
8749                         standing = (int)factions.getFactionStanding(player, factionName);
8750                         factions.addFactionStanding(player, factionName,  FACTION_AMT);
8751                         break;
8752                 case 1:
8753                         factionName = "Rebel";
8754                         if (factionName == null)
8755                         {
8756                                 //sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8757                                 return SCRIPT_OVERRIDE;
8758                         }
8759                         standing = (int)factions.getFactionStanding(player, factionName);
8760                         factions.addFactionStanding(player, factionName,  FACTION_AMT);
8761                         break;
8762                 default:
8763                         cleanScriptVars(player);
8764                         return SCRIPT_CONTINUE;
8766         }
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))
8805         {
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);
8820         }
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()) )
8835         {
8836                 //cleanScriptVars(player);
8837                 return SCRIPT_CONTINUE;
8838         }
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 )
8845         {
8846                 cleanScriptVars(player);
8847                 return SCRIPT_CONTINUE;
8848         }
8850         if ( idx == -1 || idx > FACTION_OPTIONS.length)
8851         {
8852                 cleanScriptVars(player);
8853                 return SCRIPT_CONTINUE;
8854         }
8856         //make sure player is Valid
8857         if(!isIdValid(player))
8858         {
8859                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
8860                 cleanScriptVars(player);
8861                 return SCRIPT_OVERRIDE;
8862         }
8864         string prompt = "Select the desired option";
8865         string title = "Character Builder Terminal";
8866         int pid = 0;
8867         string factionName = factions.getFaction(player);
8868         int current_rank = pvpGetCurrentGcwRank(player);
8869         switch(idx)
8870         {
8872                 case 0:
8873                         if (factionName == null)
8874                         {
8875                                 sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Points!");
8876                                 return SCRIPT_OVERRIDE;
8877                         }
8878                         int standing = (int)factions.getFactionStanding(player, factionName);
8879                         if ( standing < 25000 )
8880                         {
8881                                 factions.addFactionStanding(player, factionName,  FACTION_AMT);
8882                         }
8883                         else
8884                         {
8885                                 sendSystemMessageTestingOnly(player, "You already have a large amount of unspent faction points. Why do you need any more?");
8886                         }
8887                         break;
8888                 case 1:
8889                         if (space_flags.isImperialPilot(player))
8890                         {
8891                                 sendSystemMessageTestingOnly(player, "You are an Imperial Pilot!  You must surrender your current space faction before you become a Rebel!");
8892                                 return SCRIPT_OVERRIDE;
8893                         }
8894                         if (factionName == null)
8895                         {
8896                                 pvpSetAlignedFaction(player, ##"rebel");
8897                                 pvpMakeCovert(player);
8898                                 sendSystemMessageTestingOnly(player, "Faction Set.  You are now a Covert Rebel!");
8899                         }
8900                         else if (factionName == "Imperial")
8901                         {
8902                                 sendSystemMessageTestingOnly(player, "You are an Imperial!  You must surrender your current faction before you become a Rebel!");
8903                         }
8904                         else if (factionName == "Rebel")
8905                         {
8906                                 sendSystemMessageTestingOnly(player, "You are already a Rebel!");
8907                         }
8908                         break;
8909                 case 2:
8910                         if (space_flags.isRebelPilot(player))
8911                         {
8912                                 sendSystemMessageTestingOnly(player, "You are a Rebel Pilot!  You must surrender your current space faction before you become an Imperial!");
8913                                 return SCRIPT_OVERRIDE;
8914                         }
8915                         if (factionName == null)
8916                         {
8917                                 pvpSetAlignedFaction(player, ##"imperial");
8918                                 pvpMakeCovert(player);
8919                                 sendSystemMessageTestingOnly(player, "Faction Set.  You are now a Covert Imperial!");
8920                         }
8921                         else if (factionName == "Rebel")
8922                         {
8923                                 sendSystemMessageTestingOnly(player, "You are a Rebel!  You must surrender your current faction before you become an Imperial!");
8924                         }
8925                         else if (factionName == "Imperial")
8926                         {
8927                                 sendSystemMessageTestingOnly(player, "You are already an Imperial!");
8928                         }
8929                         break;
8930 /*              case 3:
8931                         if (factionName == null)
8932                         {
8933                                 sendSystemMessageTestingOnly(player, "You must declare a Faction before Declaring Overt!");
8934                                 return SCRIPT_OVERRIDE;
8935                         }
8936                         else
8937                         {
8938                                 pvpMakeDeclared(player);
8939                                 sendSystemMessageTestingOnly(player, "OVERT Faction Status SET!");
8940                         }
8941                         break;
8942                 case 4:
8943                         if (factionName == null)
8944                         {
8945                                 sendSystemMessageTestingOnly(player, "You must declare a Faction before Declaring Covert!");
8946                                 return SCRIPT_OVERRIDE;
8947                         }
8948                         else
8949                         {
8950                                 pvpMakeCovert(player);
8951                                 sendSystemMessageTestingOnly(player, "COVERT Faction Status SET!");
8952                         }
8953                         break;
8955                 case 3:
8956                         if (factionName == null)
8957                         {
8958                         sendSystemMessageTestingOnly(player, "You must declare a Faction before receiving Rank");
8959                         return SCRIPT_OVERRIDE;
8960                         }
8961                         else
8962                         {
8963                                 factions.setRank(player, current_rank + 1);
8964                         }
8965                         break;
8967                 case 4:
8968                         if (factionName == null)
8969                         {
8970                         sendSystemMessageTestingOnly(player, "You must declare a Faction before losing Rank");
8971                         return SCRIPT_OVERRIDE;
8972                         }
8973                         else
8974                         {
8975                                 factions.setRank(player, current_rank - 1);
8976                         }
8977                         break;
8978                 case 5:
8979                         if(hasObjVar(player, "intChangingFactionStatus"))
8980                         {
8981                                 removeObjVar(player, "intChangingFactionStatus");
8982                         }
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.");
8989                         break;
8990                 default:
8991                         cleanScriptVars(player);
8992                         return SCRIPT_CONTINUE;
8994         }
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()) )
9012         {
9013                 //cleanScriptVars(player);
9014                 return SCRIPT_CONTINUE;
9015         }
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 )
9023         {
9024                 startCharacterBuilder(player);
9025                 return SCRIPT_CONTINUE;
9026         }
9028         if(btn == sui.BP_CANCEL)
9029         {
9030                 cleanScriptVars(player);
9031                 closeOldWindow(player);
9032                 return SCRIPT_CONTINUE;
9033         }
9035         if ( idx == -1 || idx > ROADMAP_SKILL_OPTIONS.length)
9036         {
9037                 cleanScriptVars(player);
9038                 return SCRIPT_CONTINUE;
9039         }
9041         //make sure player is Valid
9042         if(!isIdValid(player))
9043         {
9044                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9045                 cleanScriptVars(player);
9046                 return SCRIPT_OVERRIDE;
9047         }
9049         string prompt = "Select the desired roadmap skill option";
9050         string title = "Character Builder Terminal";
9051         int pid = 0;
9053         switch(idx)
9054         {
9055                 case 0:
9056                         if(isGod(player))
9057                         {
9058                                 handleRoadmapChoice(player);
9059                         }
9060                         else
9061                         {
9062                                 sendSystemMessageTestingOnly(player, "You cannot access that option.");
9063                         }
9064                         break;
9065                 case 1:
9066                         string skillName = getWorkingSkill(player);
9068                         dictionary xpReqs = getSkillPrerequisiteExperience(skillName);
9069                         if (xpReqs == null || xpReqs.isEmpty())
9070                         {
9071                                 sendSystemMessageTestingOnly(player, "Current working skill is invalid.");
9072                                 return SCRIPT_CONTINUE;
9073                         }
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 )
9080                         {
9081                                 grantExperiencePoints(player, xpType, xpCost - curXP);
9082                         }
9083                         skill_template.earnWorkingSkill(player);
9084                         handleRoadmapSkills(player);
9085                         break;
9086                 case 2:
9087                         string template = getSkillTemplate(player);
9088                         sui.inputbox(self, player, "Enter your desired level.", "handleAutoLevelSelect");
9089                         break;
9090                 case 3:
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);
9108                         break;
9109                 default:
9110                         cleanScriptVars(player);
9111                         return SCRIPT_CONTINUE;
9112         }
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)
9124         {
9125                 sendSystemMessageTestingOnly(player, "Invalid level entered!");
9126         }
9127         else
9128         {
9129                 respec.autoLevelPlayer(player, level, false);
9130         }
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)
9147         {
9148                 sendSystemMessage(player, SID_TERMINAL_DENIED);
9149                 cleanScriptVars(player);
9150                 return;
9151         }
9152         else
9153         {
9154                 closeOldWindow(player);
9155                 utils.setBatchScriptVar(player, "character_builder.roadmap_list", roadmapList);
9156         }
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 )
9167         {
9168                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
9169                 return SCRIPT_CONTINUE;
9170         }
9172         if(btn == sui.BP_CANCEL)
9173         {
9174                 cleanScriptVars(player);
9175                 closeOldWindow(player);
9176                 return SCRIPT_CONTINUE;
9177         }
9179         if ( idx == -1)
9180         {
9181                 cleanScriptVars(player);
9182                 return SCRIPT_CONTINUE;
9183         }
9185         boolean levelNinety = false;
9187         if(idx % 2 == 1)
9188         {
9189                 levelNinety = true;
9190         }
9192         idx = idx / 2;
9194         string[] roadmapList = utils.getStringBatchScriptVar(player, "character_builder.roadmap_list");
9196         if(exists(player))
9197         {
9198                 if(!levelNinety)
9199                 {
9200                         handleRoadmapSkillProgression(player, roadmapList[idx]);
9201                 }
9202                 else
9203                 {
9204                         handleProfessionLevelToNinety(player, roadmapList[idx]);
9205                 }
9206         }
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)
9222         {
9223                 char branch = list[i / 2].charAt(list[i / 2].length() - 1);
9224                 branch -= 49;
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";
9232         }
9234         return newList;
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)
9266         {
9267                 sendSystemMessage(player, SID_TERMINAL_DENIED);
9268                 cleanScriptVars(player);
9269                 return;
9270         }
9271         else
9272         {
9274                 closeOldWindow(player);
9275                 utils.setScriptVar(player, "character_builder.skill_template", roadmap);
9276                 utils.setBatchScriptVar(player, "character_builder.roadmap_skills", skillList);
9277         }
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 )
9289         {
9290                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
9291                 return SCRIPT_CONTINUE;
9292         }
9294         if(btn == sui.BP_CANCEL)
9295         {
9296                 cleanScriptVars(player);
9297                 closeOldWindow(player);
9298                 return SCRIPT_CONTINUE;
9299         }
9301         if ( idx == -1)
9302         {
9303                 cleanScriptVars(player);
9304                 return SCRIPT_CONTINUE;
9305         }
9307         if ( exists(player)  && !outOfRange(self , player, false) )
9308         {
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++)
9324                 {
9325                         skill.grantSkillToPlayer(player, roadmapSkills[i]);
9326                 }
9328                 setWorkingSkill(player, roadmapSkills[idx]);
9330                 //reset the expertise
9331                 utils.fullExpertiseReset(player, true);
9333                 expertise.autoAllocateExpertiseByLevel(player, false);
9334                 skill.recalcPlayerPools(player, true);
9335         }
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))
9348         {
9349                 while(skillList.length > 0 && attempts > 0)
9350                 {
9351                         for (int i = 0; i < skillList.length; i++)
9352                         {
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"))
9366                                 {
9367                                         skill.revokeSkillSilent(player, skillName);
9368                                 }
9369                         }
9371                         // The new skill list is the remaining skills.
9372                         skillList = getSkillListingForPlayer(player);
9374                         // Prevent data from creating an infinite loop.
9375                         --attempts;
9376                 }
9377         }
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++)
9393         {
9394                 abilityNames[i] = utils.packStringId(new string_id("pet/pet_ability", abilityNames[i]));
9395         }
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()) )
9405         {
9406                 //cleanScriptVars(player);
9407                 return SCRIPT_CONTINUE;
9408         }
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 )
9415         {
9416                 startCharacterBuilder(player);
9417                 return SCRIPT_CONTINUE;
9418         }
9420         if(btn == sui.BP_CANCEL)
9421         {
9422                 cleanScriptVars(player);
9423                 closeOldWindow(player);
9424                 return SCRIPT_CONTINUE;
9425         }
9427         if ( idx == -1 )
9428         {
9429                 cleanScriptVars(player);
9430                 return SCRIPT_CONTINUE;
9431         }
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)
9440         {
9441                 if (utils.getElementPositionInArray(chAbilityList, petAbilityList[idx]) > -1)
9442                 {
9443                         refreshMenu ( player, "Select the desired Pet Ability", "Character Builder Terminal", petAbilityNames, "handlePetAbilitySelection", false);
9444                         return SCRIPT_CONTINUE;
9445                 }
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];
9452         }
9453         else
9454         {
9455                 newAbilityList = new int[1];
9456                 newAbilityList[0] = petAbilityList[idx];
9457         }
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()) )
9475         {
9476                 //cleanScriptVars(player);
9477                 return SCRIPT_CONTINUE;
9478         }
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 )
9487         {
9488                 startCharacterBuilder(player);
9489                 return SCRIPT_CONTINUE;
9490         }
9492         if(btn == sui.BP_CANCEL)
9493         {
9494                 cleanScriptVars(player);
9495                 closeOldWindow(player);
9496                 return SCRIPT_CONTINUE;
9497         }
9499         if ( idx == -1 || idx > JEDI_OPTIONS.length)
9500         {
9501                 cleanScriptVars(player);
9502                 return SCRIPT_CONTINUE;
9503         }
9505         //make sure player is Valid
9506         if(!isIdValid(player))
9507         {
9508                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9509                 cleanScriptVars(player);
9510                 return SCRIPT_OVERRIDE;
9511         }
9514                 string prompt = "Select the desired armor option";
9515                 string title = "Character Builder Terminal";
9516                 int pid = 0;
9518                 switch(idx)
9519                 {
9520                         case 0:
9521                                 refreshMenu( player, prompt, title, CRYSTAL_OPTIONS, "handleCrystalSelect", false);
9522                                 break;
9523                         case 1:
9524                                 refreshMenu( player, prompt, title, SABER_OPTIONS, "handleSaberSelect", false);
9525                                 break;
9526                         case 2:
9527                                 refreshMenu( player, prompt, title, ROBE_OPTIONS, "handleRobeSelect", false);
9528                                 break;
9529                         /*
9530                         case 2:
9531                                 refreshMenu( player, prompt, title, JEDI_PLAYTEST_OPTIONS, "handleDesignerSelect", false);
9532                                 break;
9533                         */
9534                         default:
9535                                 cleanScriptVars(player);
9536                                 return SCRIPT_CONTINUE;
9537                 }
9538                 return SCRIPT_CONTINUE;
9540 messageHandler handleCrystalSelect()
9542         if ( (params == null) || (params.isEmpty()) )
9543         {
9544                 //cleanScriptVars(player);
9545                 return SCRIPT_CONTINUE;
9546         }
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 )
9555         {
9556                 handleJediOption(player);
9557                 return SCRIPT_CONTINUE;
9558         }
9560         if(btn == sui.BP_CANCEL)
9561         {
9562                 cleanScriptVars(player);
9563                 closeOldWindow(player);
9564                 return SCRIPT_CONTINUE;
9565         }
9567         if ( idx == -1 || idx > CRYSTAL_OPTIONS.length)
9568         {
9569                 cleanScriptVars(player);
9570                 return SCRIPT_CONTINUE;
9571         }
9572         //make sure player is Valid
9573         if(!isIdValid(player))
9574         {
9575                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9576                 cleanScriptVars(player);
9577                 return SCRIPT_OVERRIDE;
9578         }
9579         //make sure player's inventory is valid
9580         if (!isIdValid(pInv))
9581         {
9582                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9583                 cleanScriptVars(player);
9584                 return SCRIPT_OVERRIDE;
9585         }
9586         //make sure there is room in player's inventory
9587         if (getVolumeFree(pInv) <= 4)
9588         {
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;
9592         }
9594                 switch(idx)
9595                 {
9597                         case 0:
9598                                 for (int i = 0; i < 4; i++)
9599                                 {
9600                                         jedi.createColorCrystal(pInv, rand(0, 11));
9601                                 }
9602                                 sendSystemMessageTestingOnly(player, "Color Crystals Issued!");
9603                                 break;
9604                         case 1:
9605                                 if(isGod(player))
9606                                 {
9607                                         static_item.createNewItemFunction("item_tow_lava_crystal_06_01",pInv);
9608                                         sendSystemMessageTestingOnly(player, "Lava Crystal Issued!");
9609                                 }
9610                                 else
9611                                 {
9612                                         sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Lava Crystal!");
9613                                 }
9614                                 break;
9615                         case 2:
9616                                 for (int i = 0; i < 4; i++)
9617                                 {
9618                                         static_item.createNewItemFunction("item_power_crystal_04_15", pInv);
9619                                 }
9620                                 sendSystemMessageTestingOnly(player, "Power Crystals Issued!");
9621                                 break;
9622                         case 3:
9623                                 if(isGod(player))
9624                                 {
9625                                         for (int i = 0; i < 4; i++)
9626                                         {
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);
9630                                         }
9631                                         sendSystemMessageTestingOnly(player, "Ancient Krayt Pearls Issued!");
9632                                 }
9633                                 else
9634                                 {
9635                                         sendSystemMessageTestingOnly(player, "You Must be in God Mode to enjoy the Ancient Krayt Pearls Issued!");
9636                                 }
9637                                 break;
9638                         default:
9639                                 cleanScriptVars(player);
9640                                 return SCRIPT_CONTINUE;
9642         }
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()) )
9651         {
9652                 //cleanScriptVars(player);
9653                 return SCRIPT_CONTINUE;
9654         }
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 )
9663         {
9664                 handleJediOption(player);
9665                 return SCRIPT_CONTINUE;
9666         }
9668         if(btn == sui.BP_CANCEL)
9669         {
9670                 cleanScriptVars(player);
9671                 closeOldWindow(player);
9672                 return SCRIPT_CONTINUE;
9673         }
9675         if ( idx == -1 || idx > SABER_OPTIONS.length)
9676         {
9677                 cleanScriptVars(player);
9678                 return SCRIPT_CONTINUE;
9679         }
9680         //make sure player is Valid
9681         if(!isIdValid(player))
9682         {
9683                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9684                 cleanScriptVars(player);
9685                 return SCRIPT_OVERRIDE;
9686         }
9687         //make sure player's inventory is valid
9688         if (!isIdValid(pInv))
9689         {
9690                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9691                 cleanScriptVars(player);
9692                 return SCRIPT_OVERRIDE;
9693         }
9694         //make sure there is room in player's inventory
9695         if (getVolumeFree(pInv) <= 4)
9696         {
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;
9700         }
9702                 switch(idx)
9703                 {
9705                         case 0:
9706                                 {
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!");
9716                                 }
9717                                 break;
9718                         case 1:
9719                                 {
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!");
9729                                 }
9730                                 break;
9731                         case 2:
9732                                 {
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!");
9743                                 }
9744                                 break;
9745                         case 3:
9746                                 {
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!");
9756                                 }
9757                                 break;
9758                         case 4:
9759                                 {
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!");
9769                                 }
9770                                 break;
9771                         case 5:
9772                                 {
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!");
9782                                 }
9783                                 break;
9784                         default:
9785                                 cleanScriptVars(player);
9786                                 return SCRIPT_CONTINUE;
9788                 }
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()) )
9797         {
9798                 //cleanScriptVars(player);
9799                 return SCRIPT_CONTINUE;
9800         }
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 )
9809         {
9810                 handleJediOption(player);
9811                 return SCRIPT_CONTINUE;
9812         }
9814         if(btn == sui.BP_CANCEL)
9815         {
9816                 cleanScriptVars(player);
9817                 closeOldWindow(player);
9818                 return SCRIPT_CONTINUE;
9819         }
9821         if ( idx == -1 || idx > ROBE_OPTIONS.length)
9822         {
9823                 cleanScriptVars(player);
9824                 return SCRIPT_CONTINUE;
9825         }
9826         //make sure player is Valid
9827         if(!isIdValid(player))
9828         {
9829                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9830                 cleanScriptVars(player);
9831                 return SCRIPT_OVERRIDE;
9832         }
9833         //make sure player's inventory is valid
9834         if (!isIdValid(pInv))
9835         {
9836                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9837                 cleanScriptVars(player);
9838                 return SCRIPT_OVERRIDE;
9839         }
9840         //make sure there is room in player's inventory
9841         if (getVolumeFree(pInv) <= 2)
9842         {
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;
9846         }
9848                 switch(idx)
9849                 {
9851                         case 0:
9852                                 {
9853                                         static_item.createNewItemFunction("item_jedi_robe_padawan_04_01", pInv);
9854                                         sendSystemMessageTestingOnly(player, "Padawan Robe Issued!");
9855                                 }
9856                                 break;
9857                         case 1:
9858                                 {
9859                                         static_item.createNewItemFunction("item_jedi_robe_light_03_01", pInv);
9860                                         sendSystemMessageTestingOnly(player, "Light Acolyte Robe Issued!");
9861                                 }
9862                                 break;
9863                         case 2:
9864                                 {
9865                                         static_item.createNewItemFunction("item_jedi_robe_dark_03_01", pInv);
9866                                         sendSystemMessageTestingOnly(player, "Dark Acolyte Robe Issued!");
9867                                 }
9868                                 break;
9869                         case 3:
9870                                 {
9871                                         static_item.createNewItemFunction("item_jedi_robe_light_03_02", pInv);
9872                                         sendSystemMessageTestingOnly(player, "Light Apprentice Robe Issued!");
9873                                 }
9874                                 break;
9875                         case 4:
9876                                 {
9877                                         static_item.createNewItemFunction("item_jedi_robe_dark_03_02", pInv);
9878                                         sendSystemMessageTestingOnly(player, "Dark Apprentice Robe Issued!");
9879                                 }
9880                                 break;
9881                         case 5:
9882                                 {
9883                                         static_item.createNewItemFunction("item_jedi_robe_light_03_03", pInv);
9884                                         sendSystemMessageTestingOnly(player, "Light Jedi Knight Robe Issued!");
9885                                 }
9886                                 break;
9887                         case 6:
9888                                 {
9889                                         static_item.createNewItemFunction("item_jedi_robe_dark_03_03", pInv);
9890                                         sendSystemMessageTestingOnly(player, "Dark Jedi Knight Robe Issued!");
9891                                 }
9892                                 break;
9893                         case 7:
9894                                 {
9895                                         static_item.createNewItemFunction("item_jedi_robe_06_01", pInv);
9896                                         sendSystemMessageTestingOnly(player, "Jedi Master Cloak Issued!");
9897                                 }
9898                                 break;
9899                         case 8:
9900                                 {
9901                                         static_item.createNewItemFunction("item_jedi_robe_light_04_04", pInv);
9902                                         sendSystemMessageTestingOnly(player, "Elder Jedi Arbiter Robe Issued!");
9903                                 }
9904                                 break;
9905                                 case 9:
9906                                 {
9907                                         static_item.createNewItemFunction("item_jedi_robe_dark_04_04", pInv);
9908                                         sendSystemMessageTestingOnly(player, "Elder Jedi Oppressor Robe Issued!");
9909                                 }
9910                                 break;
9911                                 case 10:
9912                                 {
9913                                         static_item.createNewItemFunction("item_jedi_robe_06_02", pInv);
9914                                         sendSystemMessageTestingOnly(player, "Jedi Master Cloak Issued!");
9915                                 }
9916                                 break;
9917                         case 11:
9918                                 {
9919                                         if ( hasCompletedCollectionSlot(player, "jedi_robe_01_07") )
9920                                         {
9921                                                 modifyCollectionSlotValue(player, "jedi_robe_01_07", -1);
9922                                         }
9923                                         if ( hasCompletedCollectionSlot(player, "jedi_robe_01_08") )
9924                                         {
9925                                                 modifyCollectionSlotValue(player, "jedi_robe_01_08", -1);
9926                                         }
9927                                         sendSystemMessageTestingOnly(player, "Statue slots in Master Jedi Cloak collection reset!");
9928                                 }
9929                         default:
9930                                 cleanScriptVars(player);
9931                                 return SCRIPT_CONTINUE;
9933                 }
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()) )
9943         {
9944                 //cleanScriptVars(player);
9945                 return SCRIPT_CONTINUE;
9946         }
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 )
9955         {
9956                 handleJediOption(player);
9957                 return SCRIPT_CONTINUE;
9958         }
9960         if(btn == sui.BP_CANCEL)
9961         {
9962                 cleanScriptVars(player);
9963                 closeOldWindow(player);
9964                 return SCRIPT_CONTINUE;
9965         }
9967         if ( idx == -1 || idx > JEDI_PLAYTEST_OPTIONS.length)
9968         {
9969                 cleanScriptVars(player);
9970                 return SCRIPT_CONTINUE;
9971         }
9972         //make sure player is Valid
9973         if(!isIdValid(player))
9974         {
9975                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9976                 cleanScriptVars(player);
9977                 return SCRIPT_OVERRIDE;
9978         }
9979         //make sure player's inventory is valid
9980         if (!isIdValid(pInv))
9981         {
9982                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
9983                 cleanScriptVars(player);
9984                 return SCRIPT_OVERRIDE;
9985         }
9986         //make sure there is room in player's inventory
9987         if (getVolumeFree(pInv) <= 4)
9988         {
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;
9992         }
9994                 switch(idx)
9995                 {
9996                         //level 26
9997                         case 0:
9998                                 {
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!");
10026                                 }
10027                                 break;
10028                         //level 75
10029                         case 1:
10030                                 {
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++)
10041                                         {
10042                                                 static_item.createNewItemFunction("item_krayt_pearl_04_20", pInv);
10043                                         }
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!");
10059                                 }
10060                                 break;
10061                         default:
10062                                 cleanScriptVars(player);
10063                                 return SCRIPT_CONTINUE;
10065                 }
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)
10074         string[] saber;
10075         if (generation <1 || generation >5)
10076         {
10077            saber = new string[1];
10078            saber[0] = "object/weapon/melee/sword/crafted_saber/sword_lightsaber_training.iff";
10079         }
10080         else
10081         {
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";
10086         }
10087         if (saber.length != weaponMinDamage.length || saber.length != weaponMaxDamage.length || saber.length != weaponAttackSpeed.length)
10088         {
10089                 return;
10090         }
10092         for (int i = 0; i < saber.length; i++)
10093          {
10094                 obj_id saberObj = createObject(saber[i], pInv, "");
10095                 if (!isIdValid (saberObj))
10096                 {
10097                         continue;
10098                 }
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);
10125         }
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)
10141         {
10142                 int startIndex = 0;
10143                 location playerLoc = getLocation(player);
10144                 if (isIdValid(playerLoc.cell))
10145                 {
10146                         obj_id group = getGroupObject(player);
10147                         if (isIdValid(group))
10148                         {
10149                                 obj_id[] groupMembers = getGroupMemberIds(group);
10150                                 for (int i = 0; i < groupMembers.length; ++i)
10151                                 {
10152                                         if (groupMembers[i] != player
10153                                                 && exists(groupMembers[i])
10154                                                 && getLocation(groupMembers[i]).cell == playerLoc.cell
10155                                                 && groupMemberApproved(membersApprovedByShipOwner, groupMembers[i]))
10156                                         {
10158                                                 startIndex = getNextStartIndex(shipStartLocations, startIndex);
10159                                                 if (startIndex <= shipStartLocations.length)
10160                                                 {
10161                                                         groupMembersToWarp = utils.addElement(groupMembersToWarp, groupMembers[i]);
10162                                                         groupMemberStartIndex = utils.addElement(groupMemberStartIndex, startIndex);
10163                                                 }
10165                                                 else
10166                                                 {
10167                                                         string_id strSpam = new string_id("space/space_interaction", "no_space_expansion");
10168                                                         sendSystemMessage(groupMembers[i], strSpam);
10169                                                 }
10170                                         }
10171                                 }
10172                         }
10173                 }
10174         }
10176         for (int i = 0; i < groupMembersToWarp.length; ++i)
10177         {
10178                 space_transition.setLaunchInfo(groupMembersToWarp[i], ship, groupMemberStartIndex[i], groundLoc);
10179                 warpPlayer(
10180                         groupMembersToWarp[i],
10181                         warpLocation.area,
10182                         warpLocation.x, warpLocation.y, warpLocation.z,
10183                         null,
10184                         warpLocation.x, warpLocation.y, warpLocation.z);
10185         }
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)
10198         {
10199                 for (startIndex = 1; startIndex <= shipStartLocations.length; ++startIndex)
10200                         if (shipStartLocations[startIndex-1].cell != null)
10201                                 break;
10202         }
10204         return startIndex;
10207 boolean groupMemberApproved(obj_id[] membersApprovedByShipOwner, obj_id memberToTest)
10209         for (int i = 0; i < membersApprovedByShipOwner.length; ++i)
10210         {
10211                 if (membersApprovedByShipOwner[i] == memberToTest)
10212                 {
10213                         return true;
10214                 }
10215         }
10216         return false;
10219 //--- CYBERNETICS ------------
10220 void handleCyberneticsOption( obj_id player )
10222         obj_id inv = utils.getInventoryContainer(player);
10223         if ( !isIdValid( inv ) )
10224                 return;
10226         for ( int i = 0; i < CYBERNETIC_ITEMS.length; ++i )
10227         {
10228                 createObject(CYBERNETIC_ITEMS[i], inv, "");
10229         }
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))
10248         {
10249                 cleanScriptVars(player);
10250                 return;
10251         }
10253         if (draw == false)
10254         {
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);
10260         }
10261         else
10262         {
10263                 int pid = sui.listbox(self, player, prompt, sui.OK_CANCEL, title, options, myHandler, true, false);
10264                 sui.showSUIPage(pid);
10265                 setWindowPid(player, pid);
10266         }
10270 boolean outOfRange(obj_id self, obj_id player, boolean message)
10272         //gods override range checks
10273         if(isGod(player))
10274                 return false;
10276         location a = getLocation(self);
10277         location b = getLocation(player);
10278         if (a.cell == b.cell && a.distance(b) < 8.0f)
10279                 return false;
10281         if (message)
10282                 sendSystemMessageTestingOnly(player, "Out of Range of Character Builder Terminal.");
10284         return true;
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()) )
10298         {
10299                 //cleanScriptVars(player);
10300                 return SCRIPT_CONTINUE;
10301         }
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 )
10311         {
10312                 refreshMenu (player, "Select the desired character option", "Character Builder Terminal", CHARACTER_BUILDER_OPTIONS, "handleOptionSelect", true);
10313                 return SCRIPT_CONTINUE;
10314         }
10316         if(btn == sui.BP_CANCEL)
10317         {
10318                 cleanScriptVars(player);
10319                 closeOldWindow(player);
10320                 return SCRIPT_CONTINUE;
10321         }
10323         if ( idx == -1 || idx > PUBLISH_OPTIONS.length)
10324         {
10325                 cleanScriptVars(player);
10326                 closeOldWindow(player);
10327                 return SCRIPT_CONTINUE;
10328         }
10329         //make sure player is Valid
10330         if(!isIdValid(player))
10331         {
10332                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10333                 cleanScriptVars(player);
10334                 return SCRIPT_OVERRIDE;
10335         }
10336         //make sure player's inventory is valid
10337         if (!isIdValid(pInv))
10338         {
10339                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10340                 cleanScriptVars(player);
10341                 return SCRIPT_OVERRIDE;
10342         }
10343         //make sure there is room in player's inventory
10344         if (getVolumeFree(pInv) <= 12)
10345         {
10346                 sendSystemMessageTestingOnly(player, "Your Inventory has less than 12 slots, please make room and try again.");
10347                 cleanScriptVars(player);
10348                 return SCRIPT_OVERRIDE;
10349         }
10352                 switch(idx)
10353                 {
10355                 case 0:
10356                         {
10357                                 for(int i = 0; i < PUB27_HEAVYPACK.length; i++)
10358                                 {
10359                                         if(PUB27_HEAVYPACK[i].startsWith("object"))
10360                                         {
10361                                                 weapons.createWeapon(PUB27_HEAVYPACK[i], pInv, weapons.VIA_TEMPLATE, WEAPON_SPEED, WEAPON_DAMAGE, WEAPON_EFFECIENCY, WEAPON_ELEMENTAL);
10362                                         }
10363                                         else
10364                                         {
10365                                                 static_item.createNewItemFunction(PUB27_HEAVYPACK[i], pInv);
10366                                         }
10367                                 }
10368                                 //set level88 here
10369                                 string template = getSkillTemplate(player);
10370                                 if (!template.startsWith("trader") && !template.startsWith("entertainer"))
10371                                 {
10372                                         if (!isGod(player))
10373                                                 respec.autoLevelPlayer(player, 88, false);
10374                                 }
10375                         }
10377                         sendSystemMessageTestingOnly(player, "Heavy Weapons Pack Issued!");
10378                         break;
10379                 case 1:
10380                         {
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++)
10391                                 {
10392                                         static_item.createNewItemFunction("item_krayt_pearl_04_16", pInv);
10393                                 }
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!");
10409                         }
10410                         break;
10411                 case 2:
10412                         {
10413                                 for(int i = 0; i < PUB27_TRAPS.length; i++)
10414                                 {
10415                                         stealth.createRangerLoot(100, PUB27_TRAPS[i], pInv, 100);
10416                                 }
10418                                 sendSystemMessageTestingOnly(player, "Traps Issued!");
10420                         }
10421                         break;
10422                 case 3:
10423                         {
10424                                 setObjVar(player, "mand.acknowledge", true);
10425                                 sendSystemMessageTestingOnly(player, "Death Watch Bunker Access Granted!");
10426                         }
10427                         break;
10428                 case 4:
10429                         for(int i = 0; i < PUB27_CAMOSTUFF.length; i++)
10430                         {
10431                                 static_item.createNewItemFunction(PUB27_CAMOSTUFF[i],pInv);
10432                         }
10433                         sendSystemMessageTestingOnly(player, "Spy Gear Issued!");
10434                         break;
10435                 default:
10436                         cleanScriptVars(player);
10437                         return SCRIPT_CONTINUE;
10439         }
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 )
10449         {
10450                 for ( int i = 0; i < instanceFlags.length; i++ )
10451                 {
10452                         string flag = instanceFlags[i];
10453                         if ( flag != null && flag.length() > 0 )
10454                         {
10455                                 instance.flagPlayerForInstance(player, flag);
10456                         }
10457                 }
10459                 sendSystemMessageTestingOnly(player, "All Heroic Instances Flagged");
10460         }
10461         else
10462         {
10463                 sendSystemMessageTestingOnly(player, "No Instance Flags Found.");
10464         }
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)
10475         {
10476                 LOG("tweakSpaceShipComponent", "MAJOR MESSUP! " + objComponent + " is 9 kinds of messed up");
10477                 setName(objComponent, "BAD COMPONENT: " + getTemplateName(objComponent) + " : PLEASE REPORT BUG");
10478                 return null;
10479         }
10481         if(strComponentType != "")
10482         {
10483                 // initialize me
10484                 dictionary dctParams = dataTableGetRow("datatables/ship/components/character_builder/frog_" + strComponentType + ".iff", getTemplateName(objComponent));
10486                 if(dctParams == null)
10487                 {
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");
10489                         return null;
10490                 }
10492                 if(strComponentType == "armor")
10493                 {
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);
10508                 }
10509                 else if(strComponentType == "booster")
10510                 {
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);
10546                 }
10547                 else if(strComponentType == "cargo_hold")
10548                 {
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);
10557                 }
10558                 else if(strComponentType == "droid_interface")
10559                 {
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);
10582                 }
10583                 else if(strComponentType == "engine")
10584                 {
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);
10616                 }
10617                 else if(strComponentType == "reactor")
10618                 {
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);
10638                 }
10639                 else if(strComponentType == "shield")
10640                 {
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);
10670                 }
10671                 else if(strComponentType == "weapon")
10672                 {
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);
10708                 }
10709                 else if(strComponentType == "capacitor")
10710                 {
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);
10736                 }
10737                 return objComponent;
10738         }
10739         else
10740         {
10741                 LOG("tweakSpaceShipComponent", "MAJOR MESSUP! " + objComponent + " could not be modified as it was not valid");
10742                 return null;
10743         }
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))
10754                 return false;
10756         LOG("issueShipChassis", "idx = " + idx);
10758         if (idx < 0)
10759                 return false;
10761         LOG("issueShipChassis", "issueShipChassis function");
10763         //get ship type
10764         string type = dataTableGetString(SHIP_CHASSIS_TBL, idx, "shipType");
10765         //get the skill needed
10766         string skill = dataTableGetString(SHIP_CHASSIS_TBL, type, "skill");
10767         //get Mass
10768         float mass = dataTableGetFloat(SHIP_CHASSIS_TBL, idx, "fltMass");
10769         //get HP
10770         float hp = dataTableGetFloat(SHIP_CHASSIS_TBL, idx, "fltHitPoints");
10772         LOG("issueShipChassis", "SKILL: " + skill);
10774         if (type.equals("firespray") || type.equals("yt2400"))
10775         {
10776                 if (hasSkill(player, "pilot_rebel_navy_master") || !hasSkill(player, "pilot_imperial_navy_master") || !hasSkill(player, "pilot_neutral_master"))
10777                 {
10778                         giveShipChassis(player, type, mass, hp);
10779                         return true;
10780                 }
10781                 sendSystemMessageTestingOnly(player, "You cannot use the Firespray due to certification requirements. Skill Required is: " + skill);
10782                 return false;
10783         }
10785         if (!hasSkill(player, skill))
10786         {
10787                 sendSystemMessageTestingOnly(player, "You cannot use this ship due to certification requirements. Skill Required is: " + skill);
10788                 return false;
10789         }
10791         giveShipChassis(player, type, mass, hp);
10792         return true;
10795 boolean giveShipChassis(obj_id player, string type, float mass, float hp)
10797         if (!isIdValid(player))
10798                 return false;
10800         if (type == null || type.equals(""))
10801                 return false;
10803         if (mass < 0 || hp < 0)
10804                 return false;
10806         obj_id pInv = utils.getInventoryContainer(player);
10808         obj_id pcd = space_crafting.createDeedFromBlueprints(player, type, pInv, mass, hp);
10809         if (!isIdValid(pcd))
10810         {
10811                 //UH OH!
10812                 sendSystemMessageTestingOnly(player, "The ship was not created due to error.");
10813                 LOG("issueShipChassis", "CHASSIS" + type + " IS BAD");
10815                 return false;
10816         }
10818         sendSystemMessageTestingOnly(player, "Chassis Issued.");
10819         return true;
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())
10830         {
10831                 //cleanScriptVars(player);
10832                 return SCRIPT_CONTINUE;
10833         }
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)
10841         {
10842                 startCharacterBuilder(player);
10843                 return SCRIPT_CONTINUE;
10844         }
10846         if(btn == sui.BP_CANCEL)
10847         {
10848                 cleanScriptVars(player);
10849                 closeOldWindow(player);
10850                 return SCRIPT_CONTINUE;
10851         }
10853         if(idx == -1 || idx > CRAFTING_SKILL_TEMPLATES.length)
10854         {
10855                 cleanScriptVars(player);
10856                 return SCRIPT_CONTINUE;
10857         }
10859         //make sure player is Valid
10860         if(!isIdValid(player) || !isGod(player))
10861         {
10862                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10863                 cleanScriptVars(player);
10864                 return SCRIPT_OVERRIDE;
10865         }
10867         // Get skills
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)
10878         // Sort schematics
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"))
10886         {
10887                 utils.setScriptVar(player, "character_builder.qualityPercentage", 100.0f);
10888         }
10889         else
10890         {
10891                 craftPercentage = utils.getFloatScriptVar(player, "character_builder.qualityPercentage");
10892         }
10894         if(utils.hasScriptVar(player, "character_builder.qualityPercentagePID"))
10895         {
10896                 int oldpid = utils.getIntScriptVar(player, "character_builder.qualityPercentagePID");
10897                 sui.closeSUI(player, oldpid);
10898         }
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)
10916         {
10917                 return SCRIPT_CONTINUE;
10918         }
10920         //make sure player is Valid
10921         if(!isIdValid(player) || !isGod(player))
10922         {
10923                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10924                 return SCRIPT_OVERRIDE;
10925         }
10927         float floatPercentage = utils.stringToFloat(stringPercentage);
10929         if(floatPercentage > 100.0f || floatPercentage < 0.0f)
10930         {
10931                 sendSystemMessageTestingOnly(player, "Bad Crafting Percentage.");
10932                 return SCRIPT_OVERRIDE;
10933         }
10935         utils.setScriptVar(player, "character_builder.qualityPercentage", floatPercentage);
10937         return SCRIPT_CONTINUE;
10940 messageHandler handleSchematicSelect()
10942         if(params == null || params.isEmpty())
10943         {
10944                 //cleanScriptVars(player);
10945                 return SCRIPT_CONTINUE;
10946         }
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)
10954         {
10955                 handleDraftSchematicsOption(player);
10956                 return SCRIPT_CONTINUE;
10957         }
10959         if(btn == sui.BP_CANCEL)
10960         {
10961                 cleanScriptVars(player);
10962                 closeOldWindow(player);
10963                 return SCRIPT_CONTINUE;
10964         }
10966         //make sure player is Valid
10967         if(!isIdValid(player) || !isGod(player))
10968         {
10969                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10970                 cleanScriptVars(player);
10971                 return SCRIPT_OVERRIDE;
10972         }
10974         string[] schematics = utils.getStringArrayScriptVar(player, "character_builder.schematicsList");
10976         if(schematics == null || schematics.length <= 0)
10977         {
10978                 sendSystemMessageTestingOnly(player, "The system is unable to complete the transaction.");
10979                 cleanScriptVars(player);
10980                 return SCRIPT_OVERRIDE;
10981         }
10983         float craftPercentage = 100.0f;
10985         if(utils.hasScriptVar(player, "character_builder.qualityPercentage"))
10986         {
10987                 craftPercentage = utils.getFloatScriptVar(player, "character_builder.qualityPercentage");
10988         }
10990         obj_id container = utils.getInventoryContainer(player);
10992         obj_id craftedItem = makeCraftedItem(schematics[idx], craftPercentage, container);
10994         if(isIdValid(craftedItem))
10995         {
10996                 sendSystemMessageTestingOnly(player, "Making: " + getName(craftedItem));
10997         }
10998         else
10999         {
11000                 sendSystemMessageTestingOnly(player, "Failed to make: " + schematics[idx]);
11001         }
11003         if(utils.hasScriptVar(player, "character_builder.qualityPercentagePID"))
11004         {
11005                 int oldpid = utils.getIntScriptVar(player, "character_builder.qualityPercentagePID");
11006                 sui.closeSUI(player, oldpid);
11007         }
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))
11033         {
11034                 setSocketsUp(weaponObject);
11035                 sendSystemMessageTestingOnly(player, "Weapon Issued!");
11036         }