diff --git a/nge.backup b/nge.backup index c8d2eac6..164ef16a 100644 --- a/nge.backup +++ b/nge.backup @@ -62,7 +62,8 @@ CREATE TABLE accounts ( id integer NOT NULL, "user" character varying(16) NOT NULL, pass character varying(34) NOT NULL, - email character varying(32) NOT NULL + email character varying(32) NOT NULL, + gmflag boolean ); diff --git a/ngengine_public.jar b/ngengine_public.jar index 2645cc4e..5ebf1391 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 23e6dc42..b5090996 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -34,7 +34,15 @@ def run(core, actor, target, commandString): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) - + + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) + for object in replacedObjects: + actor.removeObjectFromAppearanceEquipList(object) + + if oldContainer == actor.getSlottedObject('appearance_inventory'): + actor.removeObjectFromAppearanceEquipList(target) + if actor == oldContainer: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index e5c8b47e..7a3f5199 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -36,7 +36,14 @@ def run(core, actor, target, commandString): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) - + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) + for object in replacedObjects: + actor.removeObjectFromAppearanceEquipList(object) + + if oldContainer == actor.getSlottedObject('appearance_inventory'): + actor.removeObjectFromAppearanceEquipList(target) + if actor == oldContainer: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' diff --git a/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py b/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py b/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py b/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/food_crate.py b/scripts/object/tangible/container/quest/crafting_contract/food_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/food_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py b/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py b/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py b/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py b/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py b/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/food/quest/drink_warrl_surprise.py b/scripts/object/tangible/food/quest/drink_warrl_surprise.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/food/quest/drink_warrl_surprise.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py b/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py b/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py b/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py b/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py b/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py b/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py b/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py b/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py b/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/anakin_helmet.py b/scripts/object/tangible/loot/quest/anakin_helmet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/anakin_helmet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ardanium_ii.py b/scripts/object/tangible/loot/quest/ardanium_ii.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ardanium_ii.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/bantha_doll.py b/scripts/object/tangible/loot/quest/bantha_doll.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/bantha_doll.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/broken_bottle.py b/scripts/object/tangible/loot/quest/broken_bottle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/broken_bottle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/carved_stone.py b/scripts/object/tangible/loot/quest/carved_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/carved_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py b/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/crude_stone.py b/scripts/object/tangible/loot/quest/crude_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/crude_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_foot.py b/scripts/object/tangible/loot/quest/decomposed_foot.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_foot.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_hand.py b/scripts/object/tangible/loot/quest/decomposed_hand.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_hand.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_skull.py b/scripts/object/tangible/loot/quest/decomposed_skull.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_skull.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/droid_brain_anakin.py b/scripts/object/tangible/loot/quest/droid_brain_anakin.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/droid_brain_anakin.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py b/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/endrine.py b/scripts/object/tangible/loot/quest/endrine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/endrine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py b/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3_forest_cure.py b/scripts/object/tangible/loot/quest/ep3_forest_cure.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3_forest_cure.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3_healing_resin.py b/scripts/object/tangible/loot/quest/ep3_healing_resin.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3_healing_resin.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py b/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py b/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py b/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py b/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py b/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py b/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py b/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py b/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py b/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lifeday_orb.py b/scripts/object/tangible/loot/quest/lifeday_orb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lifeday_orb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_1.py b/scripts/object/tangible/loot/quest/lost_squadron_core_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_2.py b/scripts/object/tangible/loot/quest/lost_squadron_core_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_3.py b/scripts/object/tangible/loot/quest/lost_squadron_core_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_4.py b/scripts/object/tangible/loot/quest/lost_squadron_core_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_5.py b/scripts/object/tangible/loot/quest/lost_squadron_core_5.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_5.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_6.py b/scripts/object/tangible/loot/quest/lost_squadron_core_6.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_6.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_blood.py b/scripts/object/tangible/loot/quest/mind_pod_blood.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_blood.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_brain.py b/scripts/object/tangible/loot/quest/mind_pod_brain.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_brain.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_eye.py b/scripts/object/tangible/loot/quest/mind_pod_eye.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_eye.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_guts.py b/scripts/object/tangible/loot/quest/mind_pod_guts.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_guts.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_parasites.py b/scripts/object/tangible/loot/quest/mind_pod_parasites.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_parasites.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_sac.py b/scripts/object/tangible/loot/quest/mind_pod_sac.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_sac.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_slime.py b/scripts/object/tangible/loot/quest/mind_pod_slime.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_slime.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_stomach.py b/scripts/object/tangible/loot/quest/mind_pod_stomach.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_stomach.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py b/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/naktra_crystal.py b/scripts/object/tangible/loot/quest/naktra_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/naktra_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py b/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/npe_journal.py b/scripts/object/tangible/loot/quest/npe_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/npe_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py b/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_filtered_gas.py b/scripts/object/tangible/loot/quest/nym_filtered_gas.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_filtered_gas.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_hard_drive.py b/scripts/object/tangible/loot/quest/nym_hard_drive.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_hard_drive.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_imggc.py b/scripts/object/tangible/loot/quest/nym_imggc.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_imggc.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ostrine.py b/scripts/object/tangible/loot/quest/ostrine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ostrine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/poi_tree_spawner.py b/scripts/object/tangible/loot/quest/poi_tree_spawner.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/poi_tree_spawner.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py b/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py b/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py b/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_spice_jar.py b/scripts/object/tangible/loot/quest/quest_item_spice_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_spice_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py b/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_satchel_charge.py b/scripts/object/tangible/loot/quest/quest_satchel_charge.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_satchel_charge.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py b/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/rifle_quest_tusken.py b/scripts/object/tangible/loot/quest/rifle_quest_tusken.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/rifle_quest_tusken.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/rudic.py b/scripts/object/tangible/loot/quest/rudic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/rudic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/runestone.py b/scripts/object/tangible/loot/quest/runestone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/runestone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py b/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py b/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py b/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py b/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py b/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py b/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py b/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py b/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py b/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py b/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_campaign_disk.py b/scripts/object/tangible/loot/quest/sean_campaign_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_campaign_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_history_disk.py b/scripts/object/tangible/loot/quest/sean_history_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_history_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_alog.py b/scripts/object/tangible/loot/quest/sean_questn_alog.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_alog.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_gpapers.py b/scripts/object/tangible/loot/quest/sean_questn_gpapers.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_gpapers.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_tdisk.py b/scripts/object/tangible/loot/quest/sean_questn_tdisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_tdisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py b/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_htestimony.py b/scripts/object/tangible/loot/quest/sean_questp_htestimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_htestimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_mdisk.py b/scripts/object/tangible/loot/quest/sean_questp_mdisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_mdisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py b/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py b/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/smooth_stone.py b/scripts/object/tangible/loot/quest/smooth_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/smooth_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/treasure_map_hedon.py b/scripts/object/tangible/loot/quest/treasure_map_hedon.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/treasure_map_hedon.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/tusken_head.py b/scripts/object/tangible/loot/quest/tusken_head.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/tusken_head.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/valarian_dagger.py b/scripts/object/tangible/loot/quest/valarian_dagger.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/valarian_dagger.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_campaign_disk.py b/scripts/object/tangible/loot/quest/victor_campaign_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_campaign_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_dseal.py b/scripts/object/tangible/loot/quest/victor_questn_dseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_dseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_hlist.py b/scripts/object/tangible/loot/quest/victor_questn_hlist.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_hlist.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_journal.py b/scripts/object/tangible/loot/quest/victor_questn_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_jregistry.py b/scripts/object/tangible/loot/quest/victor_questp_jregistry.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_jregistry.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_receipt.py b/scripts/object/tangible/loot/quest/victor_questp_receipt.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_receipt.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_testimony.py b/scripts/object/tangible/loot/quest/victor_questp_testimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_testimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/wind_crystal.py b/scripts/object/tangible/loot/quest/wind_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/wind_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/src/protocol/swg/LoginClusterStatus.java b/src/protocol/swg/LoginClusterStatus.java index 30028b44..725a8c8b 100644 --- a/src/protocol/swg/LoginClusterStatus.java +++ b/src/protocol/swg/LoginClusterStatus.java @@ -26,6 +26,8 @@ import java.util.TimeZone; import org.apache.mina.core.buffer.IoBuffer; +import engine.clients.Client; + public class LoginClusterStatus extends SWGMessage { private byte[] servers; @@ -46,7 +48,7 @@ public class LoginClusterStatus extends SWGMessage { result.flip(); return result; } - public void addServer(int galaxyID, String serverIP, int serverPort, int pingPort, int maxCharacters, int status, int recommended, int population) { + public void addServer(int galaxyID, String serverIP, int serverPort, int pingPort, int maxCharacters, int status, int recommended, int population, Client client) { IoBuffer result = IoBuffer.allocate(39 + serverIP.length()).order(ByteOrder.LITTLE_ENDIAN); int populationStatus = 0; @@ -64,6 +66,8 @@ public class LoginClusterStatus extends SWGMessage { populationStatus = 6; status = 3; } + if(status == 3 && client.isGM()) + status = 2; result.putInt(populationStatus); // 0 = very light, 1 = light, 2 = medium , 3 = heavy, 4 = very heavy, 5 = extremely heavy, 6 = full result.putInt(maxCharacters); //result.putInt(0xFFFF8F80); // Distance? diff --git a/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java b/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java index 1cbc0909..2cb16f10 100644 --- a/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java +++ b/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.common.Utilities; + public class ChangeRoleIconChoice extends ObjControllerObject { private long objectId = 0; @@ -37,10 +39,11 @@ public class ChangeRoleIconChoice extends ObjControllerObject { @Override public void deserialize(IoBuffer buffer) { - buffer.flip().order(ByteOrder.LITTLE_ENDIAN); + //System.out.println(Utilities.getHexString(buffer.array())); objectId = buffer.getLong(); buffer.skip(4); - icon = buffer.getInt(); + if(buffer.hasRemaining()) + icon = buffer.getInt(); } public long getObjectId() { diff --git a/src/resources/objects/building/BuildingMessageBuilder.java b/src/resources/objects/building/BuildingMessageBuilder.java index db031437..d044e0ac 100644 --- a/src/resources/objects/building/BuildingMessageBuilder.java +++ b/src/resources/objects/building/BuildingMessageBuilder.java @@ -43,14 +43,16 @@ public class BuildingMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); buffer.put(getAsciiString(building.getStfName())); buffer.putInt(0); - buffer.putInt(255); + buffer.putInt(0xFF); + //buffer.putInt(0x64); buffer.putInt(0); buffer.putInt(0); buffer.putShort((short) 0); buffer.putInt(0); buffer.putInt(0); - buffer.putInt(16777216); + // buffer.putInt(16777216); + buffer.putInt(0x100); buffer.putInt(0); buffer.putInt(0); buffer.putInt(0x201C); @@ -99,7 +101,29 @@ public class BuildingMessageBuilder extends ObjectMessageBuilder { } + public IoBuffer buildBaseline8() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("TANO", (byte) 8, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("TANO", (byte) 9, buffer, size); + + return buffer; + } + @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index b45d8be7..4db7320c 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -80,7 +80,9 @@ public class BuildingObject extends TangibleObject { destination.getSession().write(messageBuilder.buildBaseline3()); destination.getSession().write(messageBuilder.buildBaseline6()); - + destination.getSession().write(messageBuilder.buildBaseline8()); + destination.getSession().write(messageBuilder.buildBaseline9()); + } } diff --git a/src/resources/objects/cell/CellMessageBuilder.java b/src/resources/objects/cell/CellMessageBuilder.java index ba4b3d14..1884d4b0 100644 --- a/src/resources/objects/cell/CellMessageBuilder.java +++ b/src/resources/objects/cell/CellMessageBuilder.java @@ -64,7 +64,7 @@ public class CellMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(30, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) 4); - buffer.putInt(0x8D); + buffer.putInt(0x43); buffer.putInt(0); buffer.putInt(0); buffer.putInt(0); diff --git a/src/resources/objects/cell/CellObject.java b/src/resources/objects/cell/CellObject.java index 51d4aa3e..60aad61e 100644 --- a/src/resources/objects/cell/CellObject.java +++ b/src/resources/objects/cell/CellObject.java @@ -73,12 +73,11 @@ public class CellObject extends BaseObject { System.out.println("NULL session"); return; } - + destination.getSession().write(messageBuilder.buildBaseline3()); destination.getSession().write(messageBuilder.buildBaseline6()); destination.getSession().write(new UpdateCellPermissionMessage((byte) 1, getObjectID()).serialize()); - } diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 7e10d950..5582100e 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -212,7 +212,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x23); - buffer.putInt(0x4E); + buffer.putInt(0x43); buffer.putInt(0); // defenders list unused in NGE buffer.putInt(0); @@ -289,10 +289,10 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { if(creature.getEquipmentList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(creature.getEquipmentListUpdateCounter()); } else { buffer.putInt(creature.getEquipmentList().size()); - buffer.putInt(0); + buffer.putInt(creature.getEquipmentListUpdateCounter()); for(SWGObject obj : creature.getEquipmentList().get()) { @@ -333,7 +333,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putShort((short) 0); //buffer.put(getAsciiString("appearance/gungan_m.sat")); - buffer.put((byte) 1); + buffer.put((byte) 1); // 0 = cloak if(creature.getBuffList().isEmpty()) { buffer.putInt(0); @@ -376,18 +376,20 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.put((byte) 0); + buffer.put((byte) 0); // crashes if 1 buffer.put(creature.getDifficulty()); - buffer.putInt(0xFFFFFFFF); - buffer.put((byte) 1); - buffer.putShort((short) 0); + buffer.putInt(0xFFFFFFFF); // -1 normal appearance, 0 hologram + buffer.put((byte) 1); // crashes if 0 + buffer.put((byte) 0); // no effect for 1? + buffer.put((byte) 0); // no effect for 1? + if(creature.getAppearanceEquipmentList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); } else { buffer.putInt(creature.getAppearanceEquipmentList().size()); - buffer.putInt(0); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); for(SWGObject obj : creature.getAppearanceEquipmentList().get()) { @@ -410,7 +412,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } } - buffer.putInt(0); + buffer.putInt(0); // unk list buffer.putInt(0); int size = buffer.position(); @@ -1054,6 +1056,107 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } + public IoBuffer buildAddEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(496, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getEquipmentListUpdateCounter()); + buffer.put((byte) 1); + buffer.putShort((short) creature.getEquipmentList().indexOf(item)); + if(item.getCustomization() == null || item.getCustomization().length == 0) { + buffer.putShort((short) 0); + } else { + buffer.putShort((short) item.getCustomization().length); + buffer.put(item.getCustomization()); + } + buffer.putInt(item.getArrangementId()); + buffer.putLong(item.getObjectID()); + buffer.putInt(CRC.StringtoCRC(item.getTemplate())); + if(item instanceof WeaponObject) { + WeaponObject weapon = (WeaponObject) item; + buffer.put((byte) 1); + buffer.put(weapon.getMessageBuilder().buildBaseline3()); + buffer.put(weapon.getMessageBuilder().buildBaseline6()); + } else { + buffer.put((byte) 0); + } + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildRemoveEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getEquipmentListUpdateCounter()); + buffer.put((byte) 0); + buffer.putShort((short) creature.getEquipmentList().indexOf(item)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildAddAppearanceEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); + buffer.put((byte) 1); + buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); + if(item.getCustomization() == null || item.getCustomization().length == 0) { + buffer.putShort((short) 0); + } else { + buffer.putShort((short) item.getCustomization().length); + buffer.put(item.getCustomization()); + } + buffer.putInt(item.getArrangementId()); + buffer.putLong(item.getObjectID()); + buffer.putInt(CRC.StringtoCRC(item.getTemplate())); + buffer.put((byte) 0); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildRemoveAppearanceEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); + buffer.put((byte) 0); + buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); + + return buffer; + + } + @Override public void sendBaselines() { diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index ff1d67b9..9bb8186f 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -1037,17 +1037,36 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void addObjectToEquipList(SWGObject object) { - if(object instanceof TangibleObject || object instanceof WeaponObject) { - equipmentList.add(object); + if(object instanceof TangibleObject) { + equipmentList.get().add(object); + setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildAddEquipmentDelta((TangibleObject) object), true); } } public void removeObjectFromEquipList(SWGObject object) { - if(object instanceof TangibleObject || object instanceof WeaponObject) { - equipmentList.remove(object); + if(object instanceof TangibleObject) { + setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildRemoveEquipmentDelta((TangibleObject) object), true); + equipmentList.get().remove(object); + } + } + + public void addObjectToAppearanceEquipList(SWGObject object) { + if(object instanceof TangibleObject) { + appearanceEquipmentList.get().add(object); + setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildAddAppearanceEquipmentDelta((TangibleObject) object), true); + } + } + + public void removeObjectFromAppearanceEquipList(SWGObject object) { + if(object instanceof TangibleObject) { + setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildRemoveAppearanceEquipmentDelta((TangibleObject) object), true); + appearanceEquipmentList.get().remove(object); } } - @SuppressWarnings("unused") @Override @@ -1068,7 +1087,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { //destination.getSession().write(messageBuilder.buildBaseline9()); UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); - // destination.getSession().write(upm.serialize()); + destination.getSession().write(upm.serialize()); if(destination != getClient()) { UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID(), getPvPBitmask(), getFaction()); @@ -1559,5 +1578,29 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.flourishCount++; } } + + public int getEquipmentListUpdateCounter() { + synchronized(objectMutex) { + return equipmentListUpdateCounter; + } + } + + public void setEquipmentListUpdateCounter(int equipmentListUpdateCounter) { + synchronized(objectMutex) { + this.equipmentListUpdateCounter = equipmentListUpdateCounter; + } + } + + public int getAppearanceEquipmentListUpdateCounter() { + synchronized(objectMutex) { + return appearanceEquipmentListUpdateCounter; + } + } + + public void setAppearanceEquipmentListUpdateCounter(int appearanceEquipmentListUpdateCounter) { + synchronized(objectMutex) { + this.appearanceEquipmentListUpdateCounter = appearanceEquipmentListUpdateCounter; + } + } } diff --git a/src/resources/objects/group/GroupMessageBuilder.java b/src/resources/objects/group/GroupMessageBuilder.java index 3b98ca0c..a04b639a 100644 --- a/src/resources/objects/group/GroupMessageBuilder.java +++ b/src/resources/objects/group/GroupMessageBuilder.java @@ -83,7 +83,7 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { buffer.setAutoExpand(true); buffer.putShort((short) 0x0B); // Obj Operand Count - buffer.putInt(0x45); + buffer.putInt(0x43); buffer.put(getAsciiString("string_id_table")); diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index f064a19f..bce71b15 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -73,7 +73,7 @@ public class GuildObject extends UniverseObject implements IPersistent { private SWGList guildList = new SWGList(messageBuilder, 3, 4); // GILD 6 - private int serverId = 0x00000041; + private int serverId = 0x43; //private String STFName = "string_id_table"; private int unknown1 = 0; private short unknown2 = 0; diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index eec676ab..52ee9080 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -108,7 +108,7 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x11); - buffer.putInt((short) 0x8A); + buffer.putInt((short) 0x43); buffer.put(getAsciiString("string_id_table")); @@ -156,10 +156,10 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { if(player.getXpList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(player.getXpListUpdateCounter()); } else { buffer.putInt(player.getXpList().size()); - buffer.putInt(0); + buffer.putInt(player.getXpListUpdateCounter()); // no need for locking here, concurrent hash map iterator wont throw concurrency exceptions and multiple thread access at zone in is unlikely to occur for the PlayerObject for(Entry entry : player.getXpList().entrySet()) { diff --git a/src/resources/objects/staticobject/StaticMessageBuilder.java b/src/resources/objects/staticobject/StaticMessageBuilder.java index 41aaa4ba..e6c1e141 100644 --- a/src/resources/objects/staticobject/StaticMessageBuilder.java +++ b/src/resources/objects/staticobject/StaticMessageBuilder.java @@ -64,7 +64,7 @@ public class StaticMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 2); - buffer.putInt(0x92); + buffer.putInt(0x43); //buffer.putShort((short) 0); buffer.put(getAsciiString(object.getDetailFilename())); buffer.putInt(0); diff --git a/src/resources/objects/tangible/TangibleMessageBuilder.java b/src/resources/objects/tangible/TangibleMessageBuilder.java index 08d93f72..904a2574 100644 --- a/src/resources/objects/tangible/TangibleMessageBuilder.java +++ b/src/resources/objects/tangible/TangibleMessageBuilder.java @@ -84,7 +84,7 @@ public class TangibleMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 8); - buffer.putInt(0x64); + buffer.putInt(0x43); buffer.put(getAsciiString(tangible.getDetailFilename())); buffer.putInt(0); buffer.put(getAsciiString(tangible.getDetailName())); diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 51f7cca5..312b51c2 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -56,7 +56,7 @@ public class TangibleObject extends BaseObject { private List componentCustomizations = new ArrayList(); protected int optionsBitmask = 0; private int maxDamage = 1000; - private boolean staticObject = false; + private boolean staticObject = true; protected String faction = "neutral"; // Says you're "Imperial Special Forces" if it's 0 for some reason @NotPersistent private Vector defendersList = new Vector(); // unused in packets but useful for the server @@ -353,11 +353,13 @@ public class TangibleObject extends BaseObject { destination.getSession().write(messageBuilder.buildBaseline6()); destination.getSession().write(messageBuilder.buildBaseline8()); destination.getSession().write(messageBuilder.buildBaseline9()); - - UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral); - upvpm.setStatus(getPvPBitmask()); - destination.getSession().write(upvpm.serialize()); + + if(getPvPBitmask() != 0) { + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); + upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral); + upvpm.setStatus(getPvPBitmask()); + destination.getSession().write(upvpm.serialize()); + } } diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index 879ba116..8e2e5afc 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -87,7 +87,7 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 9); - buffer.putInt(0x4E); + buffer.putInt(0x43); buffer.put(getAsciiString(weapon.getDetailFilename())); buffer.putInt(0); buffer.put(getAsciiString(weapon.getDetailName())); diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 368ebb18..f893a030 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -24,6 +24,8 @@ package resources.objects.weapon; import java.util.ArrayList; import java.util.List; +import resources.objects.tangible.TangibleObject; + import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; @@ -34,17 +36,10 @@ import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Persistent(version=1) -public class WeaponObject extends SWGObject { +public class WeaponObject extends TangibleObject { // TODO: Thread safety - private int incapTimer = 10; - private int conditionDamage = 0; - - private byte[] customization; - private List componentCustomizations = new ArrayList(); - private int optionsBitmask = 0; - private boolean staticObject = true; @NotPersistent private WeaponMessageBuilder messageBuilder; @@ -52,7 +47,7 @@ public class WeaponObject extends SWGObject { private float maxRange; public WeaponObject(long objectID, Planet planet, String template) { - super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); + super(objectID, planet, template, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0)); messageBuilder = new WeaponMessageBuilder(this); if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); calculateRange(); @@ -60,7 +55,7 @@ public class WeaponObject extends SWGObject { } public WeaponObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { - super(objectID, planet, position, orientation, template); + super(objectID, planet, template, position, orientation); messageBuilder = new WeaponMessageBuilder(this); if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); calculateRange(); @@ -105,13 +100,6 @@ public class WeaponObject extends SWGObject { this.incapTimer = incapTimer; } - public int getConditionDamage() { - return conditionDamage; - } - - public void setConditionDamage(int conditionDamage) { - this.conditionDamage = conditionDamage; - } public byte[] getCustomization() { return customization; @@ -121,14 +109,6 @@ public class WeaponObject extends SWGObject { this.customization = customization; } - public List getComponentCustomizations() { - return componentCustomizations; - } - - public void setComponentCustomizations(List componentCustomizations) { - this.componentCustomizations = componentCustomizations; - } - public int getOptionsBitmask() { return optionsBitmask; } @@ -181,14 +161,6 @@ public class WeaponObject extends SWGObject { return (int) (((getMaxDamage() + getElementalDamage() + getMinDamage() + getElementalDamage()) / 2 + getElementalDamage()) * (1 / getAttackSpeed())); } - public boolean isStaticObject() { - return staticObject; - } - - public void setStaticObject(boolean staticObject) { - this.staticObject = staticObject; - } - public int getWeaponType() { int weaponType = -1; diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index bebc2665..9d265f47 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -260,6 +260,7 @@ public class CharacterService implements INetworkDispatch { if(clientCreateCharacter.getHairCustomization().length > 0) hair.setCustomization(clientCreateCharacter.getHairCustomization()); object._add(hair); + object.addObjectToEquipList(hair); } TangibleObject inventory = (TangibleObject) core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", object.getPlanet()); @@ -288,16 +289,20 @@ public class CharacterService implements INetworkDispatch { TangibleObject backpack = (TangibleObject) core.objectService.createObject("object/tangible/wearables/backpack/shared_backpack_galactic_marine.iff", object.getPlanet()); inventory._add(backpack); - //object.addObjectToEquipList(datapad); - //object.addObjectToEquipList(inventory); + object.addObjectToEquipList(datapad); + object.addObjectToEquipList(inventory); + object.addObjectToEquipList(bank); + object.addObjectToEquipList(missionBag); + object.addObjectToEquipList(appInventory); + WeaponObject weapon = (WeaponObject) core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_a280.iff", object.getPlanet()); WeaponObject defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", object.getPlanet()); - //object.addObjectToEquipList(defaultWeapon); + object.addObjectToEquipList(defaultWeapon); object._add(defaultWeapon); - //object.addObjectToEquipList(weapon); + object.addObjectToEquipList(weapon); object._add(weapon); object.setWeaponId(weapon.getObjectID()); @@ -323,7 +328,7 @@ public class CharacterService implements INetworkDispatch { CreateCharacterSuccess success = new CreateCharacterSuccess(object.getObjectID()); session.write(new HeartBeatMessage().serialize()); session.write(core.loginService.getLoginCluster().serialize()); - session.write(core.loginService.getLoginClusterStatus().serialize()); + session.write(core.loginService.getLoginClusterStatus(client).serialize()); session.write(success.serialize()); session.write((new ClientMfdStatusUpdateMessage((float) 2, "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); @@ -356,7 +361,7 @@ public class CharacterService implements INetworkDispatch { PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT \"accountId\" FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?"); ps2.setLong(1, accountId); - ps2.setString(2, firstName); + ps2.setString(2, firstName.toLowerCase()); ResultSet resultSet2 = ps2.executeQuery(); boolean isReserved = resultSet2.next(); resultSet2.getStatement().close(); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index a2f291ed..9acee192 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -94,6 +94,7 @@ public class ConnectionService implements INetworkDispatch { if (resultSet.next()) { client.setAccountId(resultSet.getLong("accountId")); client.setSessionKey(clientIdMsg.getSessionKey()); + client.setGM(core.loginService.checkForGmPermission((int) resultSet.getLong("accountId"))); AccountFeatureBits accountFeatureBits = new AccountFeatureBits(); ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(); session.write(new HeartBeatMessage().serialize()); diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index ddb56bdb..9055579b 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -73,6 +73,9 @@ public class EquipmentService implements INetworkDispatch { } + if(!actor.getEquipmentList().contains(item)) + actor.addObjectToEquipList(item); + } public void unequip(CreatureObject actor, SWGObject item) { @@ -94,6 +97,9 @@ public class EquipmentService implements INetworkDispatch { } } + + if(actor.getEquipmentList().contains(item)) + actor.removeObjectFromEquipList(item); } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index a4904be8..e02e5a6a 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -100,6 +100,7 @@ public class LoginService implements INetworkDispatch{ String user = clientID.getAccountName(); String pass = clientID.getPassword(); int id = LoginProvider.getAccountId(user, pass, session.getRemoteAddress().toString()); + System.out.println("LOGIN: " + user + " login attempt "+session.getRemoteAddress().toString()+" returned " + id); if (id < 0) { @@ -132,6 +133,7 @@ public class LoginService implements INetworkDispatch{ client.setAccountId(id); //client.setAccountEmail(email); client.setSession(session); + client.setGM(checkForGmPermission(id)); core.addClient((Integer)session.getAttribute("connectionId"), client); @@ -142,7 +144,7 @@ public class LoginService implements INetworkDispatch{ persistSession(client); LoginEnumCluster servers = getLoginCluster(); - LoginClusterStatus serverStatus = getLoginClusterStatus(); + LoginClusterStatus serverStatus = getLoginClusterStatus(client); EnumerateCharacterId characters = getEnumerateCharacterId(id); LoginClientToken clientToken = new LoginClientToken(client.getSessionKey(), id, user); @@ -204,6 +206,18 @@ public class LoginService implements INetworkDispatch{ } + public boolean checkForGmPermission(int id) { + PreparedStatement preparedStatement; + try { + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); + ResultSet resultSet = preparedStatement.executeQuery(); + return resultSet.getBoolean("gmflag"); + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + /** * Saves session data to DB so Zone Server can link sessions to accounts. * @param client Client that needs a session save. @@ -286,7 +300,7 @@ public class LoginService implements INetworkDispatch{ * Generates LoginClusterStatus packet. * @return LoginClusterStatus packet. */ - public LoginClusterStatus getLoginClusterStatus() { + public LoginClusterStatus getLoginClusterStatus(Client client) { LoginClusterStatus clusterStatus = new LoginClusterStatus(); ResultSet resultSet; try { @@ -301,7 +315,8 @@ public class LoginService implements INetworkDispatch{ 100, resultSet.getInt("statusId"), 1, - core.getActiveZoneClients()); + core.getActiveZoneClients(), + client); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index be19aee7..cc135480 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -46,6 +46,7 @@ import engine.clients.Client; import engine.resources.common.Event; import engine.resources.common.Mesh3DTriangle; import engine.resources.common.Ray; +import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -125,14 +126,14 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("sitserver"); core.commandService.registerCommand("kneel"); core.commandService.registerCommand("serverdestroyobject"); - core.commandService.registerCommand("giveitem"); - core.commandService.registerCommand("object"); + core.commandService.registerGmCommand("giveitem"); + core.commandService.registerGmCommand("object"); core.commandService.registerCommand("getattributesbatch"); core.commandService.registerCommand("pvp"); core.commandService.registerCommand("setcurrentskilltitle"); core.commandService.registerCommand("tip"); core.commandService.registerCommand("faction"); - core.commandService.registerCommand("setspeed"); + core.commandService.registerGmCommand("setspeed"); core.commandService.registerCommand("waypoint"); core.commandService.registerCommand("setwaypointactivestatus"); core.commandService.registerCommand("setwaypointname"); @@ -144,7 +145,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("boardshuttle"); core.commandService.registerCommand("getplayerid"); core.commandService.registerCommand("inspire"); - core.commandService.registerCommand("setgodmode"); + core.commandService.registerGmCommand("setgodmode"); core.commandService.registerCommand("requestwaypointatposition"); core.commandService.registerCommand("meditate"); @@ -188,8 +189,10 @@ public class SimulationService implements INetworkDispatch { Collection newAwareObjects = get(object.getPlanet(), x, y, 512); for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { SWGObject obj = it.next(); - if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance(pos) > 200) + if((obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(pos) > 200) || obj == object) continue; + //if(!obj.isInSnapshot()) + // System.out.println(obj.getTemplate()); if(object.getClient() != null) object.makeAware(obj); if(obj.getClient() != null) @@ -246,7 +249,8 @@ public class SimulationService implements INetworkDispatch { public boolean remove(SWGObject object, float x, float y, boolean notifyObservers) { boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object); - if(success) { + object.setIsInQuadtree(success); + if(success && notifyObservers) { HashSet oldObservers = new HashSet(object.getObservers()); for(Iterator it = oldObservers.iterator(); it.hasNext();) { Client observerClient = it.next(); @@ -543,6 +547,10 @@ public class SimulationService implements INetworkDispatch { return; CreatureObject object = (CreatureObject) client.getParent(); + object.setInviteCounter(0); + object.setInviteSenderId(0); + object.setInviteSenderName(""); + object.setClient(null); PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); if(object.getGroupId() != 0) @@ -590,8 +598,8 @@ public class SimulationService implements INetworkDispatch { object.createTransaction(core.getCreatureODB().getEnvironment()); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); object.getTransaction().commitSync(); - core.objectService.destroyObject(object); + core.getActiveConnectionsMap().remove((Integer) session.getAttribute("connectionId")); } @@ -612,8 +620,9 @@ public class SimulationService implements INetworkDispatch { Collection newAwareObjects = get(object.getPlanet(), pos.x, pos.z, 512); for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { SWGObject obj = it.next(); - if(obj.getAttachment("bigSpawnRange") == null & obj.getWorldPosition().getDistance(pos) > 200) + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance(pos) > 200) continue; + System.out.println(obj.getTemplate()); object.makeAware(obj); if(obj.getClient() != null) obj.makeAware(object); @@ -689,7 +698,6 @@ public class SimulationService implements INetworkDispatch { } - public void openContainer(SWGObject requester, SWGObject container) { if(container.getPermissions().canView(requester, container)) { diff --git a/src/services/command/BaseSWGCommand.java b/src/services/command/BaseSWGCommand.java index d89c4455..2d727994 100644 --- a/src/services/command/BaseSWGCommand.java +++ b/src/services/command/BaseSWGCommand.java @@ -30,6 +30,7 @@ public class BaseSWGCommand implements Cloneable { private String clientEffectTarget; private int maxRangeToTarget; private int commandCRC; + private boolean isGmCommand = false; public BaseSWGCommand(String commandName) { setCommandName(commandName); @@ -80,4 +81,12 @@ public class BaseSWGCommand implements Cloneable { return super.clone(); } + public boolean isGmCommand() { + return isGmCommand; + } + + public void setGmCommand(boolean isGmCommand) { + this.isGmCommand = isGmCommand; + } + } diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index d02d5521..99e6f3f9 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -95,6 +95,9 @@ public class CommandService implements INetworkDispatch { System.out.println("NULL Object"); return; } + + if(command.isGmCommand() && !client.isGM()) + return; CreatureObject actor = (CreatureObject) client.getParent(); @@ -131,6 +134,15 @@ public class CommandService implements INetworkDispatch { } + public BaseSWGCommand registerGmCommand(String name) { + + BaseSWGCommand command = new BaseSWGCommand(name.toLowerCase()); + command.setGmCommand(true); + commandLookup.add(command); + return command; + + } + public void registerAlias(String name, String target) { Vector commands = new Vector(commandLookup); // copy for thread safety BaseSWGCommand targetCommand = null; diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 4699a294..49fc1106 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -140,6 +140,10 @@ public class ObjectService implements INetworkDispatch { } public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation, String customServerTemplate) { + return createObject(Template, objectID, planet, position, orientation, customServerTemplate, false); + } + + public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation, String customServerTemplate, boolean overrideSnapshot) { SWGObject object = null; CrcStringTableVisitor crcTable; try { @@ -155,7 +159,7 @@ public class ObjectService implements INetworkDispatch { if(objectID == 0) objectID = generateObjectID(); else - isSnapshot = true; + isSnapshot = !overrideSnapshot; if(Template.startsWith("object/creature")) { @@ -173,10 +177,10 @@ public class ObjectService implements INetworkDispatch { object = new WeaponObject(objectID, planet, Template, position, orientation); - } else if(Template.startsWith("object/building") || Template.startsWith("object/static/worldbuilding/structures")){ + } else if(Template.startsWith("object/building") || Template.startsWith("object/static/worldbuilding/structures") || Template.startsWith("object/static/structure")){ object = new BuildingObject(objectID, planet, position, orientation, Template); - if(!isSnapshot && object.getPortalVisitor() != null) { + if(!isSnapshot && !overrideSnapshot && object.getPortalVisitor() != null) { int cellCount = object.getPortalVisitor().cells.size() - 1; // -1 for index 0 cell which is outside the building and used for ai pathfinding for (int i = 0; i < cellCount; i++) { CellObject cell = (CellObject) createObject("object/cell/shared_cell.iff", planet); @@ -497,7 +501,9 @@ public class ObjectService implements INetworkDispatch { } else { creature = (CreatureObject) getObject(objectId); - + if(creature.getClient() != null) + return; + } creature.setClient(client); @@ -535,31 +541,26 @@ public class ObjectService implements INetworkDispatch { } Point3D position = creature.getPosition(); - - - UnkByteFlag unkByteFlag = new UnkByteFlag(); - session.write(unkByteFlag.serialize()); - - ParametersMessage parameters = new ParametersMessage(); - session.write(parameters.serialize()); - - core.buffService.clearBuffs(creature); - - core.chatService.loadMailHeaders(client); HeartBeatMessage heartBeat = new HeartBeatMessage(); session.write(heartBeat.serialize()); + + UnkByteFlag unkByteFlag = new UnkByteFlag(); + session.write(unkByteFlag.serialize()); + + core.buffService.clearBuffs(creature); CmdStartScene startScene = new CmdStartScene((byte) 0, objectId, creature.getPlanet().getPath(), creature.getTemplate(), position.x, position.y, position.z, System.currentTimeMillis() / 1000, 0); session.write(startScene.serialize()); - creature.makeAware(core.guildService.getGuildObject()); - creature.makeAware(creature); - - core.simulationService.handleZoneIn(client); + ParametersMessage parameters = new ParametersMessage(); + session.write(parameters.serialize()); - CmdSceneReady sceneReady = new CmdSceneReady(); - client.getSession().write(sceneReady.serialize()); + creature.makeAware(core.guildService.getGuildObject()); + core.chatService.loadMailHeaders(client); + core.simulationService.handleZoneIn(client); + + creature.makeAware(creature); PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); @@ -731,7 +732,7 @@ public class ObjectService implements INetworkDispatch { qz = (Float) buildoutTable.getObject(i, 8); radius = (Float) buildoutTable.getObject(i, 9); portalCRC = (Integer) buildoutTable.getObject(i, 10); - + } else { objectId = (Integer) buildoutTable.getObject(i, 0); @@ -751,20 +752,32 @@ public class ObjectService implements INetworkDispatch { } + if(!template.equals("object/cell/shared_cell.iff") && objectId != 0 && getObject(objectId) != null) { + //System.out.println("Duplicate buildout object: " + template); + continue; + } + + List containers = new ArrayList(); SWGObject object; - if(objectId != 0 && containerId == 0) { - if(portalCRC != 0) - objectId = 0; - object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); + if(portalCRC != 0) { + containers.add(objectId); + object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true); + } else { + object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); + } if(object == null) continue; if(radius > 256) object.setAttachment("bigSpawnRange", new Boolean(true)); core.simulationService.add(object, object.getPosition().x, object.getPosition().z); - } else if(objectId != 0 && containerId != 0 && cellIndex != 0) { - object = createObject(template, objectId, planet, new Point3D(px, py, pz), new Quaternion(qw, qx, qy, qz)); - if(object instanceof CellObject) + } else if(containerId != 0) { + object = createObject(template, objectId, planet, new Point3D(px, py, pz), new Quaternion(qw, qx, qy, qz)); + if(containers.contains(containerId)) { + object.setisInSnapshot(false); + containers.add(objectId); + } + if(object instanceof CellObject && cellIndex != 0) ((CellObject) object).setCellNumber(cellIndex); SWGObject parent = getObject(containerId);