diff --git a/ngengine_public.jar b/ngengine_public.jar index 5ebf1391..80997511 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/odb/building/placeholder.txt b/odb/building/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/commands/lfg.py b/scripts/commands/lfg.py new file mode 100644 index 00000000..3477098f --- /dev/null +++ b/scripts/commands/lfg.py @@ -0,0 +1,11 @@ +from resources.common import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + print ('Command recieved!') + ghost.toggleFlag(PlayerFlags.LFG) + return \ No newline at end of file diff --git a/scripts/commands/newbiehelper.py b/scripts/commands/newbiehelper.py new file mode 100644 index 00000000..cce8079c --- /dev/null +++ b/scripts/commands/newbiehelper.py @@ -0,0 +1,10 @@ +from resources.common import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.HELPER) + return \ No newline at end of file diff --git a/scripts/commands/roleplay.py b/scripts/commands/roleplay.py new file mode 100644 index 00000000..a862303d --- /dev/null +++ b/scripts/commands/roleplay.py @@ -0,0 +1,11 @@ +from java.lang import Integer +from resources.common import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.ROLEPLAYER) + return \ No newline at end of file diff --git a/scripts/commands/server.py b/scripts/commands/server.py new file mode 100644 index 00000000..6ba1dc5b --- /dev/null +++ b/scripts/commands/server.py @@ -0,0 +1,35 @@ +import sys +from engine.resources.scene import Point3D + +def setup(): + return + +def run(core, actor, target, commandString): + + playerObject = actor.getSlottedObject('ghost') + + if not playerObject: + return + + commandArgs = commandString.split(' ') + command = commandArgs[0] + if len(commandArgs) > 1: + arg1 = commandArgs[1] + if len(commandArgs) > 2: + arg2 = commandArgs[2] + if len(commandArgs) > 3: + arg3 = commandArgs[3] + if len(commandArgs) > 4: + arg4 = commandArgs[4] + + if not command: + return + + if command == 'lockServer': + core.setGalaxyStatus(3) + if command == 'unlockServer': + core.setGalaxyStatus(2) + if command == 'info': + actor.sendSystemMessage(str(core.getActiveZoneClients()) + ' online characters.', 0) + + return diff --git a/scripts/commands/setcurrentskilltitle.py b/scripts/commands/setcurrentskilltitle.py index 45a49f14..43e9e5f4 100644 --- a/scripts/commands/setcurrentskilltitle.py +++ b/scripts/commands/setcurrentskilltitle.py @@ -6,8 +6,8 @@ def setup(): def run(core, actor, target, commandString): playerObject = actor.getSlottedObject('ghost') - print ("Title set to: " + commandString) - print ("List of Titles: " + playerObject.getTitleList().toString()) + #print ("Title set to: " + commandString) + #print ("List of Titles: " + playerObject.getTitleList().toString()) if playerObject is None: return diff --git a/scripts/commands/toggleawayfromkeyboard.py b/scripts/commands/toggleawayfromkeyboard.py new file mode 100644 index 00000000..18dece5b --- /dev/null +++ b/scripts/commands/toggleawayfromkeyboard.py @@ -0,0 +1,10 @@ +from resources.common import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.AFK) + return \ No newline at end of file diff --git a/scripts/demo.py b/scripts/demo.py index f3ba6ff0..92b340a8 100644 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -2,23 +2,23 @@ import sys def CreateStartingCharacter(core, object): - testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) - testObject.setCustomName('This is a Jython Rifle') - testObject.setStringAttribute('crafter', 'Light') - testObject.setDamageType('@obj_attr_n:armor_eff_energy') - testObject.setElementalType('@obj_attr_n:elemental_cold') - testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject.setMinDamage(425) - testObject.setMaxDamage(1150) - testObject.setElementalDamage(50) - testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) - testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) - object.addSkillMod('kinetic' , 0) - object.addSkillMod('energy' , 0) - object.addSkillMod('heat' , 0) - object.addSkillMod('cold' , 0) - object.addSkillMod('acid' , 0) - object.addSkillMod('electricity' , 0) +# testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) +# testObject.setCustomName('This is a Jython Rifle') +# testObject.setStringAttribute('crafter', 'Light') +# testObject.setDamageType('@obj_attr_n:armor_eff_energy') +# testObject.setElementalType('@obj_attr_n:elemental_cold') +# testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') +# testObject.setMinDamage(425) +# testObject.setMaxDamage(1150) +# testObject.setElementalDamage(50) +# testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) +# testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) +# object.addSkillMod('kinetic' , 0) +# object.addSkillMod('energy' , 0) +# object.addSkillMod('heat' , 0) +# object.addSkillMod('cold' , 0) +# object.addSkillMod('acid' , 0) +# object.addSkillMod('electricity' , 0) #object.addSkillMod('combat_strikethrough_value' , 50) #object.addSkillMod('display_only_dodge' , 2000) #object.addSkillMod('display_only_parry' , 1000) @@ -29,141 +29,141 @@ def CreateStartingCharacter(core, object): #object.addSkillMod('display_only_block' , 2000) #object.addSkillMod('combat_block_value' , 0) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(testObject) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(testObject) - testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet()) - testClothing.setCustomName('Test Cape') - testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet()) - testCloak.setCustomName('Test Cloak') +# testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet()) +# testClothing.setCustomName('Test Cape') +# testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet()) +# testCloak.setCustomName('Test Cloak') - inventory.add(testClothing) - inventory.add(testCloak) - profession = object.getSlottedObject('ghost').getProfession() - if profession == 'commando_1a': - object.addSkillMod('expertise_devastation_bonus' , 20) - testObject2 = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', object.getPlanet()) - testObject2.setCustomName('Test Heavy Weapon') - testObject2.setStringAttribute('crafter', 'Light') - testObject2.setDamageType('@obj_attr_n:armor_eff_kinetic') - testObject2.setElementalType('@obj_attr_n:elemental_heat') - testObject2.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject2.setMinDamage(550) - testObject2.setMaxDamage(1315) - testObject2.setElementalDamage(216) - testObject2.setIntAttribute('cat_wpn_damage.weapon_dps', testObject2.getDamagePerSecond()) - inventory.add(testObject2) +# inventory.add(testClothing) +# inventory.add(testCloak) +# profession = object.getSlottedObject('ghost').getProfession() +# if profession == 'commando_1a': +# object.addSkillMod('expertise_devastation_bonus' , 20) +# testObject2 = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', object.getPlanet()) +# testObject2.setCustomName('Test Heavy Weapon') +# testObject2.setStringAttribute('crafter', 'Light') +# testObject2.setDamageType('@obj_attr_n:armor_eff_kinetic') +# testObject2.setElementalType('@obj_attr_n:elemental_heat') +# testObject2.setStringAttribute('cat_wpn_damage.damage', '0-0') +# testObject2.setMinDamage(550) +# testObject2.setMaxDamage(1315) +# testObject2.setElementalDamage(216) +# testObject2.setIntAttribute('cat_wpn_damage.weapon_dps', testObject2.getDamagePerSecond()) +# inventory.add(testObject2) - addProfessionAbilities(core, object, profession) +# addProfessionAbilities(core, object, profession) - heroism1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s10.iff', object.getPlanet()) - heroism1.setStfFilename('static_item_n') - heroism1.setStfName('item_necklace_set_hero_01_01') - heroism1.setDetailFilename('static_item_d') - heroism1.setDetailName('item_necklace_set_hero_01_01') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism1.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s10.iff', object.getPlanet()) +# heroism1.setStfFilename('static_item_n') +# heroism1.setStfName('item_necklace_set_hero_01_01') +# heroism1.setDetailFilename('static_item_d') +# heroism1.setDetailName('item_necklace_set_hero_01_01') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism1) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism1) - heroism2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - heroism2.setStfFilename('static_item_n') - heroism2.setStfName('item_bracelet_r_set_hero_01_01') - heroism2.setDetailFilename('static_item_d') - heroism2.setDetailName('item_bracelet_r_set_hero_01_01') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism2.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) +# heroism2.setStfFilename('static_item_n') +# heroism2.setStfName('item_bracelet_r_set_hero_01_01') +# heroism2.setDetailFilename('static_item_d') +# heroism2.setDetailName('item_bracelet_r_set_hero_01_01') +# heroism2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism2.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism2) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism2) - heroism3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - heroism3.setStfFilename('static_item_n') - heroism3.setStfName('item_bracelet_l_set_hero_01_01') - heroism3.setDetailFilename('static_item_d') - heroism3.setDetailName('item_bracelet_l_set_hero_01_01') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism3.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) +# heroism3.setStfFilename('static_item_n') +# heroism3.setStfName('item_bracelet_l_set_hero_01_01') +# heroism3.setDetailFilename('static_item_d') +# heroism3.setDetailName('item_bracelet_l_set_hero_01_01') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism3.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism3) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism3) - heroism4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - heroism4.setStfFilename('static_item_n') - heroism4.setStfName('item_ring_set_hero_01_01') - heroism4.setDetailFilename('static_item_d') - heroism4.setDetailName('item_ring_set_hero_01_01') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism4.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) +# heroism4.setStfFilename('static_item_n') +# heroism4.setStfName('item_ring_set_hero_01_01') +# heroism4.setDetailFilename('static_item_d') +# heroism4.setDetailName('item_ring_set_hero_01_01') +# heroism4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism4.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism4) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism4) - heroism5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - heroism5.setStfFilename('static_item_n') - heroism5.setStfName('item_ring_a_set_hero') - heroism5.setDetailFilename('static_item_d') - heroism5.setDetailName('item_ring_a_set_hero') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism5.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) +# heroism5.setStfFilename('static_item_n') +# heroism5.setStfName('item_ring_a_set_hero') +# heroism5.setDetailFilename('static_item_d') +# heroism5.setDetailName('item_ring_a_set_hero') +# heroism5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism5.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism5) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism5) return def addProfessionAbilities(core, object, profession): - - if profession == 'force_sensitive_1a': - testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) - testObject.setCustomName('Lightsaber') - testObject.setStringAttribute('crafter', 'Light') - testObject.setDamageType('@obj_attr_n:armor_eff_energy') - testObject.setElementalType('@obj_attr_n:elemental_cold') - testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject.setMinDamage(600) - testObject.setMaxDamage(1190) - testObject.setElementalDamage(72) - testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) - inventory = object.getSlottedObject('inventory') - inventory.add(testObject) + +# if profession == 'force_sensitive_1a': +# testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) +# testObject.setCustomName('Lightsaber') +# testObject.setStringAttribute('crafter', 'Light') +# testObject.setDamageType('@obj_attr_n:armor_eff_energy') +# testObject.setElementalType('@obj_attr_n:elemental_cold') +# testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') +# testObject.setMinDamage(600) +# testObject.setMaxDamage(1190) +# testObject.setElementalDamage(72) +# testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) +# inventory = object.getSlottedObject('inventory') +# inventory.add(testObject) ##Case Sensitive # object.addAbility('fs_sweep_7') @@ -214,262 +214,261 @@ def addProfessionAbilities(core, object, profession): # object.addAbility('bh_intimidate_6') # object.addAbility('bh_flawless_strike') - direfate1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s03.iff', object.getPlanet()) - direfate1.setStfFilename('static_item_n') - direfate1.setStfName('item_necklace_set_bh_utility_b_01_01') - direfate1.setDetailFilename('static_item_d') - direfate1.setDetailName('item_necklace_set_bh_utility_b_01_01') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s03.iff', object.getPlanet()) + # direfate1.setStfFilename('static_item_n') + # direfate1.setStfName('item_necklace_set_bh_utility_b_01_01') + # direfate1.setDetailFilename('static_item_d') + # direfate1.setDetailName('item_necklace_set_bh_utility_b_01_01') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate1) - direfate2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff', object.getPlanet()) - direfate2.setStfFilename('static_item_n') - direfate2.setStfName('item_bracelet_r_set_bh_utility_b_01_01') - direfate2.setDetailFilename('static_item_d') - direfate2.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff', object.getPlanet()) + # direfate2.setStfFilename('static_item_n') + # direfate2.setStfName('item_bracelet_r_set_bh_utility_b_01_01') + # direfate2.setDetailFilename('static_item_d') + # direfate2.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') + # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate2) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate2) - direfate3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff', object.getPlanet()) - direfate3.setStfFilename('static_item_n') - direfate3.setStfName('item_bracelet_l_set_bh_utility_b_01_01') - direfate3.setDetailFilename('static_item_d') - direfate3.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff', object.getPlanet()) + # direfate3.setStfFilename('static_item_n') + # direfate3.setStfName('item_bracelet_l_set_bh_utility_b_01_01') + # direfate3.setDetailFilename('static_item_d') + # direfate3.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate3) - direfate4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - direfate4.setStfFilename('static_item_n') - direfate4.setStfName('item_ring_set_bh_utility_b_01_01') - direfate4.setDetailFilename('static_item_d') - direfate4.setDetailName('item_ring_set_bh_utility_b_01_01') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) + # direfate4.setStfFilename('static_item_n') + # direfate4.setStfName('item_ring_set_bh_utility_b_01_01') + # direfate4.setDetailFilename('static_item_d') + # direfate4.setDetailName('item_ring_set_bh_utility_b_01_01') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate4) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate4) - direfate5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - direfate5.setStfFilename('static_item_n') - direfate5.setStfName('item_ring_a_set_bh_utility_b') - direfate5.setDetailFilename('static_item_d') - direfate5.setDetailName('item_ring_a_set_bh_utility_b') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) + # direfate5.setStfFilename('static_item_n') + # direfate5.setStfName('item_ring_a_set_bh_utility_b') + # direfate5.setDetailFilename('static_item_d') + # direfate5.setDetailName('item_ring_a_set_bh_utility_b') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate5) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate5) - flawless1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - flawless1.setStfFilename('static_item_n') - flawless1.setStfName('item_necklace_set_bh_utility_a_01_01') - flawless1.setDetailFilename('static_item_d') - flawless1.setDetailName('item_necklace_set_bh_utility_a_01_01') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_a_1') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_2') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') - flawless1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) + # flawless1.setStfFilename('static_item_n') + # flawless1.setStfName('item_necklace_set_bh_utility_a_01_01') + # flawless1.setDetailFilename('static_item_d') + # flawless1.setDetailName('item_necklace_set_bh_utility_a_01_01') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_a_1') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_2') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + # flawless1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless1) - flawless2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - flawless2.setStfFilename('static_item_n') - flawless2.setStfName('item_bracelet_r_set_bh_utility_a_01_01') - flawless2.setDetailFilename('static_item_d') - flawless2.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) + # flawless2.setStfFilename('static_item_n') + # flawless2.setStfName('item_bracelet_r_set_bh_utility_a_01_01') + # flawless2.setDetailFilename('static_item_d') + # flawless2.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless2) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless2) - flawless3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - flawless3.setStfFilename('static_item_n') - flawless3.setStfName('item_bracelet_l_set_bh_utility_a_01_01') - flawless3.setDetailFilename('static_item_d') - flawless3.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) + # flawless3.setStfFilename('static_item_n') + # flawless3.setStfName('item_bracelet_l_set_bh_utility_a_01_01') + # flawless3.setDetailFilename('static_item_d') + # flawless3.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless3) - flawless4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - flawless4.setStfFilename('static_item_n') - flawless4.setStfName('item_ring_set_bh_utility_a_01_01') - flawless4.setDetailFilename('static_item_d') - flawless4.setDetailName('item_ring_set_bh_utility_a_01_01') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) + # flawless4.setStfFilename('static_item_n') + # flawless4.setStfName('item_ring_set_bh_utility_a_01_01') + # flawless4.setDetailFilename('static_item_d') + # flawless4.setDetailName('item_ring_set_bh_utility_a_01_01') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless4) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless4) - flawless5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - flawless5.setStfFilename('static_item_n') - flawless5.setStfName('item_ring_a_set_bh_utility_a') - flawless5.setDetailFilename('static_item_d') - flawless5.setDetailName('item_ring_a_set_bh_utility_a') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) + # flawless5.setStfFilename('static_item_n') + # flawless5.setStfName('item_ring_a_set_bh_utility_a') + # flawless5.setDetailFilename('static_item_d') + # flawless5.setDetailName('item_ring_a_set_bh_utility_a') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless5) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless5) - enforcer1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) - enforcer1.setStfFilename('static_item_n') - enforcer1.setStfName('item_necklace_set_bh_dps_01_01') - enforcer1.setDetailFilename('static_item_d') - enforcer1.setDetailName('item_necklace_set_bh_dps_01_01') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) + # enforcer1.setStfFilename('static_item_n') + # enforcer1.setStfName('item_necklace_set_bh_dps_01_01') + # enforcer1.setDetailFilename('static_item_d') + # enforcer1.setDetailName('item_necklace_set_bh_dps_01_01') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer1) - enforcer2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff', object.getPlanet()) - enforcer2.setStfFilename('static_item_n') - enforcer2.setStfName('item_bracelet_r_set_bh_dps_01_01') - enforcer2.setDetailFilename('static_item_d') - enforcer2.setDetailName('item_bracelet_r_set_dps_01_01') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff', object.getPlanet()) + # enforcer2.setStfFilename('static_item_n') + # enforcer2.setStfName('item_bracelet_r_set_bh_dps_01_01') + # enforcer2.setDetailFilename('static_item_d') + # enforcer2.setDetailName('item_bracelet_r_set_dps_01_01') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer2) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer2) - enforcer3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff', object.getPlanet()) - enforcer3.setStfFilename('static_item_n') - enforcer3.setStfName('item_bracelet_l_set_bh_dps_01_01') - enforcer3.setDetailFilename('static_item_d') - enforcer3.setDetailName('item_bracelet_l_set_bh_dps_01_01') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff', object.getPlanet()) + # enforcer3.setStfFilename('static_item_n') + # enforcer3.setStfName('item_bracelet_l_set_bh_dps_01_01') + # enforcer3.setDetailFilename('static_item_d') + # enforcer3.setDetailName('item_bracelet_l_set_bh_dps_01_01') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer3) - enforcer4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - enforcer4.setStfFilename('static_item_n') - enforcer4.setStfName('item_ring_set_bh_dps_01_01') - enforcer4.setDetailFilename('static_item_d') - enforcer4.setDetailName('item_ring_set_bh_dps_01_01') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) + # enforcer4.setStfFilename('static_item_n') + # enforcer4.setStfName('item_ring_set_bh_dps_01_01') + # enforcer4.setDetailFilename('static_item_d') + # enforcer4.setDetailName('item_ring_set_bh_dps_01_01') + # enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer4) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer4) - enforcer5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - enforcer5.setStfFilename('static_item_n') - enforcer5.setStfName('item_ring_a_set_bh_dps') - enforcer5.setDetailFilename('static_item_d') - enforcer5.setDetailName('item_ring_a_set_bh_dps') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) + # enforcer5.setStfFilename('static_item_n') + # enforcer5.setStfName('item_ring_a_set_bh_dps') + # enforcer5.setDetailFilename('static_item_d') + # enforcer5.setDetailName('item_ring_a_set_bh_dps') + # enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer5) - return - return + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer5) + # return + #return - return + return \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 1c04d540..cc87338e 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -35,6 +35,8 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.mina.core.service.IoHandler; + +import protocol.swg.ChatSystemMessage; import net.engio.mbassy.bus.config.BusConfiguration; import resources.common.RadialOptions; import resources.common.ThreadMonitor; @@ -108,6 +110,7 @@ public class NGECore { private Config config = null; + private volatile boolean isShuttingDown = false; private ConcurrentHashMap clients = new ConcurrentHashMap(); @@ -168,6 +171,8 @@ public class NGECore { private BusConfiguration eventBusConfig = BusConfiguration.Default(1, new ThreadPoolExecutor(1, 4, 1, TimeUnit.MINUTES, new LinkedBlockingQueue())); + private ObjectDatabase buildingODB; + public NGECore() { @@ -209,6 +214,7 @@ public class NGECore { setGalaxyStatus(1); creatureODB = new ObjectDatabase("creature", true, false, true); + buildingODB = new ObjectDatabase("building", true, false, true); mailODB = new ObjectDatabase("mails", true, false, true); guildODB = new ObjectDatabase("guild", true, false, true); // Services @@ -305,6 +311,7 @@ public class NGECore { travelService.loadTravelPoints(); simulationService = new SimulationService(this); + objectService.loadBuildings(); terrainService.loadSnapShotObjects(); simulationService.insertSnapShotObjects(); @@ -438,6 +445,10 @@ public class NGECore { return guildODB; } + public ObjectDatabase getBuildingODB() { + return buildingODB; + } + public int getActiveClients() { int connections = 0; for (Map.Entry c : clients.entrySet()) { @@ -495,5 +506,39 @@ public class NGECore { return eventBusConfig; } + public void initiateShutdown() { + if(isShuttingDown) + return; + try { + + for(int minutes = 15; minutes > 1; minutes--) { + simulationService.notifyAllClients(new ChatSystemMessage("The server will be shutting down soon. Please find a safe place to logout. (" + minutes + " minutes left)", (byte) 0 ).serialize()); + Thread.sleep(60000); + } + setGalaxyStatus(3); + simulationService.notifyAllClients(new ChatSystemMessage("The server will be shutting down soon. Please find a safe place to logout. (" + 1 + " minutes left)", (byte) 0 ).serialize()); + Thread.sleep(30000); + simulationService.notifyAllClients(new ChatSystemMessage("You will be disconnected in 30 seconds so the server can perform a final save before shutting down. Please find a safe place to logout now.", (byte) 0 ).serialize()); + Thread.sleep(20000); + simulationService.notifyAllClients(new ChatSystemMessage("You will be disconnected in 10 seconds so the server can perform a final save before shutting down. Please find a safe place to logout now.", (byte) 0 ).serialize()); + Thread.sleep(10000); + simulationService.notifyAllClients(new ChatSystemMessage("You will now be disconnected so the server can perform a final save before shutting down.", (byte) 0 ).serialize()); + + synchronized(getActiveConnectionsMap()) { + for(Client client : getActiveConnectionsMap().values()) { + client.getSession().close(true); + } + } + + System.exit(0); + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + + + } + } diff --git a/src/protocol/swg/ClientPermissionsMessage.java b/src/protocol/swg/ClientPermissionsMessage.java index b2f7dc22..8a2ba6de 100644 --- a/src/protocol/swg/ClientPermissionsMessage.java +++ b/src/protocol/swg/ClientPermissionsMessage.java @@ -28,11 +28,14 @@ import org.apache.mina.core.buffer.IoBuffer; public class ClientPermissionsMessage extends SWGMessage { - public ClientPermissionsMessage() { + private int characterSlotsOpen; + + public ClientPermissionsMessage(int characterSlotsOpen) { + if(characterSlotsOpen < 0) + characterSlotsOpen = 0; + this.characterSlotsOpen = characterSlotsOpen; operandCount = 5; opcode = 0xE00730E5; - - data = new byte[] { (byte)0x01, (byte)0x01, (byte)0x00, (byte)0x01 }; } public void deserialize(IoBuffer data) { @@ -44,9 +47,11 @@ public class ClientPermissionsMessage extends SWGMessage { result.putShort(operandCount); result.putInt(opcode); - result.put(data); - result.flip(); + result.put((byte) 1); + result.put((byte) characterSlotsOpen); + result.put((byte) 0); + result.put((byte) 1); - return result; + return result.flip(); } } diff --git a/src/resources/common/PlayerFlags.java b/src/resources/common/PlayerFlags.java new file mode 100644 index 00000000..897659d7 --- /dev/null +++ b/src/resources/common/PlayerFlags.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class PlayerFlags { + public static final int LFG = 0x01; + public static final int HELPER = 0x02; + public static final int ROLEPLAYER = 0x04; + public static final int AFK = 0x80; + public static final int LD = 0x0100; + public static final int FACTIONRANK = 0x0200; + +} diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 4db7320c..15d84777 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -21,24 +21,29 @@ ******************************************************************************/ package resources.objects.building; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import resources.objects.cell.CellObject; +import com.sleepycat.je.Environment; +import com.sleepycat.je.Transaction; import resources.objects.tangible.TangibleObject; - import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.NotPersistent; import engine.clients.Client; import engine.resources.container.Traverser; +import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Entity(version=0) -public class BuildingObject extends TangibleObject { +public class BuildingObject extends TangibleObject implements IPersistent { @NotPersistent private BuildingMessageBuilder messageBuilder; + @NotPersistent + private Transaction txn; public BuildingObject() { super(); @@ -54,17 +59,21 @@ public class BuildingObject extends TangibleObject { final AtomicReference ref = new AtomicReference(); - this.viewChildren(this, true, false, new Traverser() { - - @Override - public void process(SWGObject obj) { + synchronized(objectMutex) { + + this.viewChildren(this, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + + if(obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) + ref.set((CellObject) obj); + + } - if(obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) - ref.set((CellObject) obj); - - } - - }); + }); + + } return ref.get(); @@ -85,4 +94,11 @@ public class BuildingObject extends TangibleObject { } + public Transaction getTransaction() { return txn; } + + public void createTransaction(Environment env) { + txn = env.beginTransaction(null, null); + txn.setLockTimeout(500, TimeUnit.MILLISECONDS); + } + } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 52ee9080..7689f90d 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -598,6 +598,21 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { return buffer; } + public IoBuffer buildFlagBitmask(int bitmask) { + IoBuffer buffer = bufferPool.allocate(30, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(4); + buffer.putInt(bitmask); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + + int size = buffer.position(); + buffer.flip(); + + buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 5, buffer, size + 4); + return buffer; + } + @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 2a56fe85..ecdc69bf 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -41,7 +41,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) +@Persistent(version=3) public class PlayerObject extends IntangibleObject { // PLAY 3 @@ -56,6 +56,7 @@ public class PlayerObject extends IntangibleObject { private int totalPlayTime = 0; private byte[] collections = new byte[] { }; private int highestSetBit = 0; + private int flagBitmask = 0; // PLAY 6 @@ -658,4 +659,38 @@ public class PlayerObject extends IntangibleObject { } } + public int getFlagBitmask() { + synchronized(objectMutex) { + return flagBitmask; + } + } + + public void setFlagBitmask(int flagBitmask) { + synchronized(objectMutex) { + this.flagBitmask |= flagBitmask; + } + + if (getContainer() != null) { + getContainer().notifyObservers(messageBuilder.buildFlagBitmask(this.flagBitmask), true); + } + } + public void clearFlagBitmask(int flagBitmask) { + synchronized(objectMutex) { + // set flag bitmask to 0 + this.flagBitmask &= ~flagBitmask; + } + + if (getContainer() != null) { + getContainer().notifyObservers(messageBuilder.buildFlagBitmask(this.flagBitmask), true); + } + } + + public void toggleFlag(int flag) { + if ((this.flagBitmask & flag) == flag) { + clearFlagBitmask(flag); + } else { + setFlagBitmask(flag); + } + } + } diff --git a/src/resources/z/exp/objects/waypoint/WaypointObject.java b/src/resources/z/exp/objects/waypoint/WaypointObject.java index df08f5ca..6539e172 100644 --- a/src/resources/z/exp/objects/waypoint/WaypointObject.java +++ b/src/resources/z/exp/objects/waypoint/WaypointObject.java @@ -37,7 +37,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent +@Persistent(version=0) public class WaypointObject extends IntangibleObject implements IDelta { public static final byte BLUE, GREEN, ORANGE, YELLOW, PURPLE, WHITE, MULTICOLOR; diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 9d265f47..40e7ded9 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -447,5 +447,19 @@ public class CharacterService implements INetworkDispatch { // TODO Auto-generated method stub } + + public int getNumberOfCharacters(int accountId) { + PreparedStatement preparedStatement; + int characters = 0; + try { + preparedStatement = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + accountId + ""); + ResultSet resultSet = preparedStatement.executeQuery(); + while(resultSet.next() && !resultSet.isClosed()) + characters++; + } catch (SQLException e) { + e.printStackTrace(); + } + return characters; + } } diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 9acee192..8619f799 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -70,7 +70,6 @@ public class ConnectionService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - System.out.println("xx"); data = data.order(ByteOrder.LITTLE_ENDIAN); ClientIdMsg clientIdMsg = new ClientIdMsg(); data.position(0); @@ -96,13 +95,12 @@ public class ConnectionService implements INetworkDispatch { client.setSessionKey(clientIdMsg.getSessionKey()); client.setGM(core.loginService.checkForGmPermission((int) resultSet.getLong("accountId"))); AccountFeatureBits accountFeatureBits = new AccountFeatureBits(); - ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(); + ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(2 - core.characterService.getNumberOfCharacters((int) resultSet.getLong("accountId"))); session.write(new HeartBeatMessage().serialize()); session.write(accountFeatureBits.serialize()); session.write(clientPermissionsMessage.serialize()); preparedStatement.close(); - System.out.println("zyx"); } else { System.out.println("Cant get login session"); } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index e02e5a6a..69feda7f 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -209,9 +209,10 @@ public class LoginService implements INetworkDispatch{ public boolean checkForGmPermission(int id) { PreparedStatement preparedStatement; try { - preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); ResultSet resultSet = preparedStatement.executeQuery(); - return resultSet.getBoolean("gmflag"); + if(resultSet.next()) + return resultSet.getBoolean("gmflag"); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index cc135480..b671f380 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -148,6 +148,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerGmCommand("setgodmode"); core.commandService.registerCommand("requestwaypointatposition"); core.commandService.registerCommand("meditate"); + core.commandService.registerGmCommand("server"); } @@ -622,7 +623,7 @@ public class SimulationService implements INetworkDispatch { SWGObject obj = it.next(); if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance(pos) > 200) continue; - System.out.println(obj.getTemplate()); + //System.out.println(obj.getTemplate()); object.makeAware(obj); if(obj.getClient() != null) obj.makeAware(object); diff --git a/src/services/TerrainService.java b/src/services/TerrainService.java index 960d48f0..c5340311 100644 --- a/src/services/TerrainService.java +++ b/src/services/TerrainService.java @@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; import resources.common.FileUtilities; import resources.common.collidables.CollidableCircle; +import resources.objects.building.BuildingObject; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; @@ -226,6 +227,26 @@ public class TerrainService { } } + synchronized(core.objectService.getObjectList()) { + + for(SWGObject object : core.objectService.getObjectList().values()) { + + if(!(object instanceof BuildingObject)) + continue; + + BuildingObject building = (BuildingObject) object; + + if(building.getTransaction() == null) + continue; + + building.createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); + building.getTransaction().commitSync(); + + } + + } + } public boolean canBuildAtPosition(SWGObject object, float x, float z) { diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 9dcad29b..1e0ca7c8 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -139,6 +139,32 @@ public class ObjectService implements INetworkDispatch { } } + public void loadBuildings() { + EntityCursor cursor = core.getBuildingODB().getCursor(Long.class, BuildingObject.class); + + Iterator it = cursor.iterator(); + + while(it.hasNext()) { + final BuildingObject building = it.next(); + objectList.put(building.getObjectID(), building); + Planet planet = core.terrainService.getPlanetByID(building.getPlanetId()); + building.setPlanet(planet); + building.viewChildren(building, true, true, new Traverser() { + + @Override + public void process(SWGObject object) { + objectList.put(object.getObjectID(), object); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(building); + object.getContainerInfo(object.getTemplate()); + } + + }); + core.simulationService.add(building, building.getPosition().x, building.getPosition().z); + } + + } + public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation, String customServerTemplate) { return createObject(Template, objectID, planet, position, orientation, customServerTemplate, false); } @@ -541,6 +567,7 @@ public class ObjectService implements INetworkDispatch { if(creature.getParentId() != 0) { SWGObject parent = getObject(creature.getParentId()); + System.out.println("Building: " + parent.getContainer().getTemplate()); parent._add(creature); } @@ -562,9 +589,10 @@ public class ObjectService implements INetworkDispatch { creature.makeAware(core.guildService.getGuildObject()); core.chatService.loadMailHeaders(client); + core.simulationService.handleZoneIn(client); - creature.makeAware(creature); + PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); @@ -635,7 +663,7 @@ public class ObjectService implements INetworkDispatch { if(obj.getParentId() != 0 && getObject(obj.getParentId()) != null) { SWGObject parent = getObject(obj.getParentId()); parent.add(obj); - } + } } } @@ -755,7 +783,7 @@ public class ObjectService implements INetworkDispatch { portalCRC = (Integer) buildoutTable.getObject(i, 13); } - + if(!template.equals("object/cell/shared_cell.iff") && objectId != 0 && getObject(objectId) != null) { //System.out.println("Duplicate buildout object: " + template); continue; @@ -766,7 +794,8 @@ public class ObjectService implements INetworkDispatch { if(objectId != 0 && containerId == 0) { 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); + object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true); + ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); } else { object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); } @@ -776,7 +805,7 @@ public class ObjectService implements INetworkDispatch { object.setAttachment("bigSpawnRange", new Boolean(true)); core.simulationService.add(object, object.getPosition().x, object.getPosition().z); } else if(containerId != 0) { - object = createObject(template, objectId, planet, new Point3D(px, py, pz), new Quaternion(qw, qx, qy, qz)); + object = createObject(template, 0, planet, new Point3D(px, py, pz), new Quaternion(qw, qx, qy, qz)); if(containers.contains(containerId)) { object.setisInSnapshot(false); containers.add(objectId); @@ -785,8 +814,16 @@ public class ObjectService implements INetworkDispatch { ((CellObject) object).setCellNumber(cellIndex); SWGObject parent = getObject(containerId); - if(parent != null && object != null) + if(parent != null && object != null) { + if(parent instanceof BuildingObject && ((BuildingObject) parent).getCellByCellNumber(cellIndex) != null) + continue; parent.add(object); + /*if(parent instanceof BuildingObject) { + ((BuildingObject) parent).createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put((BuildingObject) parent, Long.class, BuildingObject.class, ((BuildingObject) parent).getTransaction()); + ((BuildingObject) parent).getTransaction().commitSync(); + }*/ + } } else { object = createObject(template, 0, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); core.simulationService.add(object, object.getPosition().x, object.getPosition().z);