mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-10-13 03:13:26 -04:00
Merge branch 'master' of https://github.com/ProjectSWGCore/NGECore2
Conflicts: src/services/bazaar/BazaarService.java
This commit is contained in:
@@ -18,7 +18,7 @@ def run(core, actor, target, commandString):
|
||||
elementalType = weapon.getElementalType()
|
||||
commandName = ''
|
||||
|
||||
if elementalType == '@obj_attr_n:elemental_heat':
|
||||
if elementalType == 'heat':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_fire_1'
|
||||
if actor.getLevel() >= 60:
|
||||
@@ -29,7 +29,7 @@ def run(core, actor, target, commandString):
|
||||
commandName = 'co_hw_dot_fire_4'
|
||||
if actor.getLevel() >= 90:
|
||||
commandName = 'co_hw_dot_fire_5'
|
||||
elif elementalType == '@obj_attr_n:elemental_cold':
|
||||
elif elementalType == 'cold':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_cold_1'
|
||||
if actor.getLevel() >= 60:
|
||||
@@ -40,7 +40,7 @@ def run(core, actor, target, commandString):
|
||||
commandName = 'co_hw_dot_cold_4'
|
||||
if actor.getLevel() >= 90:
|
||||
commandName = 'co_hw_dot_cold_5'
|
||||
elif elementalType == '@obj_attr_n:elemental_acid':
|
||||
elif elementalType == 'acid':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_acid_1'
|
||||
if actor.getLevel() >= 60:
|
||||
@@ -51,7 +51,7 @@ def run(core, actor, target, commandString):
|
||||
commandName = 'co_hw_dot_acid_4'
|
||||
if actor.getLevel() >= 90:
|
||||
commandName = 'co_hw_dot_acid_5'
|
||||
elif elementalType == '@obj_attr_n:elemental_electricity':
|
||||
elif elementalType == 'electricity':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_electrical_1'
|
||||
if actor.getLevel() >= 60:
|
||||
@@ -62,7 +62,7 @@ def run(core, actor, target, commandString):
|
||||
commandName = 'co_hw_dot_electrical_4'
|
||||
if actor.getLevel() >= 90:
|
||||
commandName = 'co_hw_dot_electrical_5'
|
||||
elif elementalType == '@obj_attr_n:elemental_energy':
|
||||
elif elementalType == 'energy':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_energy_1'
|
||||
if actor.getLevel() >= 60:
|
||||
@@ -73,7 +73,7 @@ def run(core, actor, target, commandString):
|
||||
commandName = 'co_hw_dot_energy_4'
|
||||
if actor.getLevel() >= 90:
|
||||
commandName = 'co_hw_dot_energy_5'
|
||||
elif elementalType =='@obj_attr_n:elemental_kinetic':
|
||||
elif elementalType =='kinetic':
|
||||
if actor.getLevel() >= 58:
|
||||
commandName = 'co_hw_dot_kinetic_1'
|
||||
if actor.getLevel() >= 60:
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import sys
|
||||
|
||||
def setup():
|
||||
return
|
||||
|
||||
def run(core, actor, target, commandString):
|
||||
if actor.canMount(target) is False: return
|
||||
|
||||
if not actor.isMounted():
|
||||
actor.setMounted(1)
|
||||
target.initMount(actor)
|
||||
else:
|
||||
target.unmount(actor)
|
||||
|
||||
return
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import sys
|
||||
|
||||
def setup():
|
||||
return
|
||||
|
||||
def run(core, actor, target, commandString):
|
||||
if actor.canMount(target) is False: return
|
||||
|
||||
if not actor.isMounted():
|
||||
actor.setMounted(1)
|
||||
target.initMount(actor)
|
||||
else:
|
||||
target.unmount(actor)
|
||||
|
||||
return
|
||||
|
||||
@@ -11,11 +11,17 @@ def run(core, actor, target, commandString):
|
||||
container = objService.getObject(containerID)
|
||||
actorContainer = actor.getContainer()
|
||||
|
||||
if container == None: return
|
||||
|
||||
if actorContainer != None and (container.getTemplate() == "object/cell/shared_cell.iff") & core.housingService.getPermissions(actor, actorContainer):
|
||||
target.getContainer().transferTo(actor, container, target)
|
||||
core.simulationService.teleport(target, actor.getPosition(), Quaternion(1,0,0,0), containerID)
|
||||
#core.housingService.addItemToHouseItemList(target,actorContainer)
|
||||
return
|
||||
|
||||
elif target.getContainer().getTemplate() == "object/cell/shared_cell.iff" and core.housingService.getPermissions(actor, target.getContainer()):
|
||||
target.getContainer().transferTo(actor, container, target)
|
||||
return
|
||||
|
||||
elif actorContainer != None and container.getTemplate() == "object/cell/shared_cell.iff":
|
||||
actor.sendSystemMessage("You do not have permission to access that container!", 0)
|
||||
return
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_bh_dps")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_bh_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_bh_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_bh_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_bh_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_bh_dps_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_bh_utility_a")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_bh_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_bh_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_bh_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_bh_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_bh_utility_a_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_bh_utility_b")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_bh_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_bh_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_bh_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_bh_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_bh_utility_b_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_medic_dps")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_medic_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_medic_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_medic_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_medic_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_medic_dps_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_medic_utility_a")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_medic_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_medic_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_medic_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_medic_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_medic_utility_a_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_medic_utility_b")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_medic_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_medic_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_medic_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_medic_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_medic_utility_b_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_spy_dps")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_spy_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_spy_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_spy_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_spy_dps_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_spy_dps_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_spy_utility_a")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_spy_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_spy_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_spy_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_spy_utility_a_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_spy_utility_a_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_3")
|
||||
@@ -0,0 +1,28 @@
|
||||
import sys
|
||||
from services.equipment import BonusSetTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addBonusSet(core):
|
||||
bonusSet = BonusSetTemplate("set_bonus_spy_utility_b")
|
||||
|
||||
bonusSet.addRequiredItem("item_band_set_spy_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_ring_set_spy_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_necklace_set_spy_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_r_set_spy_utility_b_01_01")
|
||||
bonusSet.addRequiredItem("item_bracelet_l_set_spy_utility_b_01_01")
|
||||
|
||||
core.equipmentService.addBonusSetTemplate(bonusSet)
|
||||
|
||||
def handleChange(core, creature, set):
|
||||
wornItems = set.getWornTemplateCount(creature)
|
||||
|
||||
if wornItems == 3:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_1", creature)
|
||||
elif wornItems == 4:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_2", creature)
|
||||
elif wornItems == 5:
|
||||
core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_3", creature)
|
||||
else:
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_1")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_2")
|
||||
core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_3")
|
||||
@@ -1,25 +1,37 @@
|
||||
import sys
|
||||
|
||||
def Rifle():
|
||||
def weap_0():
|
||||
return "expertise_critical_rifle"
|
||||
|
||||
def Carbine():
|
||||
def weap_1():
|
||||
return "expertise_critical_carbine"
|
||||
|
||||
def Pistol():
|
||||
def weap_2():
|
||||
return "expertise_critical_pistol"
|
||||
|
||||
def OneHandedMelee():
|
||||
def weap_4():
|
||||
return "expertise_critical_1h"
|
||||
|
||||
def TwoHandedMelee():
|
||||
def weap_5():
|
||||
return "expertise_critical_2h"
|
||||
|
||||
def Unarmed():
|
||||
def weap_6():
|
||||
return "expertise_critical_unarmed"
|
||||
|
||||
def Polearm():
|
||||
def weap_7():
|
||||
return "expertise_critical_polearm"
|
||||
|
||||
def FreeTargetingHeavyWeapon():
|
||||
|
||||
def weap_9():
|
||||
return ""
|
||||
|
||||
def weap_10():
|
||||
return ""
|
||||
|
||||
def weap_11():
|
||||
return ""
|
||||
|
||||
def weap_12():
|
||||
return "expertise_critical_heavy"
|
||||
|
||||
def weap_13():
|
||||
return "expertise_critical_heavy"
|
||||
@@ -1,9 +1,9 @@
|
||||
import sys
|
||||
|
||||
def addAbilities(core, actor, player):
|
||||
actor.addAbility("bh_shields_1")
|
||||
actor.addAbility("bh_armor_sprint_1")
|
||||
return
|
||||
|
||||
def removeAbilities(core, actor, player):
|
||||
actor.removeAbility("bh_shields_1")
|
||||
actor.removeAbility("bh_armor_sprint_1")
|
||||
return
|
||||
|
||||
@@ -1,51 +1,52 @@
|
||||
import sys
|
||||
|
||||
def addAbilities(core, actor, player):
|
||||
if actor.getLevel() >= 4:
|
||||
actor.addAbility("sp_hd_melee_0")
|
||||
if actor.getLevel() >= 12:
|
||||
actor.addAbility("sp_hd_melee_1")
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_stealth_melee_0")
|
||||
if actor.getLevel() >= 20:
|
||||
actor.addAbility("sp_hd_melee_2")
|
||||
if actor.getLevel() >= 30:
|
||||
actor.addAbility("sp_hd_melee_3")
|
||||
if actor.getLevel() >= 38:
|
||||
actor.addAbility("sp_hd_melee_4")
|
||||
if actor.getLevel() >= 52:
|
||||
actor.addAbility("sp_hd_melee_5")
|
||||
if actor.getLevel() >= 62:
|
||||
actor.addAbility("sp_hd_melee_6")
|
||||
actor.addAbility("sp_stealth_melee_1")
|
||||
if actor.getLevel() >= 32:
|
||||
actor.addAbility("sp_stealth_melee_2")
|
||||
if actor.getLevel() >= 46:
|
||||
actor.addAbility("sp_stealth_melee_3")
|
||||
if actor.getLevel() >= 60:
|
||||
actor.addAbility("sp_stealth_melee_4")
|
||||
if actor.getLevel() >= 70:
|
||||
actor.addAbility("sp_stealth_melee_5")
|
||||
if actor.getLevel() >= 86:
|
||||
actor.addAbility("sp_stealth_melee_6")
|
||||
|
||||
if actor.getLevel() >= 4:
|
||||
actor.addAbility("sp_hd_range_0")
|
||||
if actor.getLevel() >= 12:
|
||||
actor.addAbility("sp_hd_range_1")
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_stealth_ranged_0")
|
||||
if actor.getLevel() >= 20:
|
||||
actor.addAbility("sp_hd_range_2")
|
||||
if actor.getLevel() >= 30:
|
||||
actor.addAbility("sp_hd_range_3")
|
||||
if actor.getLevel() >= 38:
|
||||
actor.addAbility("sp_hd_range_4")
|
||||
if actor.getLevel() >= 52:
|
||||
actor.addAbility("sp_hd_range_5")
|
||||
if actor.getLevel() >= 62:
|
||||
actor.addAbility("sp_hd_range_6")
|
||||
actor.addAbility("sp_stealth_ranged_1")
|
||||
if actor.getLevel() >= 32:
|
||||
actor.addAbility("sp_stealth_ranged_2")
|
||||
if actor.getLevel() >= 46:
|
||||
actor.addAbility("sp_stealth_ranged_3")
|
||||
if actor.getLevel() >= 60:
|
||||
actor.addAbility("sp_stealth_ranged_4")
|
||||
if actor.getLevel() >= 70:
|
||||
actor.addAbility("sp_stealth_ranged_5")
|
||||
if actor.getLevel() >= 86:
|
||||
actor.addAbility("sp_stealth_ranged_6")
|
||||
return
|
||||
|
||||
def removeAbilities(core, actor, player):
|
||||
actor.removeAbility("sp_hd_melee_0")
|
||||
actor.removeAbility("sp_hd_melee_1")
|
||||
actor.removeAbility("sp_hd_melee_2")
|
||||
actor.removeAbility("sp_hd_melee_3")
|
||||
actor.removeAbility("sp_hd_melee_4")
|
||||
actor.removeAbility("sp_hd_melee_5")
|
||||
actor.removeAbility("sp_hd_melee_6")
|
||||
actor.removeAbility("sp_stealth_melee_0")
|
||||
actor.removeAbility("sp_stealth_melee_1")
|
||||
actor.removeAbility("sp_stealth_melee_2")
|
||||
actor.removeAbility("sp_stealth_melee_3")
|
||||
actor.removeAbility("sp_stealth_melee_4")
|
||||
actor.removeAbility("sp_stealth_melee_5")
|
||||
actor.removeAbility("sp_stealth_melee_6")
|
||||
|
||||
actor.removeAbility("sp_hd_range_0")
|
||||
actor.removeAbility("sp_hd_range_1")
|
||||
actor.removeAbility("sp_hd_range_2")
|
||||
actor.removeAbility("sp_hd_range_3")
|
||||
actor.removeAbility("sp_hd_range_4")
|
||||
actor.removeAbility("sp_hd_range_5")
|
||||
actor.removeAbility("sp_hd_range_6")
|
||||
actor.removeAbility("sp_stealth_ranged_0")
|
||||
actor.removeAbility("sp_stealth_ranged_1")
|
||||
actor.removeAbility("sp_stealth_ranged_2")
|
||||
actor.removeAbility("sp_stealth_ranged_3")
|
||||
actor.removeAbility("sp_stealth_ranged_4")
|
||||
actor.removeAbility("sp_stealth_ranged_5")
|
||||
actor.removeAbility("sp_stealth_ranged_6")
|
||||
return
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import sys
|
||||
|
||||
def addAbilities(core, actor, player):
|
||||
if actor.getLevel() >= 26:
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_cloaked_recovery_0")
|
||||
if actor.getLevel() >= 34:
|
||||
if actor.getLevel() >= 28:
|
||||
actor.addAbility("sp_cloaked_recovery_1")
|
||||
if actor.getLevel() >= 48:
|
||||
if actor.getLevel() >= 54:
|
||||
actor.addAbility("sp_cloaked_recovery_2")
|
||||
if actor.getLevel() >= 62:
|
||||
if actor.getLevel() >= 70:
|
||||
actor.addAbility("sp_cloaked_recovery_3")
|
||||
if actor.getLevel() >= 76:
|
||||
if actor.getLevel() >= 86:
|
||||
actor.addAbility("sp_cloaked_recovery_4")
|
||||
return
|
||||
|
||||
|
||||
@@ -1,9 +1,51 @@
|
||||
import sys
|
||||
|
||||
def addAbilities(core, actor, player):
|
||||
actor.addAbility("sp_hd_ability_1")
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_hd_melee_0")
|
||||
if actor.getLevel() >= 18:
|
||||
actor.addAbility("sp_hd_melee_1")
|
||||
if actor.getLevel() >= 32:
|
||||
actor.addAbility("sp_hd_melee_2")
|
||||
if actor.getLevel() >= 46:
|
||||
actor.addAbility("sp_hd_melee_3")
|
||||
if actor.getLevel() >= 58:
|
||||
actor.addAbility("sp_hd_melee_4")
|
||||
if actor.getLevel() >= 70:
|
||||
actor.addAbility("sp_hd_melee_5")
|
||||
if actor.getLevel() >= 84:
|
||||
actor.addAbility("sp_hd_melee_6")
|
||||
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_hd_range_0")
|
||||
if actor.getLevel() >= 18:
|
||||
actor.addAbility("sp_hd_range_1")
|
||||
if actor.getLevel() >= 32:
|
||||
actor.addAbility("sp_hd_range_2")
|
||||
if actor.getLevel() >= 46:
|
||||
actor.addAbility("sp_hd_range_3")
|
||||
if actor.getLevel() >= 58:
|
||||
actor.addAbility("sp_hd_range_4")
|
||||
if actor.getLevel() >= 70:
|
||||
actor.addAbility("sp_hd_range_5")
|
||||
if actor.getLevel() >= 84:
|
||||
actor.addAbility("sp_hd_range_6")
|
||||
return
|
||||
|
||||
def removeAbilities(core, actor, player):
|
||||
actor.removeAbility("sp_hd_ability_1")
|
||||
actor.removeAbility("sp_hd_melee_0")
|
||||
actor.removeAbility("sp_hd_melee_1")
|
||||
actor.removeAbility("sp_hd_melee_2")
|
||||
actor.removeAbility("sp_hd_melee_3")
|
||||
actor.removeAbility("sp_hd_melee_4")
|
||||
actor.removeAbility("sp_hd_melee_5")
|
||||
actor.removeAbility("sp_hd_melee_6")
|
||||
|
||||
actor.removeAbility("sp_hd_range_0")
|
||||
actor.removeAbility("sp_hd_range_1")
|
||||
actor.removeAbility("sp_hd_range_2")
|
||||
actor.removeAbility("sp_hd_range_3")
|
||||
actor.removeAbility("sp_hd_range_4")
|
||||
actor.removeAbility("sp_hd_range_5")
|
||||
actor.removeAbility("sp_hd_range_6")
|
||||
return
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import sys
|
||||
|
||||
def addAbilities(core, actor, player):
|
||||
if actor.getLevel() >= 26:
|
||||
if actor.getLevel() >= 10:
|
||||
actor.addAbility("sp_dot_0")
|
||||
if actor.getLevel() >= 34:
|
||||
if actor.getLevel() >= 28:
|
||||
actor.addAbility("sp_dot_1")
|
||||
if actor.getLevel() >= 48:
|
||||
if actor.getLevel() >= 46:
|
||||
actor.addAbility("sp_dot_2")
|
||||
if actor.getLevel() >= 62:
|
||||
if actor.getLevel() >= 58:
|
||||
actor.addAbility("sp_dot_3")
|
||||
if actor.getLevel() >= 76:
|
||||
if actor.getLevel() >= 72:
|
||||
actor.addAbility("sp_dot_4")
|
||||
if actor.getLevel() >= 90:
|
||||
if actor.getLevel() >= 88:
|
||||
actor.addAbility("sp_dot_5")
|
||||
return
|
||||
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
object.setAttachment('radial_filename', 'item')
|
||||
object.setAttachment('radial_filename', 'vehicle_pcd')
|
||||
return
|
||||
|
||||
def use(core, actor, object):
|
||||
if object:
|
||||
if object and actor.getAttachment('activeVehicleID') == None:
|
||||
swoop = core.objectService.createObject('object/mobile/vehicle/shared_speederbike_swoop.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation())
|
||||
|
||||
swoop.setOwnerId(actor.getObjectID())
|
||||
actor.setAttachment('activeVehicleID', swoop.getObjectID())
|
||||
|
||||
core.simulationService.add(swoop, swoop.getPosition().x, swoop.getPosition().z, True)
|
||||
|
||||
return
|
||||
@@ -6,14 +6,19 @@ def setup(core, object):
|
||||
|
||||
def use(core, actor, object):
|
||||
datapad = actor.getSlottedObject('datapad')
|
||||
|
||||
pcd = core.objectService.createObject('object/intangible/vehicle/shared_speederbike_swoop_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y)
|
||||
#actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0)
|
||||
|
||||
if datapad and pcd:
|
||||
|
||||
datapad.add(pcd)
|
||||
core.objectService.destroyObject(object)
|
||||
vehicle = core.objectService.createObject('object/mobile/vehicle/shared_speederbike_swoop.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y)
|
||||
vehicle.setOwnerId(actor.getObjectID())
|
||||
core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True)
|
||||
|
||||
vehicleId = actor.getAttachment('activeVehicleID')
|
||||
|
||||
if vehicleId == None:
|
||||
vehicle = core.objectService.createObject('object/mobile/vehicle/shared_speederbike_swoop.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y)
|
||||
vehicle.setOwnerId(actor.getObjectID())
|
||||
core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True)
|
||||
actor.setAttachment('activeVehicleID', vehicle.getObjectID())
|
||||
|
||||
return
|
||||
@@ -1,4 +1,11 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
object.setAttackSpeed(1)
|
||||
object.setDamageType("kinetic")
|
||||
object.setMinDamage(50)
|
||||
object.setMaxDamage(100)
|
||||
object.setMaxRange(5)
|
||||
object.setWeaponType(6)
|
||||
|
||||
return
|
||||
@@ -4,14 +4,18 @@ import sys
|
||||
|
||||
def createRadial(core, owner, target, radials):
|
||||
radials.add(RadialOptions(0, 7, 1, ''))
|
||||
radials.add(RadialOptions(1, 40, 3, '@pet/pet_menu:menu_enter_exit'))
|
||||
radials.add(RadialOptions(0, 21, 1, ''))
|
||||
radials.add(RadialOptions(0, 60, 3, '@pet/pet_menu:menu_store'))
|
||||
|
||||
if owner.canMount(target):
|
||||
radials.add(RadialOptions(0, 208, 1, '@pet/pet_menu:menu_enter_exit'))
|
||||
|
||||
if target.getOwnerId() == owner.getObjectID():
|
||||
radials.add(RadialOptions(0, 60, 3, '@pet/pet_menu:menu_store'))
|
||||
|
||||
return
|
||||
|
||||
def handleSelection(core, owner, target, option):
|
||||
if target:
|
||||
if option == 21 or option == 40:
|
||||
if option == 208:
|
||||
if not owner.isMounted():
|
||||
owner.setMounted(1)
|
||||
target.initMount(owner)
|
||||
@@ -19,5 +23,7 @@ def handleSelection(core, owner, target, option):
|
||||
target.unmount(owner)
|
||||
|
||||
if option == 60:
|
||||
if owner.isMounted(): vehicleObject.unmount(owner)
|
||||
core.objectService.destroyObject(target)
|
||||
owner.setAttachment('activeVehicleID', None)
|
||||
return
|
||||
@@ -0,0 +1,27 @@
|
||||
from resources.common import RadialOptions
|
||||
import sys
|
||||
|
||||
def createRadial(core, owner, target, radials):
|
||||
radials.add(RadialOptions(0, 62, 1, ''))
|
||||
radials.add(RadialOptions(0, 7, 1, ''))
|
||||
return
|
||||
|
||||
def handleSelection(core, owner, target, option):
|
||||
|
||||
if option == 61 and target:
|
||||
core.objectService.useObject(owner, target)
|
||||
|
||||
if option == 62 and target:
|
||||
|
||||
vehicleId = long(owner.getAttachment('activeVehicleID'))
|
||||
|
||||
if vehicleId != None:
|
||||
vehicleObject = core.objectService.getObject(vehicleId)
|
||||
|
||||
if owner.isMounted(): vehicleObject.unmount(owner)
|
||||
|
||||
core.objectService.destroyObject(vehicleId)
|
||||
owner.setAttachment('activeVehicleID', None)
|
||||
|
||||
return
|
||||
|
||||
@@ -66,6 +66,14 @@ public class ObjControllerMessage extends SWGMessage {
|
||||
public static final int STOP_CONVERSATION = 0x00DE;
|
||||
public static final int CONVERSATION_MESSAGE = 0x00DF;
|
||||
public static final int CONVERSATION_OPTIONS = 0x00E0;
|
||||
public static final int DRAFT_SCHEMATICS = 0x0102;
|
||||
public static final int DRAFT_SLOTS = 0x0103;
|
||||
public static final int CRAFT_EXPERIMENT = 0x0106;
|
||||
public static final int CRAFT_ACKNOWLEDGE = 0x010C;
|
||||
public static final int CRAFT_CUSTOMIZATION = 0x015A;
|
||||
public static final int NEXT_CRAFTING_STAGE_RESULT = 0x01BE;
|
||||
public static final int DRAFT_SLOTS_QUERY_RESPONSE = 0x01BF;
|
||||
public static final int RESOURCE_WEIGHTS = 0x0207;
|
||||
|
||||
public ObjControllerMessage() {
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import main.NGECore;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatQueryRoomResults extends SWGMessage {
|
||||
|
||||
@@ -43,5 +43,16 @@ public class ObjControllerOpcodes {
|
||||
public static final int NPC_CONVERSATION_OPTIONS = 0xE0000000;
|
||||
public static final int SET_PROFESSION_TEMPLATE = 0x5C040000;
|
||||
public static final int RESOURCE_EMPTY_HOPPER = 0xED000000;
|
||||
public static final int DRAFT_SCHEMATICS = 0x0102;
|
||||
public static final int DRAFT_SLOTS = 0x0103;
|
||||
public static final int CRAFT_EXPERIMENT = 0x0106;
|
||||
public static final int CRAFT_FILLSLOT = 0x7010000;
|
||||
public static final int CRAFT_EMPTYSLOT = 0x8010000;
|
||||
public static final int CRAFT_ACKNOWLEDGE = 0x010C;
|
||||
public static final int CRAFT_CUSTOMIZATION = 0x5a010000;
|
||||
public static final int NEXT_CRAFTING_STAGE_RESULT = 0x01BE;
|
||||
public static final int DRAFT_SLOTS_QUERY_RESPONSE = 0x01BF;
|
||||
public static final int RESOURCE_WEIGHTS = 0x0207;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import java.util.Vector;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.harvester.HarvesterObject;
|
||||
|
||||
public class BuildingMessageBuilder extends ObjectMessageBuilder {
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 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.objects.craft;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@Persistent
|
||||
public class DraftSchematic extends SWGObject {
|
||||
|
||||
|
||||
public DraftSchematic(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, position, orientation, template);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1149,8 +1149,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
|
||||
buffer.putLong(ownerId);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
//buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); 0F,12 doesnt crash
|
||||
buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); // checked from 0xA up to 0x1F
|
||||
buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); // This is the correct one
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -1799,18 +1799,26 @@ public class CreatureObject extends TangibleObject implements IPersistent {
|
||||
this.mountedVehicle = mountedVehicle;
|
||||
}
|
||||
|
||||
public boolean canMount(CreatureObject vehicle)
|
||||
{
|
||||
if(vehicle.getOwnerId() == this.getObjectId()) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public void mount(CreatureObject owner) {
|
||||
boolean remove = false;
|
||||
synchronized(objectMutex) {
|
||||
if ((this.getOptionsBitmask() & Options.MOUNT) == Options.MOUNT){
|
||||
synchronized(objectMutex)
|
||||
{
|
||||
if ((this.getOptionsBitmask() & Options.MOUNT) == Options.MOUNT)
|
||||
{
|
||||
remove = true;
|
||||
_add(owner);
|
||||
UpdateContainmentMessage updateContainmentMessage = new UpdateContainmentMessage(owner.getObjectID(), this.getObjectID(), 4);
|
||||
notifyObservers(updateContainmentMessage, true);
|
||||
}
|
||||
}
|
||||
if(remove)
|
||||
NGECore.getInstance().simulationService.remove(owner, owner.getWorldPosition().x, owner.getWorldPosition().z, false);
|
||||
|
||||
if(remove) NGECore.getInstance().simulationService.remove(owner, owner.getWorldPosition().x, owner.getWorldPosition().z, false);
|
||||
}
|
||||
|
||||
public void unmount(CreatureObject owner) {
|
||||
@@ -1835,19 +1843,13 @@ public class CreatureObject extends TangibleObject implements IPersistent {
|
||||
|
||||
public void initMount(CreatureObject owner) {
|
||||
synchronized(objectMutex) {
|
||||
this.ownerId = owner.getObjectID();
|
||||
setStateBitmask(0x10000000);
|
||||
owner.setMountedVehicle(this);
|
||||
this.setOwnerId(owner.getObjectID());
|
||||
//this.add(owner); // NPE at engine.resources.objects.SWGObject.getCorrectArrangementId(kd:844)
|
||||
|
||||
this.mount(owner);
|
||||
// setStateBitmask(28);
|
||||
// owner.setStateBitmask(27);
|
||||
|
||||
owner.setStateBitmask(0x8000000);
|
||||
this.setPosture((byte)10);
|
||||
|
||||
//this.sendBaselines(owner.getClient());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,156 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.factorycrate;
|
||||
|
||||
public class FactoryCrateMessageBuilder {
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
public class FactoryCrateMessageBuilder extends ObjectMessageBuilder{
|
||||
|
||||
public FactoryCrateMessageBuilder(FactoryCrateObject factoryCrateObject) {
|
||||
setObject(factoryCrateObject);
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildBaseline3() {
|
||||
FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object;
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putFloat(1.0f); //op0
|
||||
buffer.put(getAsciiString("factory_n"));
|
||||
buffer.putInt(0);
|
||||
buffer.put(getAsciiString("food_crate"));
|
||||
|
||||
if (factoryCrateObject.getCustomName().length()>0)
|
||||
buffer.put(getUnicodeString(factoryCrateObject.getCustomName()));
|
||||
else
|
||||
buffer.putInt(0);
|
||||
|
||||
buffer.putInt(1);
|
||||
buffer.putShort((short)0);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
|
||||
buffer.putInt(0x2100); // optionsbitmask
|
||||
buffer.putInt((int)factoryCrateObject.getQuantity()); // Quantity // op9
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0x64); // condition maybe
|
||||
|
||||
buffer.put((byte)1);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
|
||||
buffer.flip();
|
||||
buffer = createBaseline("TYCF", (byte) 3, buffer, size);
|
||||
|
||||
return buffer;
|
||||
|
||||
// 01 00 00 00
|
||||
// 00 00
|
||||
// 00 00 00 00
|
||||
// 00 00 00 00
|
||||
// 00 00 00 00
|
||||
// 00 00 00 00
|
||||
// 00 21 00 00
|
||||
// 2A 00 00 00
|
||||
// 00 00 00 00
|
||||
// 64 00 00 00
|
||||
// 01
|
||||
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline6() {
|
||||
FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object;
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short)6);
|
||||
buffer.putInt(3);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
|
||||
buffer.put((byte)0);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
|
||||
buffer.flip();
|
||||
buffer = createBaseline("TYCF", (byte) 6, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildBaseline8() {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)0);
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("RCNO", (byte) 8, buffer, size);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline9() {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)0);
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("TYCF", (byte) 9, buffer, size);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildDelta3() {
|
||||
FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object;
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putInt(factoryCrateObject.getQuantity());
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
buffer = createDelta("TYCF", (byte) 3, (short) 1, (short) 9, buffer, size + 4);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendBaselines() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,250 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.factorycrate;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Vector;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneDestroyObject;
|
||||
import protocol.swg.SceneEndBaselines;
|
||||
import protocol.swg.UpdateContainmentMessage;
|
||||
import protocol.swg.UpdatePVPStatusMessage;
|
||||
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.clients.Client;
|
||||
import engine.resources.common.CRC;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
@Persistent(version=0)
|
||||
public class FactoryCrateObject extends TangibleObject {
|
||||
|
||||
private Vector<TangibleObject> contents;
|
||||
private byte capacity;
|
||||
private byte contentObjectQuantity;
|
||||
private int contentCRC;
|
||||
private TangibleObject contentObjectType;
|
||||
|
||||
@NotPersistent
|
||||
private FactoryCrateMessageBuilder messageBuilder;
|
||||
|
||||
public FactoryCrateObject() {
|
||||
|
||||
}
|
||||
|
||||
public FactoryCrateObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) {
|
||||
super(objectID, planet, template, position, orientation);
|
||||
this.messageBuilder = new FactoryCrateMessageBuilder(this);
|
||||
this.contents = new Vector<TangibleObject>();
|
||||
this.contentObjectQuantity = 0;
|
||||
this.capacity = 25;
|
||||
this.getAttributes().put("@obj_attr_n:condition", "100/100");
|
||||
this.getAttributes().put("@obj_attr_n:volume", "1");
|
||||
this.getAttributes().put("@obj_attr_n:quantity", "1");
|
||||
this.getAttributes().put("@obj_attr_n:factory_count", "1");
|
||||
this.getAttributes().put("@obj_attr_n:factory_attribs", "------------");
|
||||
this.getAttributes().put("@obj_attr_n:type", "@got_n:component");
|
||||
this.getAttributes().put("@obj_attr_n:serial_number", "123");
|
||||
|
||||
|
||||
}
|
||||
|
||||
public boolean setContentType(TangibleObject contentObject) {
|
||||
synchronized(objectMutex) {
|
||||
this.contentObjectType = contentObject;
|
||||
if (contentObject.getTemplate().length()>0)
|
||||
this.contentCRC = CRC.StringtoCRC(contentObject.getTemplate());
|
||||
else
|
||||
this.contentCRC = 0;
|
||||
|
||||
Map<String,String> contentAttributes = contentObject.getAttributes();
|
||||
for (Map.Entry<String, String> entry : contentAttributes.entrySet())
|
||||
{
|
||||
//if (!entry.getKey().equals(@obj_attr_n:condition))
|
||||
this.getAttributes().put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public TangibleObject getContentType() {
|
||||
return this.contentObjectType;
|
||||
}
|
||||
|
||||
public boolean setContentTypeAndQuantity(TangibleObject contentObject, int quantity) {
|
||||
synchronized(objectMutex) {
|
||||
this.contentObjectType = contentObject;
|
||||
if (contentObject.getTemplate().length()>0)
|
||||
this.contentCRC = CRC.StringtoCRC(contentObject.getTemplate());
|
||||
else{
|
||||
this.contentCRC = 0;
|
||||
return false; // Does it make sense to continue anyway?
|
||||
}
|
||||
|
||||
Map<String,String> contentAttributes = contentObject.getAttributes();
|
||||
for (Map.Entry<String, String> entry : contentAttributes.entrySet())
|
||||
{
|
||||
//if (!entry.getKey().equals(@obj_attr_n:condition))
|
||||
this.getAttributes().put(entry.getKey(), entry.getValue());
|
||||
System.out.println(entry.getKey() + " " + entry.getValue());
|
||||
}
|
||||
if (quantity<capacity) {
|
||||
contentObject.setSerialNumber(contentObject.getSerialNumber());
|
||||
for (int i=0;i<quantity;i++){
|
||||
contents.add(contentObject);
|
||||
}
|
||||
contentObjectQuantity = (byte) quantity;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addToCrate(TangibleObject contentObject) {
|
||||
synchronized(objectMutex) {
|
||||
if (contentObjectQuantity<capacity) {
|
||||
if (! contents.isEmpty()) {
|
||||
TangibleObject serialProvider = contents.firstElement();
|
||||
contentObject.setSerialNumber(serialProvider.getSerialNumber());
|
||||
}
|
||||
contents.add(contentObject);
|
||||
contentObjectQuantity ++;
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public String getContentFilename() {
|
||||
if (!contents.isEmpty()) {
|
||||
return contents.firstElement().getStfFilename();
|
||||
} else {
|
||||
System.err.println("Crate is empty");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void getObjectOutOfCrate(CreatureObject player,NGECore core) {
|
||||
synchronized(objectMutex) {
|
||||
if (this.getQuantity()>0){
|
||||
TangibleObject contentType = this.getContentType();
|
||||
if (contentType==null)
|
||||
return; // Bad, crate had no content type set
|
||||
TangibleObject contentItem = (TangibleObject) core.objectService.createObject(contentType.getTemplate(), player.getPlanet());
|
||||
contentItem.setOptions(resources.datatables.Options.SERIAL, true);
|
||||
int crc = this.getContentCRC();//CRC.StringtoCRC("object/tangible/food/crafted/shared_drink_alcohol.iff");
|
||||
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(contentItem.getObjectID(), player.getOrientation().x, player.getOrientation().y, player.getOrientation().z, player.getOrientation().w, player.getPosition().x, player.getPosition().y, player.getPosition().z, crc, (byte) 0);
|
||||
player.getClient().getSession().write(createObjectMsg.serialize());
|
||||
contentItem.sendBaselines(player.getClient()); // TANO 3,6,8,9 Baselines
|
||||
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(contentItem.getObjectID());
|
||||
player.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
|
||||
|
||||
long parentId = this.getParentId();
|
||||
SWGObject parentContainer = core.objectService.getObject(parentId);
|
||||
if (parentContainer==null)
|
||||
return; // crate has no parent, error
|
||||
UpdateContainmentMessage updateContainmentMessage= new UpdateContainmentMessage(contentItem.getObjectID(), parentContainer.getObjectID(), -1);
|
||||
player.getClient().getSession().write(updateContainmentMessage.serialize());
|
||||
|
||||
this.sendSetQuantity(player.getClient(),this.getQuantity()-1);
|
||||
if (this.getQuantity()==0){ // Crate is empty now, delete it
|
||||
parentContainer._remove(this);
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(this.getObjectID());
|
||||
player.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
core.objectService.destroyObject(this);
|
||||
}
|
||||
} else { // should give players the chance to clean faulty, empty crates from their containers
|
||||
long parentId = this.getParentId();
|
||||
SWGObject parentContainer = core.objectService.getObject(parentId);
|
||||
if (parentContainer==null)
|
||||
return; // crate has no parent, error
|
||||
parentContainer._remove(this);
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(this.getObjectID());
|
||||
player.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
core.objectService.destroyObject(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte getQuantity() {
|
||||
return contentObjectQuantity;
|
||||
}
|
||||
|
||||
public String getSerialNumber() {
|
||||
if (!contents.isEmpty()) {
|
||||
return contents.firstElement().getSerialNumber();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public int getContentCRC() {
|
||||
return contentCRC;
|
||||
}
|
||||
|
||||
}
|
||||
public void setContentCRC(int contentCRC) {
|
||||
synchronized(objectMutex) {
|
||||
this.contentCRC = contentCRC;
|
||||
}
|
||||
}
|
||||
|
||||
public void handleSplit(){
|
||||
|
||||
}
|
||||
|
||||
public void sendAddItem(Client destination) {
|
||||
destination.getSession().write(messageBuilder.buildDelta3());
|
||||
this.getAttributes().put("@obj_attr_n:factory_count", ""+this.getQuantity());
|
||||
this.getAttributes().put("@obj_attr_n:quantity", ""+this.getQuantity());
|
||||
//services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta");
|
||||
}
|
||||
|
||||
public void sendSetQuantity(Client destination,int quantity) {
|
||||
contentObjectQuantity = (byte) quantity;
|
||||
destination.getSession().write(messageBuilder.buildDelta3());
|
||||
this.getAttributes().put("@obj_attr_n:factory_count", ""+quantity);
|
||||
this.getAttributes().put("@obj_attr_n:quantity", ""+this.getQuantity());
|
||||
//services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
|
||||
if(destination == null || destination.getSession() == null) {
|
||||
System.out.println("NULL destination");
|
||||
return;
|
||||
}
|
||||
|
||||
destination.getSession().write(messageBuilder.buildBaseline3());
|
||||
destination.getSession().write(messageBuilder.buildBaseline6());
|
||||
destination.getSession().write(messageBuilder.buildBaseline8());
|
||||
destination.getSession().write(messageBuilder.buildBaseline9());
|
||||
|
||||
// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline3(),"FCYT3 Baseline");
|
||||
// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline6(),"FCYT6 Baseline");
|
||||
// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline8(),"FCYT8 Baseline");
|
||||
// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline9(),"FCYT9 Baseline");
|
||||
}
|
||||
|
||||
public void sendDelta3(Client destination) {
|
||||
destination.getSession().write(messageBuilder.buildDelta3());
|
||||
this.getAttributes().put("@obj_attr_n:factory_count", ""+this.getQuantity());
|
||||
//services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta");
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,6 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
import engine.resources.objects.SWGObject;
|
||||
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package resources.objects.installation;
|
||||
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.clients.Client;
|
||||
import engine.resources.scene.Planet;
|
||||
|
||||
@@ -21,11 +21,27 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.manufacture;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import resources.objects.intangible.IntangibleObject;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
@Persistent(version=0)
|
||||
public class ManufactureSchematicObject extends IntangibleObject {
|
||||
public class ManufactureSchematicObject extends IntangibleObject{
|
||||
|
||||
//@NotPersistent
|
||||
//private ManufactureSchematicMessageBuilder messageBuilder;
|
||||
|
||||
public ManufactureSchematicObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) {
|
||||
super(objectID, planet, position, orientation, template);
|
||||
//messageBuilder = new ManufactureSchematicMessageBuilder(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -161,6 +161,49 @@ public class TangibleMessageBuilder extends ObjectMessageBuilder {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildDelta3() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(getObject().getObjectID());
|
||||
buffer.putInt(0x54414E4F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(8);//buffer.putInt(8+6);
|
||||
|
||||
buffer.putShort((short) 2);
|
||||
buffer.putShort((short)8);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short) 0x21);
|
||||
buffer.put((byte)0);
|
||||
|
||||
// buffer.putShort((short) 0);
|
||||
// buffer.putFloat(4.0F);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildAssemblyDelta3() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(getObject().getObjectID());
|
||||
buffer.putInt(0x54414E4F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(8);//buffer.putInt(8+6);
|
||||
|
||||
buffer.putShort((short) 1);
|
||||
buffer.putShort((short)0x0B);
|
||||
buffer.putInt(0x000003E8); // ?
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
@@ -53,7 +53,7 @@ import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@Persistent(version=6)
|
||||
@Persistent(version=7)
|
||||
public class TangibleObject extends SWGObject {
|
||||
|
||||
// TODO: Thread safety
|
||||
@@ -486,13 +486,28 @@ public class TangibleObject extends SWGObject {
|
||||
}
|
||||
|
||||
public String getSerialNumber() {
|
||||
return serialNumber;
|
||||
return getStringAttribute("serial_number");
|
||||
}
|
||||
|
||||
public void setSerialNumber(String serialNumber) {
|
||||
this.serialNumber = serialNumber;
|
||||
setStringAttribute("serial_number", serialNumber);
|
||||
}
|
||||
|
||||
public void sendDelta3(Client destination) {
|
||||
destination.getSession().write(messageBuilder.buildDelta3());
|
||||
//tools.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"TANO3 Delta");
|
||||
}
|
||||
|
||||
public void sendAssemblyDelta3(Client destination) {
|
||||
destination.getSession().write(messageBuilder.buildAssemblyDelta3());
|
||||
//tools.CharonPacketUtils.printAnalysis(messageBuilder.buildAssemblyDelta3(),"TANO3 Assembly Delta");
|
||||
}
|
||||
|
||||
public void sendCustomizationDelta3(Client destination, String enteredName){
|
||||
destination.getSession().write(messageBuilder.buildCustomNameDelta(enteredName));
|
||||
//tools.CharonPacketUtils.printAnalysis(messageBuilder.buildCustomNameDelta(enteredName),"TANO3 Customization Delta");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
@@ -31,7 +31,7 @@ import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@Persistent(version=0)
|
||||
@Persistent(version=1)
|
||||
public class WeaponObject extends TangibleObject {
|
||||
|
||||
// TODO: Thread safety
|
||||
@@ -39,53 +39,24 @@ public class WeaponObject extends TangibleObject {
|
||||
@NotPersistent
|
||||
private WeaponMessageBuilder messageBuilder;
|
||||
|
||||
private float attackSpeed = 1;
|
||||
private float maxRange;
|
||||
|
||||
public WeaponObject(long objectID, Planet planet, String 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();
|
||||
calculateAttackSpeed();
|
||||
setStringAttribute("cat_wpn_damage.damage", "0-0");
|
||||
}
|
||||
|
||||
public WeaponObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) {
|
||||
super(objectID, planet, template, position, orientation);
|
||||
messageBuilder = new WeaponMessageBuilder(this);
|
||||
if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1);
|
||||
calculateRange();
|
||||
calculateAttackSpeed();
|
||||
setStringAttribute("cat_wpn_damage.damage", "0-0");
|
||||
}
|
||||
|
||||
|
||||
public WeaponObject() {
|
||||
super();
|
||||
messageBuilder = new WeaponMessageBuilder(this);
|
||||
//calculateRange();
|
||||
}
|
||||
|
||||
private void calculateRange() {
|
||||
|
||||
int weaponType = getWeaponType();
|
||||
|
||||
switch(weaponType) {
|
||||
|
||||
case 0: maxRange = 64; break;
|
||||
case 1: maxRange = 50; break;
|
||||
case 2: maxRange = 35; break;
|
||||
case 12: maxRange = 64; break;
|
||||
case 4: maxRange = 5; break;
|
||||
case 5: maxRange = 5; break;
|
||||
case 6: maxRange = 5; break;
|
||||
case 7: maxRange = 5; break;
|
||||
case 8: maxRange = 64; break;
|
||||
case 9: maxRange = 5; break;
|
||||
case 10: maxRange = 5; break;
|
||||
case 11: maxRange = 5; break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int getIncapTimer() {
|
||||
@@ -118,7 +89,9 @@ public class WeaponObject extends TangibleObject {
|
||||
}
|
||||
|
||||
public void setMaxDamage(int maxDamage) {
|
||||
|
||||
setStringAttribute("cat_wpn_damage.damage", String.valueOf(getMinDamage()) + "-" + String.valueOf(maxDamage));
|
||||
setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond());
|
||||
}
|
||||
|
||||
public int getMinDamage() {
|
||||
@@ -126,7 +99,9 @@ public class WeaponObject extends TangibleObject {
|
||||
}
|
||||
|
||||
public void setMinDamage(int minDamage) {
|
||||
|
||||
setStringAttribute("cat_wpn_damage.damage", String.valueOf(minDamage) + "-" + String.valueOf(getMaxDamage()));
|
||||
setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond());
|
||||
}
|
||||
|
||||
public int getElementalDamage() {
|
||||
@@ -135,14 +110,17 @@ public class WeaponObject extends TangibleObject {
|
||||
|
||||
public void setElementalDamage(int elementalDamage) {
|
||||
setIntAttribute("cat_wpn_damage.wpn_elemental_value", elementalDamage);
|
||||
setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond());
|
||||
}
|
||||
|
||||
public String getElementalType() {
|
||||
return getStringAttribute("cat_wpn_damage.wpn_elemental_type");
|
||||
if (getStringAttribute("cat_wpn_damage.wpn_elemental_type") != null )
|
||||
return getStringAttribute("cat_wpn_damage.wpn_elemental_type").replace("@obj_attr_n:elemental_", "");
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setElementalType(String elementalType) {
|
||||
setStringAttribute("cat_wpn_damage.wpn_elemental_type", elementalType);
|
||||
setStringAttribute("cat_wpn_damage.wpn_elemental_type", "@obj_attr_n:elemental_" + elementalType);
|
||||
}
|
||||
|
||||
public String getDamageType() {
|
||||
@@ -150,43 +128,26 @@ public class WeaponObject extends TangibleObject {
|
||||
}
|
||||
|
||||
public void setDamageType(String damageType) {
|
||||
setStringAttribute("cat_wpn_damage.wpn_damage_type", damageType);
|
||||
setStringAttribute("cat_wpn_damage.wpn_damage_type", "@obj_attr_n:armor_eff_" + damageType);
|
||||
}
|
||||
|
||||
public int getDamagePerSecond() {
|
||||
if (getElementalType() != null)
|
||||
if(getAttributes().containsKey("cat_wpn_damage.damage") && getAttributes().containsKey("cat_wpn_damage.wpn_attack_speed")) {
|
||||
|
||||
if (getElementalType() != null )
|
||||
return (int) (((getMaxDamage() + getElementalDamage() + getMinDamage() + getElementalDamage()) / 2 + getElementalDamage()) * (1 / getAttackSpeed()));
|
||||
else
|
||||
return (int) (((getMaxDamage() + getMinDamage()) / 2 ) * (1 / getAttackSpeed()));
|
||||
else
|
||||
return (int) (((getMaxDamage() + getMinDamage()) / 2 ) * (1 / getAttackSpeed()));
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getWeaponType() {
|
||||
|
||||
int weaponType = -1;
|
||||
|
||||
String template = getTemplate();
|
||||
|
||||
if(template == null)
|
||||
return weaponType;
|
||||
|
||||
if(template.contains("rifle")) weaponType = 0;
|
||||
if(template.contains("carbine")) weaponType = 1;
|
||||
if(template.contains("pistol")) weaponType = 2;
|
||||
if(template.contains("heavy")) weaponType = 12;
|
||||
if(template.contains("sword") || template.contains("baton")) weaponType = 4;
|
||||
if(template.contains("2h_sword") || template.contains("axe")) weaponType = 5;
|
||||
if(template.contains("unarmed")) weaponType = 6;
|
||||
if(template.contains("polearm") || template.contains("lance")) weaponType = 7;
|
||||
if(template.contains("thrown")) weaponType = 8;
|
||||
if(template.contains("lightsaber_one_handed")) weaponType = 9;
|
||||
if(template.contains("lightsaber_two_handed")) weaponType = 10;
|
||||
if(template.contains("lightsaber_polearm")) weaponType = 11;
|
||||
|
||||
if(weaponType == -1)
|
||||
weaponType = 6;
|
||||
|
||||
return weaponType;
|
||||
|
||||
return Integer.parseInt(getStringAttribute("cat_wpn_damage.wpn_category").replace("@obj_attr_n:wpn_category_", ""));
|
||||
}
|
||||
|
||||
public void setWeaponType(int weaponType) {
|
||||
setStringAttribute("cat_wpn_damage.wpn_category", "@obj_attr_n:wpn_category_" + weaponType);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -204,11 +165,15 @@ public class WeaponObject extends TangibleObject {
|
||||
}
|
||||
|
||||
public float getAttackSpeed() {
|
||||
return attackSpeed;
|
||||
return getFloatAttribute("cat_wpn_damage.wpn_attack_speed");
|
||||
}
|
||||
|
||||
public void setAttackSpeed(float attackSpeed) {
|
||||
this.attackSpeed = attackSpeed;
|
||||
if((int) attackSpeed != attackSpeed)
|
||||
setFloatAttribute("cat_wpn_damage.wpn_attack_speed", attackSpeed);
|
||||
else
|
||||
setIntAttribute("cat_wpn_damage.wpn_attack_speed", (int) attackSpeed);
|
||||
|
||||
}
|
||||
|
||||
public WeaponMessageBuilder getMessageBuilder() {
|
||||
@@ -216,11 +181,14 @@ public class WeaponObject extends TangibleObject {
|
||||
}
|
||||
|
||||
public float getMaxRange() {
|
||||
return maxRange;
|
||||
return Float.parseFloat(getStringAttribute("cat_wpn_damage.wpn_range").replace("0-", "").replace("m", ""));
|
||||
}
|
||||
|
||||
public void setMaxRange(float maxRange) {
|
||||
this.maxRange = maxRange;
|
||||
if((int) maxRange != maxRange)
|
||||
setStringAttribute("cat_wpn_damage.wpn_range", "0-" + String.valueOf(maxRange) + "m");
|
||||
else
|
||||
setStringAttribute("cat_wpn_damage.wpn_range", "0-" + String.valueOf((int) maxRange) + "m");
|
||||
}
|
||||
|
||||
public boolean isMelee() {
|
||||
@@ -244,29 +212,5 @@ public class WeaponObject extends TangibleObject {
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private void calculateAttackSpeed() {
|
||||
|
||||
int weaponType = getWeaponType();
|
||||
|
||||
switch(weaponType) {
|
||||
|
||||
case 0: attackSpeed = 0.8f; break;
|
||||
case 1: attackSpeed = 0.6f; break;
|
||||
case 2: attackSpeed = 0.4f; break;
|
||||
case 12: attackSpeed = 1; break;
|
||||
case 4: attackSpeed = 1; break;
|
||||
case 5: attackSpeed = 1; break;
|
||||
case 6: attackSpeed = 1; break;
|
||||
case 7: attackSpeed = 1; break;
|
||||
case 8: attackSpeed = 1; break;
|
||||
case 9: attackSpeed = 1; break;
|
||||
case 10: attackSpeed = 1; break;
|
||||
case 11: attackSpeed = 1; break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -331,13 +331,7 @@ public class CharacterService implements INetworkDispatch {
|
||||
object.addObjectToEquipList(appInventory);
|
||||
|
||||
WeaponObject defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", object.getPlanet());
|
||||
defaultWeapon.setDamageType("@obj_attr_n:armor_eff_kinetic");
|
||||
defaultWeapon.setStringAttribute("cat_wpn_damage.damage", "0-0");
|
||||
defaultWeapon.setMaxDamage(100);
|
||||
defaultWeapon.setMinDamage(50);
|
||||
|
||||
object.addObjectToEquipList(defaultWeapon);
|
||||
|
||||
object._add(defaultWeapon);
|
||||
object.setWeaponId(defaultWeapon.getObjectID());
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ import resources.objects.deed.Player_House_Deed;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.tool.SurveyTool;
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
import services.sui.SUIWindow;
|
||||
import services.sui.SUIService.ListBoxType;
|
||||
import services.sui.SUIWindow.SUICallback;
|
||||
@@ -89,13 +90,15 @@ public class DevService implements INetworkDispatch {
|
||||
suiOptions.put((long) 26, "Installations");
|
||||
suiOptions.put((long) 110, "Survey Devices");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 120, "House Deeds");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 125, "Crafting Tools");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 130, "Vehicle Deeds");
|
||||
//suiOptions.put((long) 120, "House Deeds");
|
||||
|
||||
break;
|
||||
case 3: // [Items] Weapons
|
||||
suiOptions.put((long) 30, "Jedi Weapons");
|
||||
suiOptions.put((long) 31, "Melee Weapons");
|
||||
suiOptions.put((long) 32, "Ranged Weapons");
|
||||
suiOptions.put((long) 33, "Heavy Weapons");
|
||||
break;
|
||||
case 4: // [Items] Misc Items
|
||||
suiOptions.put((long) 40, "Unity Ring");
|
||||
@@ -202,26 +205,35 @@ public class DevService implements INetworkDispatch {
|
||||
|
||||
// [Items] Weapons
|
||||
case 30: // Jedi Weapons
|
||||
TangibleObject lightsaber1 = (TangibleObject) core.objectService.createObject("object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff", planet);
|
||||
WeaponObject lightsaber1 = (WeaponObject) core.objectService.createObject("object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff", planet);
|
||||
lightsaber1.setIntAttribute("required_combat_level", 90);
|
||||
lightsaber1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1);
|
||||
lightsaber1.setStringAttribute("class_required", "Jedi");
|
||||
lightsaber1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
lightsaber1.setStringAttribute("cat_wpn_damage.damage", "689-1379");
|
||||
lightsaber1.setAttackSpeed(1);
|
||||
lightsaber1.setDamageType("energy");
|
||||
lightsaber1.setMaxRange(5);
|
||||
lightsaber1.setMinDamage(689);
|
||||
lightsaber1.setMaxDamage(1379);
|
||||
lightsaber1.setWeaponType(9);
|
||||
|
||||
TangibleObject lightsaber2 = (TangibleObject) core.objectService.createObject("object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff", planet);
|
||||
WeaponObject lightsaber2 = (WeaponObject) core.objectService.createObject("object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff", planet);
|
||||
lightsaber2.setIntAttribute("required_combat_level", 90);
|
||||
lightsaber2.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1);
|
||||
lightsaber2.setStringAttribute("class_required", "Jedi");
|
||||
lightsaber2.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
lightsaber2.setStringAttribute("cat_wpn_damage.damage", "689-1379");
|
||||
lightsaber2.setAttackSpeed(1);
|
||||
lightsaber2.setDamageType("energy");
|
||||
lightsaber2.setMaxRange(5);
|
||||
lightsaber2.setMinDamage(689);
|
||||
lightsaber2.setMaxDamage(1379);
|
||||
lightsaber2.setWeaponType(10);
|
||||
|
||||
TangibleObject lightsaber3 = (TangibleObject) core.objectService.createObject("object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff", planet);
|
||||
WeaponObject lightsaber3 = (WeaponObject) core.objectService.createObject("object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff", planet);
|
||||
lightsaber3.setIntAttribute("required_combat_level", 90);
|
||||
lightsaber3.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1);
|
||||
lightsaber3.setStringAttribute("class_required", "Jedi");
|
||||
lightsaber3.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
lightsaber3.setStringAttribute("cat_wpn_damage.damage", "689-1379");
|
||||
lightsaber3.setAttackSpeed(1);
|
||||
lightsaber3.setDamageType("energy");
|
||||
lightsaber3.setMaxRange(5);
|
||||
lightsaber3.setMinDamage(689);
|
||||
lightsaber3.setMaxDamage(1379);
|
||||
lightsaber3.setWeaponType(11);
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
@@ -234,43 +246,67 @@ public class DevService implements INetworkDispatch {
|
||||
inventory.add(lightsaber3);
|
||||
return;
|
||||
case 31: // Melee Weapons
|
||||
SWGObject sword1 = core.objectService.createObject("object/weapon/melee/sword/shared_sword_01.iff", planet);
|
||||
WeaponObject sword1 = (WeaponObject) core.objectService.createObject("object/weapon/melee/sword/shared_sword_01.iff", planet);
|
||||
sword1.setIntAttribute("required_combat_level", 90);
|
||||
sword1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1);
|
||||
sword1.setStringAttribute("class_required", "None");
|
||||
sword1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
sword1.setStringAttribute("cat_wpn_damage.damage", "1100-1200");
|
||||
sword1.setAttackSpeed(1);
|
||||
sword1.setMaxRange(5);
|
||||
sword1.setDamageType("kinetic");
|
||||
sword1.setMinDamage(1100);
|
||||
sword1.setMaxDamage(1200);
|
||||
sword1.setWeaponType(4);
|
||||
|
||||
inventory.add(sword1);
|
||||
return;
|
||||
case 32: // Ranged Weapons
|
||||
SWGObject rifle1 = core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_e11.iff", planet);
|
||||
WeaponObject rifle1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_e11.iff", planet);
|
||||
rifle1.setIntAttribute("required_combat_level", 90);
|
||||
rifle1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", (float) 0.8);
|
||||
rifle1.setStringAttribute("class_required", "None");
|
||||
rifle1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
rifle1.setStringAttribute("cat_wpn_damage.damage", "800-1250");
|
||||
rifle1.setAttackSpeed((float) 0.8);
|
||||
rifle1.setMaxRange(64);
|
||||
rifle1.setDamageType("energy");
|
||||
rifle1.setMinDamage(800);
|
||||
rifle1.setMaxDamage(1250);
|
||||
rifle1.setWeaponType(0);
|
||||
|
||||
inventory.add(rifle1);
|
||||
|
||||
SWGObject pistol = core.objectService.createObject("object/weapon/ranged/pistol/shared_pistol_cdef.iff", planet);
|
||||
WeaponObject carbine1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/carbine/shared_carbine_cdef.iff", planet);
|
||||
carbine1.setIntAttribute("required_combat_level", 90);
|
||||
carbine1.setAttackSpeed((float) 0.6);
|
||||
carbine1.setMaxRange(50);
|
||||
carbine1.setDamageType("energy");
|
||||
carbine1.setMinDamage(600);
|
||||
carbine1.setMaxDamage(937);
|
||||
carbine1.setWeaponType(1);
|
||||
|
||||
inventory.add(carbine1);
|
||||
|
||||
WeaponObject pistol = (WeaponObject) core.objectService.createObject("object/weapon/ranged/pistol/shared_pistol_cdef.iff", planet);
|
||||
pistol.setIntAttribute("required_combat_level", 90);
|
||||
pistol.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", (float) 0.4);
|
||||
pistol.setStringAttribute("class_required", "None");
|
||||
pistol.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
pistol.setStringAttribute("cat_wpn_damage.damage", "400-559");
|
||||
pistol.setAttackSpeed((float) 0.4);
|
||||
pistol.setMaxRange(35);
|
||||
pistol.setDamageType("energy");
|
||||
pistol.setMinDamage(400);
|
||||
pistol.setMaxDamage(625);
|
||||
pistol.setWeaponType(2);
|
||||
|
||||
inventory.add(pistol);
|
||||
return;
|
||||
|
||||
/* == Disabled until Elemental Damage is implemented. ==
|
||||
SWGObject heavy = core.objectService.createObject("object/weapon/ranged/heavy/shared_som_lava_cannon_generic.iff", planet);
|
||||
case 33:
|
||||
WeaponObject heavy = (WeaponObject) core.objectService.createObject("object/weapon/ranged/heavy/shared_som_lava_cannon_generic.iff", planet);
|
||||
heavy.setIntAttribute("required_combat_level", 90);
|
||||
heavy.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1);
|
||||
heavy.setStringAttribute("class_required", "Commando");
|
||||
heavy.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy");
|
||||
heavy.setStringAttribute("cat_wpn_damage.damage", "700-1400");
|
||||
|
||||
inventory.add(heavy);*/
|
||||
heavy.setStringAttribute("class_required", "Commando");
|
||||
heavy.setDamageType("kinetic");
|
||||
heavy.setMinDamage(700);
|
||||
heavy.setMaxDamage(1400);
|
||||
heavy.setMaxRange(64);
|
||||
heavy.setAttackSpeed(1);
|
||||
heavy.setElementalType("heat");
|
||||
heavy.setElementalDamage(200);
|
||||
heavy.setWeaponType(12);
|
||||
|
||||
inventory.add(heavy);
|
||||
return;
|
||||
case 40:
|
||||
TangibleObject ring = (TangibleObject) core.objectService.createObject("object/tangible/wearables/ring/shared_ring_s01.iff", planet);
|
||||
@@ -1203,7 +1239,10 @@ public class DevService implements INetworkDispatch {
|
||||
deed.setBMR(15);
|
||||
deed.setAttributes();
|
||||
inventory.add(deed);
|
||||
|
||||
case 125:
|
||||
TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet);
|
||||
genericCraftingTool.setCustomName("Generic Crafting Tool");
|
||||
inventory.add(genericCraftingTool);
|
||||
return;
|
||||
case 130:
|
||||
TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", planet);
|
||||
|
||||
@@ -278,14 +278,8 @@ public class EquipmentService implements INetworkDispatch {
|
||||
|
||||
private int getWeaponCriticalChance(CreatureObject actor, SWGObject item) {
|
||||
int weaponCriticalChance = 0;
|
||||
String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", item.getStringAttribute("cat_wpn_damage.wpn_category")).__call__().asString());
|
||||
|
||||
if(weaponCriticalSkillMod.contains(" "))
|
||||
weaponCriticalSkillMod.replace(" ", "");
|
||||
|
||||
if(weaponCriticalSkillMod.contains("-"))
|
||||
weaponCriticalSkillMod.replace("-", "");
|
||||
|
||||
String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", "weap_" + item.getStringAttribute("cat_wpn_damage.wpn_category").replace("@obj_attr_n:wpn_category_", "")).__call__().asString());
|
||||
|
||||
if(actor.getSkillMod(weaponCriticalSkillMod) != null)
|
||||
weaponCriticalChance = actor.getSkillModBase(weaponCriticalSkillMod);
|
||||
|
||||
|
||||
@@ -27,10 +27,7 @@ import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.DirectoryStream.Filter;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.attribute.BasicFileAttributeView;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -537,7 +537,11 @@ public class PlayerService implements INetworkDispatch {
|
||||
PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost");
|
||||
int level = 0;
|
||||
|
||||
if (player == null) {
|
||||
if (creature == null || player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (profession == null || profession.equals("")) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -562,6 +566,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
grantLevel(creature, level);
|
||||
|
||||
player.setProfessionIcon(Professions.get(profession));
|
||||
}
|
||||
|
||||
@@ -598,7 +603,11 @@ public class PlayerService implements INetworkDispatch {
|
||||
//core.equipmentService.unequip(creature, equipment);
|
||||
//}
|
||||
|
||||
core.buffService.clearBuffs(creature);
|
||||
for (Buff buff : creature.getBuffList()) {
|
||||
if (buff.isRemoveOnRespec()) {
|
||||
core.buffService.removeBuffFromCreature(creature, buff);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
String[] skills;
|
||||
|
||||
@@ -763,6 +763,15 @@ public class SimulationService implements INetworkDispatch {
|
||||
core.combatService.handleEndDuel(object, opponent, true);
|
||||
}
|
||||
}
|
||||
System.out.print(object.getAttachment("activeVehicleID"));
|
||||
|
||||
if(object.getAttachment("activeVehicleID") != null)
|
||||
{
|
||||
if(object.isMounted()) object.getMountedVehicle().unmount(object);
|
||||
long vehicleID = ((java.math.BigInteger) object.getAttachment("activeVehicleID")).longValue();
|
||||
core.objectService.destroyObject(vehicleID);
|
||||
object.setAttachment("activeVehicleID", null);
|
||||
}
|
||||
|
||||
/*
|
||||
object.createTransaction(core.getCreatureODB().getEnvironment());
|
||||
|
||||
@@ -167,8 +167,6 @@ public class SkillService implements INetworkDispatch {
|
||||
creature.addAbility(ability);
|
||||
}
|
||||
|
||||
// When leveling, add all new unadded expertise abilities
|
||||
// It's up to the script to not add abilities that are already added
|
||||
for (String expertiseName : creature.getSkills()) {
|
||||
if (expertiseName.startsWith("expertise")) {
|
||||
if (FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) {
|
||||
|
||||
@@ -51,7 +51,6 @@ import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.intangible.IntangibleObject;
|
||||
import resources.objects.manufacture.ManufactureSchematicObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import protocol.swg.ClientIdMsg;
|
||||
import protocol.swg.auctionManagerClientListener.AuctionQueryHeadersMessage;
|
||||
import protocol.swg.auctionManagerClientListener.AuctionQueryHeadersResponseMessage;
|
||||
import protocol.swg.auctionManagerClientListener.BidAuctionMessage;
|
||||
@@ -59,7 +58,6 @@ import protocol.swg.auctionManagerClientListener.BidAuctionResponseMessage;
|
||||
import protocol.swg.auctionManagerClientListener.CancelLiveAuctionMessage;
|
||||
import protocol.swg.auctionManagerClientListener.CancelLiveAuctionResponseMessage;
|
||||
import protocol.swg.auctionManagerClientListener.CommoditiesItemTypeListResponse;
|
||||
import protocol.swg.auctionManagerClientListener.CommoditiesResourceTypeListResponse;
|
||||
import protocol.swg.auctionManagerClientListener.CreateAuctionMessage;
|
||||
import protocol.swg.auctionManagerClientListener.GetAuctionDetails;
|
||||
import protocol.swg.auctionManagerClientListener.GetAuctionDetailsResponse;
|
||||
|
||||
@@ -24,7 +24,6 @@ package services.chat;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
@@ -41,7 +40,6 @@ import engine.resources.config.Config;
|
||||
import engine.resources.config.DefaultConfig;
|
||||
import engine.resources.database.ObjectDatabase;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
@@ -51,7 +49,6 @@ import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import protocol.swg.AddIgnoreMessage;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.chat.ChatCreateRoom;
|
||||
import protocol.swg.chat.ChatDeletePersistentMessage;
|
||||
import protocol.swg.chat.ChatEnterRoomById;
|
||||
import protocol.swg.chat.ChatFriendsListUpdate;
|
||||
@@ -59,7 +56,6 @@ import protocol.swg.chat.ChatInstantMessageToCharacter;
|
||||
import protocol.swg.chat.ChatInstantMessagetoClient;
|
||||
import protocol.swg.chat.ChatOnAddFriend;
|
||||
import protocol.swg.chat.ChatOnChangeFriendStatus;
|
||||
import protocol.swg.chat.ChatOnCreateRoom;
|
||||
import protocol.swg.chat.ChatOnEnteredRoom;
|
||||
import protocol.swg.chat.ChatOnSendInstantMessage;
|
||||
import protocol.swg.chat.ChatOnSendPersistentMessage;
|
||||
@@ -70,7 +66,6 @@ import protocol.swg.chat.ChatRequestPersistentMessage;
|
||||
import protocol.swg.chat.ChatRoomList;
|
||||
import protocol.swg.chat.ChatRoomMessage;
|
||||
import protocol.swg.chat.ChatSendToRoom;
|
||||
import protocol.swg.chat.ChatServerStatus;
|
||||
import protocol.swg.chat.ChatSystemMessage;
|
||||
import protocol.swg.objectControllerObjects.PlayerEmote;
|
||||
import protocol.swg.objectControllerObjects.SpatialChat;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
******************************************************************************/
|
||||
package services.command;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Map;
|
||||
import java.util.Vector;
|
||||
@@ -584,6 +585,132 @@ public class CommandService implements INetworkDispatch {
|
||||
|
||||
});
|
||||
|
||||
objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_FILLSLOT, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Client client = core.getClient(session);
|
||||
|
||||
if(client == null) {
|
||||
System.out.println("NULL Client");
|
||||
return;
|
||||
}
|
||||
|
||||
CommandEnqueue commandEnqueue = new CommandEnqueue();
|
||||
CreatureObject actor = (CreatureObject) client.getParent();
|
||||
SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID());
|
||||
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// for (byte b : data.array()) {
|
||||
// sb.append(String.format("%02X ", b));
|
||||
// }
|
||||
// System.out.println(sb.toString());
|
||||
|
||||
// 05 00 46 5E CE 80 83 00 00 00 07 01 00 00 72 14
|
||||
// 09 00 00 00 00 00 00 00 00 00 04 2A 09 00 00 00
|
||||
// 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00
|
||||
// 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
|
||||
long playerId = data.getLong();
|
||||
data.getInt(); // 00 00 00 00
|
||||
long ingredientId = data.getLong();
|
||||
int slotNumber = data.getInt();
|
||||
int option = data.getInt();
|
||||
byte sequence = data.get();
|
||||
//core.craftingService.handleCraftFillSlot(playerId, ingredientId, slotNumber, option, sequence);
|
||||
}
|
||||
});
|
||||
|
||||
objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_EMPTYSLOT, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Client client = core.getClient(session);
|
||||
|
||||
if(client == null) {
|
||||
System.out.println("NULL Client");
|
||||
return;
|
||||
}
|
||||
|
||||
CommandEnqueue commandEnqueue = new CommandEnqueue();
|
||||
CreatureObject actor = (CreatureObject) client.getParent();
|
||||
SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID());
|
||||
|
||||
long playerId = data.getLong();
|
||||
data.getInt(); // 00 00 00 00
|
||||
int slotNumber = data.getInt();
|
||||
long ingredientId = data.getLong();
|
||||
byte sequence = data.get();
|
||||
//core.craftingService.handleCraftEmptySlot(playerId, ingredientId, slotNumber, sequence);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_CUSTOMIZATION, new INetworkRemoteEvent() {
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Client client = core.getClient(session);
|
||||
if(client == null) {
|
||||
System.out.println("NULL Client");
|
||||
return;
|
||||
}
|
||||
|
||||
long playerId = data.getLong();
|
||||
data.getInt(); // 00 00 00 00 UTF-16LE
|
||||
|
||||
String enteredName = "";
|
||||
int length = 2*data.order(ByteOrder.LITTLE_ENDIAN).getInt();
|
||||
int bufferPosition = data.position();
|
||||
try
|
||||
{
|
||||
enteredName = new String(data.array(), bufferPosition, length, "UTF-16LE");
|
||||
}
|
||||
catch (UnsupportedEncodingException e)
|
||||
{
|
||||
System.err.println("UnsupportedEncodingException while reading crafting customization name ");
|
||||
}
|
||||
|
||||
System.err.println("enteredName " + enteredName);
|
||||
data.position(bufferPosition + length);
|
||||
|
||||
byte modelNumber = data.get();
|
||||
int schematicQuantity = data.getInt();
|
||||
byte customizationList = data.get();
|
||||
for (int i=0;i<(int)customizationList;i++){
|
||||
int customizationSlot = data.getInt();
|
||||
int customizationValue = data.getInt();
|
||||
}
|
||||
|
||||
//core.craftingService.handleCraftCustomization(playerId,enteredName,modelNumber,schematicQuantity,customizationList);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// 05 00 46 5E CE 80 83 00 00 00 5A 01 00 00 75 59
|
||||
// 0F 00 00 00 00 00 00 00 00 00 1D 00 00 00 63 00
|
||||
// 72 00 61 00 66 00 74 00 69 00 6E 00 67 00 3A 00
|
||||
// 5B 00 65 00 78 00 6F 00 5F 00 70 00 72 00 6F 00
|
||||
// 74 00 65 00 69 00 6E 00 5F 00 77 00 61 00 66 00
|
||||
// 65 00 72 00 73 00 5D 00 FF E8 03 00 00 00 00 00
|
||||
// 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
// 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
|
||||
// USTRING: CustomName
|
||||
// BYTE: ModelNumber
|
||||
// INT: SchematicQuantity
|
||||
// BYTE: CustomizationList
|
||||
// {
|
||||
// INT: CustomizationSlot
|
||||
// INT: CustomizationValue
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
|
||||
@@ -37,19 +37,14 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import main.NGECore;
|
||||
import protocol.swg.EnterStructurePlacementModeMessage;
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneDestroyObject;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.deed.Harvester_Deed;
|
||||
import resources.objects.deed.Player_House_Deed;
|
||||
import resources.objects.harvester.HarvesterObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import services.sui.SUIWindow;
|
||||
import services.sui.SUIWindow.SUICallback;
|
||||
import services.sui.SUIWindow.Trigger;
|
||||
import engine.resources.common.CRC;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
@@ -217,7 +212,6 @@ public class HousingService implements INetworkDispatch {
|
||||
Vector<String> returnList = new Vector<String>();
|
||||
returnList.add("List.lstList:SelectedRow");
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -225,7 +219,6 @@ public class HousingService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -255,7 +248,6 @@ public class HousingService implements INetworkDispatch {
|
||||
returnList.add("txtInput:LocalText");
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -294,7 +286,6 @@ public class HousingService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -341,7 +332,6 @@ public class HousingService implements INetworkDispatch {
|
||||
returnList.add("transaction.txtInputFrom:Text");
|
||||
returnList.add("transaction.txtInputTo:Text");
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -355,7 +345,6 @@ public class HousingService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -370,7 +359,6 @@ public class HousingService implements INetworkDispatch {
|
||||
returnList.add("txtInput:LocalText");
|
||||
final TangibleObject outerSurveyTool = target;
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.housingService.handleSetName((CreatureObject)owner, (TangibleObject)outerSurveyTool,returnList.get(0));
|
||||
@@ -429,7 +417,6 @@ public class HousingService implements INetworkDispatch {
|
||||
returnList.add("List.lstList:SelectedRow");
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
|
||||
@@ -100,14 +100,17 @@ import main.NGECore;
|
||||
import resources.objects.Delta;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.cell.CellObject;
|
||||
import resources.objects.craft.DraftSchematic;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.deed.Harvester_Deed;
|
||||
import resources.objects.deed.Player_House_Deed;
|
||||
import resources.objects.factorycrate.FactoryCrateObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import resources.objects.guild.GuildObject;
|
||||
import resources.objects.harvester.HarvesterObject;
|
||||
import resources.objects.installation.InstallationObject;
|
||||
import resources.objects.intangible.IntangibleObject;
|
||||
import resources.objects.manufacture.ManufactureSchematicObject;
|
||||
import resources.objects.mission.MissionObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
@@ -388,6 +391,18 @@ public class ObjectService implements INetworkDispatch {
|
||||
|
||||
object = new ResourceContainerObject(objectID, planet, Template, position, orientation);
|
||||
|
||||
} else if(Template.startsWith("object/factory/shared_factory_crate")) {
|
||||
|
||||
object = new FactoryCrateObject(objectID, planet, Template, position, orientation);
|
||||
|
||||
} else if(Template.startsWith("object/draft_schematic")) {
|
||||
|
||||
object = new DraftSchematic(objectID, planet, Template, position, orientation);
|
||||
|
||||
} else if(Template.startsWith("object/manufacture_schematic")) {
|
||||
|
||||
object = new ManufactureSchematicObject(objectID, planet, Template, position, orientation);
|
||||
|
||||
} else if(Template.startsWith("object/installation/mining_ore/construction")) {
|
||||
|
||||
float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f;
|
||||
@@ -658,10 +673,24 @@ public class ObjectService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
public CreatureObject getCreatureFromDB(long objectId) {
|
||||
return core.getCreatureODB().get(new Long(objectId), Long.class, CreatureObject.class);
|
||||
CreatureObject object = core.getCreatureODB().get(new Long(objectId), Long.class, CreatureObject.class);
|
||||
|
||||
if (object != null && getObject(object.getObjectID()) == null) {
|
||||
loadServerTemplate(object);
|
||||
|
||||
object.viewChildren(object, true, true, new Traverser() {
|
||||
|
||||
public void process(SWGObject child) {
|
||||
loadServerTemplate(child);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
private long generateObjectID() {
|
||||
public long generateObjectID() {
|
||||
/*Random random = new Random();
|
||||
|
||||
long objectID = random.nextInt();
|
||||
|
||||
@@ -43,7 +43,6 @@ import protocol.swg.EnterStructurePlacementModeMessage;
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneDestroyObject;
|
||||
import protocol.swg.SceneEndBaselines;
|
||||
import protocol.swg.objectControllerObjects.CommandEnqueue;
|
||||
import main.NGECore;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.common.CRC;
|
||||
@@ -272,7 +271,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
returnList.add("List.lstList:SelectedRow");
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -319,7 +317,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
returnList.add("transaction.txtInputFrom:Text");
|
||||
returnList.add("transaction.txtInputTo:Text");
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -334,7 +331,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -351,7 +347,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
returnList.add("txtInput:LocalText");
|
||||
final TangibleObject outerSurveyTool = target;
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.harvesterService.handleSetName((CreatureObject)owner, (TangibleObject)outerSurveyTool,returnList.get(0));
|
||||
@@ -399,7 +394,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
Vector<String> returnList = new Vector<String>();
|
||||
returnList.add("List.lstList:SelectedRow");
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -407,7 +401,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -438,7 +431,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
returnList.add("txtInput:LocalText");
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -480,7 +472,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
@@ -540,7 +531,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
returnList.add("transaction.txtInputFrom:Text");
|
||||
returnList.add("transaction.txtInputTo:Text");
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -552,7 +542,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
core.suiService.closeSUIWindow(owner, 0);
|
||||
|
||||
@@ -47,7 +47,6 @@ import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
import services.ai.AIActor;
|
||||
import services.ai.LairActor;
|
||||
import engine.resources.container.CreatureContainerPermissions;
|
||||
import engine.resources.container.StaticContainerPermissions;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
|
||||
Reference in New Issue
Block a user