This commit is contained in:
Waverunner
2014-04-10 20:04:02 -04:00
71 changed files with 3476 additions and 11 deletions
+10
View File
@@ -0,0 +1,10 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
core.harvesterService.handleHarvesterActivateCommand(actor, target, commandString)
return
+10
View File
@@ -0,0 +1,10 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString)
return
@@ -0,0 +1,11 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
actor.sendSystemMessage('handleEmptyHarvester', 0)
core.harvesterService.handleEmptyHarvester(actor, target, commandString)
return
@@ -0,0 +1,10 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
core.harvesterService.handleHarvesterSelectResourceCommand(actor, target, commandString)
return
+10
View File
@@ -0,0 +1,10 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
core.harvesterService.handlePermissionListModify(actor, target, commandString)
return
+7 -1
View File
@@ -1,4 +1,5 @@
import sys
import resources.objects.deed.Harvester_Deed
def setup():
return
@@ -8,7 +9,12 @@ def run(core, actor, target, commandString):
deedId = long(cmdArgs[0])
deed = core.objectService.getObject(deedId)
if (actor.getAttachment('UsingHarvesterDeed') == '1'):
actor.setAttachment('UsingHarvesterDeed', '0');
core.harvesterService.handlePlaceStructureCommand(actor, target, commandString)
return
positionX = float(cmdArgs[1])
positionZ = float(cmdArgs[2])
#positionY = core.terrainService.getHeight(actor.getPlanetId(), positionX, positionZ) + 2
+10
View File
@@ -0,0 +1,10 @@
import sys
def setup():
return
def run(core, actor, target, commandString):
core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'generator')
object.setHarvester_type(5)
object.setMaintenanceCost(30)
object.setGenerator(1)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'generator')
object.setHarvester_type(5)
object.setMaintenanceCost(30)
object.setGenerator(1)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'generator')
object.setHarvester_type(5)
object.setMaintenanceCost(30)
object.setGenerator(1)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'generator')
object.setHarvester_type(5)
object.setMaintenanceCost(30)
object.setGenerator(1)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'generator')
object.setHarvester_type(5)
object.setMaintenanceCost(20)
object.setGenerator(1)
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(3)
object.setPowerCost(25);
object.setMaintenanceCost(16);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(3)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(3)
object.setPowerCost(75);
object.setMaintenanceCost(90);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(3)
object.setPowerCost(100);
object.setMaintenanceCost(120);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(1)
object.setPowerCost(25);
object.setMaintenanceCost(16);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(1)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(1)
object.setPowerCost(75);
object.setMaintenanceCost(90);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(1)
object.setPowerCost(100);
object.setMaintenanceCost(120);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(4)
object.setPowerCost(25);
object.setMaintenanceCost(16);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(4)
object.setPowerCost(100);
object.setMaintenanceCost(120);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(4)
object.setPowerCost(75);
object.setMaintenanceCost(90);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(4)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(0)
object.setPowerCost(100);
object.setMaintenanceCost(120);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(0)
object.setPowerCost(75);
object.setMaintenanceCost(90);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(0)
object.setPowerCost(25);
object.setMaintenanceCost(16);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(0)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(2)
object.setPowerCost(25);
object.setMaintenanceCost(16);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(2)
object.setPowerCost(100);
object.setMaintenanceCost(120);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(2)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,8 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvester')
object.setHarvester_type(2)
object.setPowerCost(60);
object.setMaintenanceCost(60);
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff')
object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm.iff')
object.setLotRequirement(1)
object.setBMR(16)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff')
object.setLotRequirement(3)
object.setBMR(120)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff')
object.setLotRequirement(1)
object.setBMR(90)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff')
object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff')
object.setLotRequirement(1)
object.setBMR(60)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff')
object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff')
object.setLotRequirement(1)
object.setBMR(16)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff')
object.setLotRequirement(3)
object.setBMR(120)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff')
object.setLotRequirement(1)
object.setBMR(90)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff')
object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff')
object.setLotRequirement(1)
object.setBMR(60)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff')
object.setLotRequirement(1)
object.setBMR(16)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff')
object.setLotRequirement(3)
object.setBMR(120)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff')
object.setLotRequirement(1)
object.setBMR(90)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff')
object.setLotRequirement(1)
object.setBMR(60)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff')
object.setLotRequirement(1)
object.setBMR(16)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff')
object.setLotRequirement(3)
object.setBMR(120)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff')
object.setLotRequirement(1)
object.setBMR(90)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff')
object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff')
object.setLotRequirement(1)
object.setBMR(60)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_elite.iff')
object.setLotRequirement(3)
object.setBMR(120)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff')
object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff')
object.setLotRequirement(1)
object.setBMR(90)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff')
object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff')
object.setLotRequirement(1)
object.setBMR(16)
return
@@ -1,4 +1,9 @@
import sys
def setup(core, object):
object.setAttachment('radial_filename', 'harvesterDeed')
object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff')
object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff')
object.setLotRequirement(1)
object.setBMR(60)
return
+53
View File
@@ -0,0 +1,53 @@
from resources.common import RadialOptions
from protocol.swg import ResourceListForSurveyMessage
from services.sui.SUIService import MessageBoxType
from services.SurveyService import createSurveyRangeSUIWindow
from services.sui.SUIWindow import Trigger
from java.util import Vector
import sys
def createRadial(core, owner, target, radials):
#(byte parentId, short optionId, byte optionType, String description)
radials.clear()
radials.add(RadialOptions(0, 7, 0, 'Examine'))
radials.add(RadialOptions(0, 78, 0, '@player_structure:management'))
radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions'))
radials.add(RadialOptions(2, 118, 0, '@harvester:manage'))
radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy'))
radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status'))
radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay'))
radials.add(RadialOptions(2, 50, 0, '@base_player:set_name'))
radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_admin'))
radials.add(RadialOptions(3, 123, 0, '@player_structure:permissions'))
return
def handleSelection(core, owner, target, option):
if option == 118 and target:
if owner is not None:
core.harvesterService.handleOperateMachinery(owner,target)
return
if option == 128:
if owner is not None:
core.harvesterService.createDestroySUIPage(owner,target)
return
if option == 124:
if owner is not None:
core.harvesterService.createStatusSUIPage(owner,target)
return
if option == 129:
if owner is not None:
core.harvesterService.createPayMaintenanceSUIPage(owner,target)
return
if option == 50:
if owner is not None:
core.harvesterService.createRenameSUIPage(owner,target)
return
if option == 121:
if owner is not None:
core.harvesterService.handlePermissionAdmin(owner,target)
return
if option == 123:
if owner is not None:
core.harvesterService.handlePermissionHopper(owner,target)
return
+58
View File
@@ -0,0 +1,58 @@
from resources.common import RadialOptions
from protocol.swg import ResourceListForSurveyMessage
from services.sui.SUIService import MessageBoxType
from services.SurveyService import createSurveyRangeSUIWindow
from services.sui.SUIWindow import Trigger
from java.util import Vector
import sys
def createRadial(core, owner, target, radials):
#(byte parentId, short optionId, byte optionType, String description)
radials.clear()
radials.add(RadialOptions(0, 7, 0, 'Examine'))
radials.add(RadialOptions(0, 78, 0, '@player_structure:management'))
radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions'))
radials.add(RadialOptions(2, 118, 0, '@harvester:manage'))
radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy'))
radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status'))
radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay'))
radials.add(RadialOptions(2, 50, 0, '@base_player:set_name'))
radials.add(RadialOptions(2, 51, 0, '@player_structure:management_power'))
radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_admin'))
radials.add(RadialOptions(3, 123, 0, '@player_structure:permissions'))
return
def handleSelection(core, owner, target, option):
if option == 118 and target:
if owner is not None:
core.harvesterService.handleOperateMachinery(owner,target)
return
if option == 128:
if owner is not None:
core.harvesterService.createDestroySUIPage(owner,target)
return
if option == 124:
if owner is not None:
core.harvesterService.createStatusSUIPage(owner,target)
return
if option == 129:
if owner is not None:
core.harvesterService.createPayMaintenanceSUIPage(owner,target)
return
if option == 50:
if owner is not None:
core.harvesterService.createRenameSUIPage(owner,target)
return
if option == 51:
if owner is not None:
core.harvesterService.handleDepositPower(owner,target)
return
if option == 121:
if owner is not None:
core.harvesterService.handlePermissionAdmin(owner,target)
return
if option == 123:
if owner is not None:
core.harvesterService.handlePermissionHopper(owner,target)
return
+23
View File
@@ -0,0 +1,23 @@
from resources.common import RadialOptions
import sys
def createRadial(core, owner, target, radials):
radials.clear()
radials.add(RadialOptions(0, 21, 1, 'Use Deed'))
#radials.add(RadialOptions(0, 7, 1, '111111'))
#radials.add(RadialOptions(0, 15, 1, ''))
#radials.add(RadialOptions(0, 61, 1, ''))
return
def handleSelection(core, owner, target, option):
if option == 21 and target:
owner.setAttachment('UsingHarvesterDeed', '1');
core.harvesterService.enterStructurePlacementMode(target,owner)
if option == 61 and target:
object5 = core.harvesterService.constructionSite(owner,target)
core.objectService.useObject(owner, target)
if option == 15 and target:
core.objectService.destroyObject(target)
return
+21
View File
@@ -0,0 +1,21 @@
from resources.common import RadialOptions
from protocol.swg import ResourceListForSurveyMessage
from services.sui.SUIService import MessageBoxType
from services.SurveyService import createSurveyRangeSUIWindow
from services.sui.SUIWindow import Trigger
from java.util import Vector
import sys
def createRadial(core, owner, target, radials):
#(byte parentId, short optionId, byte optionType, String description)
radials.clear()
radials.add(RadialOptions(0, 7, 0, 'Examine'))
radials.add(RadialOptions(0, 78, 0, '@player_structure:management'))
radials.add(RadialOptions(2, 118, 0, '@harvester:manage'))
return
def handleSelection(core, owner, target, option):
if option == 118 and target:
if owner is not None:
core.harvesterService.handleOperateMachinery(owner,target)
return
+3
View File
@@ -84,6 +84,7 @@ import services.LoginService;
import services.map.MapService;
import services.object.ObjectService;
import services.object.UpdateService;
import services.resources.HarvesterService;
import services.resources.ResourceService;
import services.retro.RetroService;
import services.spawn.SpawnService;
@@ -180,6 +181,7 @@ public class NGECore {
public HousingService housingService;
public LootService lootService;
public HarvesterService harvesterService;
// Login Server
@@ -298,6 +300,7 @@ public class NGECore {
conversationService = new ConversationService(this);
housingService = new HousingService(this);
lootService = new LootService(this);
harvesterService = new HarvesterService(this);
if (config.keyExists("JYTHONCONSOLE.PORT")) {
int jythonPort = config.getInt("JYTHONCONSOLE.PORT");
@@ -42,5 +42,6 @@ public class ObjControllerOpcodes {
public static final int STOP_NPC_CONVERSATION = 0xDE000000;
public static final int NPC_CONVERSATION_OPTIONS = 0xE0000000;
public static final int SET_PROFESSION_TEMPLATE = 0x5C040000;
public static final int RESOURCE_EMPTY_HOPPER = 0xED000000;
}
+37
View File
@@ -0,0 +1,37 @@
/*******************************************************************************
* 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.deed;
import engine.resources.scene.Planet;
import engine.resources.scene.Point3D;
import engine.resources.scene.Quaternion;
import resources.objects.tangible.TangibleObject;
/**
* @author Charon
*/
public class Deed extends TangibleObject {
public Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
super(objectID, planet, template, position, orientation);
}
}
@@ -0,0 +1,121 @@
/*******************************************************************************
* 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.deed;
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 Harvester_Deed extends Deed {
private String name;
private String structureTemplate;
private String constructorTemplate;
private int outputHopperCapacity=0;
private int BER=0;
private int BMR=0;
private int surplusMaintenance=0;
private int surplusPower=0;
private int lotRequirement;
public Harvester_Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
super(objectID, planet, template, position, orientation);
}
public int getOutputHopperCapacity() {
return outputHopperCapacity;
}
public void setOutputHopperCapacity(int outputHopperCapacity) {
this.outputHopperCapacity = outputHopperCapacity;
}
public int getBER() {
return BER;
}
public void setBER(int bER) {
this.BER = bER;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStructureTemplate() {
return structureTemplate;
}
public void setStructureTemplate(String structureTemplate) {
this.structureTemplate = structureTemplate;
}
public int getLotRequirement() {
return lotRequirement;
}
public void setLotRequirement(int lotRequirement) {
this.lotRequirement = lotRequirement;
}
public String getConstructorTemplate() {
return constructorTemplate;
}
public void setConstructorTemplate(String constructorTemplate) {
this.constructorTemplate = constructorTemplate;
}
public int getBMR() {
return BMR;
}
public void setBMR(int BMR) {
this.BMR = BMR;
}
public int getSurplusMaintenance() {
return surplusMaintenance;
}
public void setSurplusMaintenance(int surplusMaintenance) {
this.surplusMaintenance = surplusMaintenance;
}
public int getSurplusPower() {
return surplusPower;
}
public void setSurplusPower(int surplusPower) {
this.surplusPower = surplusPower;
}
public void setAttributes() {
this.getAttributes().put("@obj_attr_n:volume", "1");
this.getAttributes().put("@obj_attr_n:examine_maintenance_rate", ""+this.getBMR() + "/hour");
if (this.getSurplusMaintenance()>0)
this.getAttributes().put("@obj_attr_n:examine_maintenance", ""+this.getSurplusMaintenance());
//this.getAttributes().put("@obj_attr_n:energy_maintenance", "0");
if (this.getSurplusPower()>0)
this.getAttributes().put("@obj_attr_n:examine_power", ""+this.getSurplusPower());
this.getAttributes().put("@obj_attr_n:examine_hoppersize", ""+this.getOutputHopperCapacity());
this.getAttributes().put("@obj_attr_n:examine_extractionrate", ""+this.getBER());
}
}
@@ -21,6 +21,807 @@
******************************************************************************/
package resources.objects.harvester;
public class HarvesterMessageBuilder {
import java.nio.ByteOrder;
import java.util.Vector;
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;
/**
* @author Charon
*/
public class HarvesterMessageBuilder extends ObjectMessageBuilder{
public HarvesterMessageBuilder(HarvesterObject harvesterObject) {
setObject(harvesterObject);
}
public IoBuffer buildBaseline3() {
HarvesterObject building = (HarvesterObject) object;
IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short) 0x0D);
buffer.putFloat(building.getComplexity());
buffer.put(getAsciiString(building.getStfFilename()));
buffer.putInt(0);
buffer.put(getAsciiString(building.getStfName()));
buffer.putInt(0);
buffer.putInt(0xFF);
//buffer.putInt(0x64);
buffer.putInt(0);
buffer.putInt(0);
buffer.putShort((short) 0);
buffer.putInt(0);
buffer.putInt(0);
// buffer.putInt(16777216);
buffer.putInt(0x100);
buffer.putInt(0);
buffer.putInt(64);
buffer.putInt(0x201C);
buffer.put((byte) 1);
int size = buffer.position();
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("BUIO", (byte) 3, buffer, size);
return buffer;
}
public IoBuffer buildHINO3Delta(HarvesterObject harvester,byte state) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)3);
buffer.putInt(0xB);
buffer.putShort((short)2);
buffer.putShort((short)8);
buffer.put((byte)1);
buffer.putShort((short)1);
buffer.put((byte)0);
buffer.putShort((short)0xD);
buffer.put(state);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON
// 0010: 49 48 03 0B 00 00 00 02 00 08 00 01 01 00 00 0D IH..............
// 0020: 00 01
public IoBuffer buildHINO3Delta2(HarvesterObject harvester,byte state) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)3);
buffer.putInt(0xB);
buffer.putShort((short)2);
buffer.putShort((short)8);
buffer.put((byte)0);
buffer.putShort((short)1);
buffer.put((byte)0);
buffer.putShort((short)0xD);
buffer.put(state);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildBaseline6() {
HarvesterObject building = (HarvesterObject) object;
IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short) 8);
buffer.putInt(0x43);
buffer.put(getAsciiString(building.getDetailFilename()));
buffer.putInt(0);
buffer.put(getAsciiString(building.getDetailName()));
buffer.putInt(0);
buffer.put((byte) 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);
int size = buffer.position();
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("BUIO", (byte) 6, buffer, size);
return buffer;
}
public IoBuffer buildHINO7Delta(HarvesterObject harvester,byte state) {
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
int hopperContentSize = outputHopperContent.size();
int iHopperList = 1;
if (hopperContentSize==0) {
iHopperList = 0;
}
//int sizeP = 30 + 15*hopperContentSize;
int sizeP = 30-2-4-4;
//System.out.println("sizeP " + sizeP);
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(sizeP);
// dOut.writeInt(0x2D);
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put(state);
buffer.putShort((short)9);
buffer.putFloat(harvester.getActualExtractionRate());
buffer.putShort((short)0x0C);
buffer.put(harvester.getUpdateCount());
// buffer.putShort((short)0x0D);
// buffer.putInt(iHopperList);
// buffer.putInt(harvester.getResourceUpdateCount());
int sumOfHopper = 0;
int i = 0;
sumOfHopper = 0;
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
for (ResourceContainerObject cont : outputHopper){
sumOfHopper += cont.getStackCount();
i++;
}
buffer.putShort((short)0x0A);
buffer.putInt(sumOfHopper);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7Delta2(HarvesterObject harvester,byte state) {
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
int hopperContentSize = outputHopperContent.size();
int iHopperList = 1;
if (hopperContentSize==0) {
iHopperList = 0;
}
int sizeP = 30 + 15*hopperContentSize;
//System.out.println("sizeP " + sizeP);
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(sizeP);
// dOut.writeInt(0x2D);
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put(state);
buffer.putShort((short)9);
buffer.putFloat(harvester.getActualExtractionRate());
buffer.putShort((short)0x0C);
buffer.put(harvester.getUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(iHopperList);
buffer.putInt(harvester.getResourceUpdateCount());
int sumOfHopper = 0;
byte i = 0;
for (ResourceContainerObject container : outputHopperContent){
buffer.putShort((short)harvester.getResourceUpdateCount());
buffer.put(i);
buffer.putLong(container.getReferenceID());
buffer.putInt(container.getStackCount());
sumOfHopper += container.getStackCount();
i++;
}
buffer.putShort((short)0x0A);
buffer.putInt(sumOfHopper);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
// 2 + 2 + 1 + 2 + 4 + 2 + 1 + 2 + 4 + 4 + (hoppersize* 2+1+8+4=15) + 2 + 4
// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON
// 0010: 49 48 07 2D 00 00 00 05 00 06 00 01 09 00 3F AE IH.-..........?.
// 0020: 2D 42 0C 00 02 0D 00 01 00 00 00 01 00 00 00 02 -B..............
// 0030: 00 00 5E C8 62 AB 41 00 00 00 CC F1 0A 40 0A 00 ..^.b.A......@..
// 0040: CC F1 0A 40 ...@
public IoBuffer buildHINO7EmptyHopperDelta(HarvesterObject harvester) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(21);
buffer.putShort((short)3);
buffer.putShort((short)0x0C);
buffer.put((byte)harvester.getResourceUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(0);
buffer.putInt(harvester.getResourceUpdateCount());
buffer.putShort((short)0x0A);
buffer.putFloat(harvester.getOutputHopperContent().size());
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7ExperimentalDelta(HarvesterObject harvester) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(0x18);
buffer.putShort((short)3);
buffer.putShort((short)0x0C);
buffer.put((byte)harvester.getResourceUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(1);
buffer.putInt(0x1E);
buffer.put((byte)0);
buffer.putShort((short)0);
buffer.putInt(harvester.getResourceUpdateCount());
buffer.putShort((short)0x0A);
buffer.putFloat(0); // since it's 0 outputhoppercontent
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
// 0000: 05 00 53 21 86 12 53 D0 AC 41 3F 00 00 00 4F 4E ..S!..S..A?...ON
// 0010: 49 48 07 18 00 00 00 03 00 0C 00 25 0D 00 01 00 IH.........%....
// 0020: 00 00 1E 00 00 00 00 00 00 0A 00 00 00 00 00 ...............
public IoBuffer buildHINO7ExperimentalDelta2(HarvesterObject harvester) {
int iHopperList = 0;
if (harvester.getOutputHopperContent().size() >= 1) {
iHopperList = 1;
}
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(36);
buffer.putShort((short)3);
buffer.putShort((short)0x0C);
buffer.put(harvester.getUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(iHopperList);
buffer.putInt(harvester.getResourceUpdateCount());
int i = 0;
int totalStackCount = 0;
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
for (ResourceContainerObject cont : outputHopper){
totalStackCount += cont.getStackCount();
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
buffer.put((byte)2);
buffer.putShort((short) i);
buffer.putLong(cont.getReferenceID());
buffer.putFloat((float)cont.getStackCount());
//System.out.println("TOTAL STACKCOUNT " + (float)cont.getStackCount());
}
i++;
}
buffer.putShort((short)0x0A);
buffer.putFloat((float)totalStackCount);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7ActivateDelta(HarvesterObject harvester) {
int iHopperList = 0;
if (harvester.getOutputHopperContent().size() >= 1) {
iHopperList = 1;
}
int factor = 0;
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
for (ResourceContainerObject cont : outputHopper){
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
factor = 1;
}
}
byte iHopperUpdateCounter = harvester.getResourceUpdateCount();
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(5+19+(15*factor));
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put((byte)1);
// 2 + 4 + 4 + 2 + 4 + (15*h) = 16 + 2 + 1 = 19
buffer.putShort((short)0x0C);
buffer.put(harvester.getUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(iHopperList);
buffer.putInt(iHopperUpdateCounter);
int totalStackCount = 0;
int i = 0;
for (ResourceContainerObject cont : outputHopper){
totalStackCount += cont.getStackCount();
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
buffer.put((byte)2);
buffer.putShort((short) i);
buffer.putLong(cont.getReferenceID());
buffer.putFloat((float)cont.getStackCount());
}
i++;
}
buffer.putShort((short)0x0A);
buffer.putFloat((float)totalStackCount);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7ActivateDelta2(HarvesterObject harvester) {
int iHopperList = 0;
if (harvester.getOutputHopperContent().size() >= 1) {
iHopperList = 1;
}
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(11);
buffer.putShort((short)2);
buffer.putShort((short)6);
buffer.put((byte)1);
buffer.putShort((short)9);
buffer.putFloat(harvester.getActualExtractionRate());
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
//
// 02 00 06 00 01 09 00 43 94 IH............C.
// 0020: 59 42 YB
public IoBuffer buildHINO7ActivateDelta2old(HarvesterObject harvester) {
int iHopperList = 0;
if (harvester.getOutputHopperContent().size() >= 1) {
iHopperList = 1;
}
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(5);
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put((byte)1);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7DeactivateDelta(HarvesterObject harvester) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(14);
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put((byte)0);
buffer.putShort((short)9);
buffer.putFloat(0);
buffer.putShort((short)0xC);
buffer.put((byte)5);
// new
// buffer.putShort((short)6);
// buffer.put((byte)0);
// buffer.putShort((short)9);
// buffer.put((byte)0);
// buffer.putShort((short)0xC);
// buffer.put((byte)5);
//
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7DeactivateDeltaold(HarvesterObject harvester) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(5);
buffer.putShort((short)5);
buffer.putShort((short)6);
buffer.put((byte)0);
// new
buffer.putShort((short)6);
buffer.put((byte)0);
buffer.putShort((short)9);
buffer.put((byte)0);
buffer.putShort((short)0xC);
buffer.put((byte)5);
//
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHINO7ClearDelta(HarvesterObject harvester) {
int iHopperList = 0;
if (harvester.getOutputHopperContent().size() >= 1) {
iHopperList = 1;
}
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x48494E4F);
buffer.put((byte)7);
buffer.putInt(36);
buffer.putShort((short)3);
buffer.putShort((short)0x0C);
buffer.put(harvester.getUpdateCount());
buffer.putShort((short)0x0D);
buffer.putInt(iHopperList);
buffer.putInt(harvester.getResourceUpdateCount());
buffer.put((byte)4);
buffer.putShort((short)0x0A);
buffer.putFloat((float)0.0F);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildDiscardResourceResponse(HarvesterObject harvester, byte actionMode, byte actionCounter,CreatureObject owner) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x80CE5E46);
buffer.putInt(0x0B);
buffer.putInt(0xEE);
buffer.putLong(owner.getObjectID());
buffer.putInt(0);
buffer.putInt(0xED);
buffer.put((byte)1);
buffer.put(actionCounter);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
//0000: 05 00 46 5E CE 80 0B 00 00 00 EE 00 00 00 62 5F ..F^..........b_
//0010: 02 15 00 00 01 00 00 00 00 00 ED 00 00 00 01 01 ................
// ^^ weird but works, should be zero allowed too
public IoBuffer buildBaseline8() {
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort((short) 0);
int size = buffer.position();
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("TANO", (byte) 8, buffer, size);
return buffer;
}
public IoBuffer buildBaseline9() {
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort((short) 0);
int size = buffer.position();
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("TANO", (byte) 9, buffer, size);
return buffer;
}
public IoBuffer buildHINOBaseline7(HarvesterObject harvester,Vector<GalacticResource> vSRD) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
int sizeP = 74;
buffer.putShort((short)5);
buffer.putInt(0x68A75F0C);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x4F4E4948);
buffer.put((byte)7);
int iResourceCount = vSRD.size();
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
int hopperContentSize = outputHopperContent.size();
float outputHopperCount = 0;
//y = a + 4x + 16x + 12z = a + 20x + 12z
sizeP += (iResourceCount * 4);
sizeP += (iResourceCount * 16);
sizeP += (hopperContentSize * 12);
for (int i = 0; i < iResourceCount; i++) {
sizeP += vSRD.get(i).getName().length();
sizeP += vSRD.get(i).getFileName().length();
}
buffer.putInt(sizeP);
for (ResourceContainerObject container : outputHopperContent){
outputHopperCount += container.getStackCount();
}
buffer.putShort((short)0x0F);
buffer.put((byte)1);
buffer.putInt(iResourceCount);
buffer.putInt(iResourceCount);
for (int i = 0; i < iResourceCount; i++) {
buffer.putLong(vSRD.get(i).getId());
}
buffer.putInt(iResourceCount);
buffer.putInt(iResourceCount);
for (int i = 0; i < iResourceCount; i++) {
buffer.putLong(vSRD.get(i).getId());
}
buffer.putInt(iResourceCount);
buffer.putInt(iResourceCount);
for (int i = 0; i < iResourceCount; i++) {
buffer.put(getAsciiString(vSRD.get(i).getName()));
}
buffer.putInt(iResourceCount);
buffer.putInt(iResourceCount);
for (int i = 0; i < iResourceCount; i++) {
buffer.put(getAsciiString(vSRD.get(i).getFileName()));
}
if (harvester.getSelectedHarvestResource() != null) {
buffer.putLong(harvester.getSelectedHarvestResource().getId());
} else {
buffer.putLong(0);
}
buffer.put(harvester.isActivated() ? (byte)1 : (byte)0);
buffer.putInt(harvester.getSpecRate()); // SPEC RATE buffer.putInt(harvester.getBER());
buffer.putFloat(harvester.getBER());
buffer.putFloat(harvester.getActualExtractionRate());
buffer.putFloat(outputHopperCount);
buffer.putInt(harvester.getOutputHopperCapacity());
buffer.put(harvester.getUpdateCount());
buffer.putInt(hopperContentSize);
buffer.putInt(0);
for (ResourceContainerObject container : outputHopperContent){
buffer.putLong(container.getReferenceID());
buffer.putFloat(container.getStackCount());
}
buffer.put(harvester.getStructuralCondition());
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildCustomNameDelta(HarvesterObject harvester, String customName) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
int sizeP = 8;
sizeP += 2*customName.length();
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(harvester.getObjectID());
buffer.putInt(0x54414E4F);
buffer.put((byte)3);
buffer.putInt(sizeP);
buffer.putShort((short)1);
buffer.putShort((short)2);
buffer.put(getUnicodeString(customName));
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildPermissionListCreate(HarvesterObject harvester, Vector<String> permissionList, String listName) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
int listSize = permissionList.size();
buffer.putShort((short)4);
buffer.putInt(0x52F364B8);
buffer.putInt(listSize);
for (String name : permissionList){
buffer.put(getUnicodeString(name));
}
//buffer.putInt(0x61);
buffer.putInt(0);
//buffer.putShort((short)0);
buffer.put(getUnicodeString(listName));
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
/*
0000: 04 00 B8 64 F3 52 01 00 00 00 06 00 00 00 63 00 ...d.R........c.
0010: 68 00 61 00 72 00 6F 00 6E 00 00 00 00 00 05 00 h.a.r.o.n.......
0020: 00 00 41 00 44 00 4D 00 49 00 4E 00 ..A.D.M.I.N.
*/
// Send this in response to the Radial Menu to manage harvesters,
// it is necessary to send this *before* the 07 Baseline!
//ResourceHarvesterActivatePageMessage (BD18C679)
public IoBuffer buildResourceHarvesterActivatePageMessage(HarvesterObject harvester) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)2);
buffer.putInt(0xBD18C679);
buffer.putLong(harvester.getObjectID());
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildHarvesterGetResourceData(HarvesterObject harvester,SWGObject owner,Vector<GalacticResource> planetResources) {
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x80CE5E46);
buffer.putInt(0x0B);
buffer.putInt(0x000000EA);
buffer.putLong(owner.getObjectID());
buffer.putInt(0);
buffer.putLong(harvester.getObjectID());
if (planetResources == null || planetResources.isEmpty()) {
buffer.putInt(0);
} else {
buffer.putInt(planetResources.size());
for (int i = 0; i < planetResources.size(); i++) {
float localConcentration = planetResources.get(i).deliverConcentrationForSurvey(owner.getPlanetId(), owner.getPosition().x, owner.getPosition().z);
buffer.putLong(planetResources.get(i).getId());
buffer.put(getAsciiString(planetResources.get(i).getName()));
buffer.put(getAsciiString(planetResources.get(i).getFileName()));
buffer.put((byte)localConcentration);
}
}
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).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
}
@Override
public void sendBaselines() {
}
}
@@ -21,11 +21,501 @@
******************************************************************************/
package resources.objects.harvester;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import main.NGECore;
import protocol.swg.SceneCreateObjectByCrc;
import protocol.swg.SceneDestroyObject;
import protocol.swg.SceneEndBaselines;
import protocol.swg.UpdatePVPStatusMessage;
import com.sleepycat.persist.model.Persistent;
import services.chat.WaypointAttachment;
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.installation.InstallationMessageBuilder;
import resources.objects.installation.InstallationObject;
import resources.objects.player.PlayerObject;
import resources.objects.resource.GalacticResource;
import resources.objects.resource.ResourceContainerObject;
import resources.objects.waypoint.WaypointObject;
import services.chat.Mail;
/**
* @author Charon
*/
@Persistent(version=0)
public class HarvesterObject extends InstallationObject {
private HarvesterMessageBuilder messageBuilder;
private InstallationMessageBuilder installationMessageBuilder;
public final static byte HARVESTER_TYPE_MINERAL = 0;
public final static byte HARVESTER_TYPE_CHEMICAL = 1;
public final static byte HARVESTER_TYPE_FLORA = 2;
public final static byte HARVESTER_TYPE_GAS = 3;
public final static byte HARVESTER_TYPE_WATER = 4;
public final static byte HARVESTER_TYPE_SOLAR = 5;
public final static byte HARVESTER_TYPE_WIND = 6;
public final static byte HARVESTER_TYPE_FUSION = 7;
public final static byte HARVESTER_TYPE_GEO = 8;
public String[] mineral_type_iff = new String[]{"object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff",
"object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff",
"object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff",
"object/installation/mining_ore/shared_mining_ore_harvester_elite.iff"};
public String[] chemical_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff",
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff",
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff",
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff"};
public String[] flora_type_iff = new String[]{"object/installation/mining_organic/shared_mining_organic_flora_farm.iff",
"object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff",
"object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff",
"object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff"};
public String[] water_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff",
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff",
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff",
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff"};
public String[] gas_type_iff = new String[]{"object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff",
"object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff",
"object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff",
"object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff"};
public String[] wind_type_iff = new String[]{"object/installation/generators/shared_power_generator_wind_style_1.iff"};
public String[] solar_type_iff = new String[]{"object/installation/generators/shared_power_generator_solar_style_1.iff"};
public String[] fusion_type_iff = new String[]{"object/installation/generators/shared_power_generator_fusion_style_1.iff"};
public String[] geo_type_iff = new String[]{"object/installation/generators/shared_power_generator_geothermal_style_1.iff"};
//for nothing "object/installation/generators/shared_power_generator_photo_bio_style_1.iff"
public byte harvester_type = 0;
public byte harvester_size = 0;
private Vector<ResourceContainerObject> outputHopperContent = new Vector<ResourceContainerObject>();
private int outputHopperCapacity = 0;
private int BER = 0;
private float maintenanceAmount = 0;
private float powerLevel = 0;
private int powerCost = 0;
private int maintenanceCost = 0;
private byte structuralCondition = 100;
private boolean activated = false;
private boolean generator = false;
private GalacticResource selectedHarvestResource;
private float selectedResourceConcentration;
private byte updateCount;
private byte resourceUpdateCount;
private Vector<String> adminList = new Vector<String>();
private Vector<String> hopperList = new Vector<String>();
private SWGObject owner;
private float currentHarvestedCountFloat=0.0F;
private String deedTemplate;
private int specRate;
public HarvesterObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
super(objectID, planet, template, position, orientation);
this.setConditionDamage(100);
messageBuilder = new HarvesterMessageBuilder(this);
installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this);
}
public int getBER() {
return BER;
}
public void setBER(int baseExtractionRate) {
this.BER = baseExtractionRate;
}
public float getActualExtractionRate() {
//float resourceDraw = (getBER() * getSelectedResourceConcentration()) / 400; // /100
float resourceDraw = 1.5F*(getBER() * getSelectedResourceConcentration()) / 100;
// BER * concentration * publish 27 bonus * profession buffs = AER
// 14* 0.83 * 1.5 * 1.05 = 18.3015 AER
return resourceDraw;
}
public int getSpecRate() {
return specRate;
}
public void setSpecRate(int specRate) {
this.specRate = specRate;
}
public GalacticResource getSelectedHarvestResource() {
return selectedHarvestResource;
}
public void setSelectedHarvestResource(GalacticResource selectedHarvestResource,CreatureObject owner) {
this.selectedHarvestResource = selectedHarvestResource;
setSelectedResourceConcentration(selectedHarvestResource.deliverConcentrationForSurvey(this.getPlanetId(), this.getPosition().x, this.getPosition().z));
owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var1((InstallationObject) this,selectedHarvestResource.getObjectId()));
owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var2((InstallationObject) this,selectedHarvestResource.getObjectId()));
}
public float getSelectedResourceConcentration() {
return selectedResourceConcentration;
}
private void setSelectedResourceConcentration(float selectedResourceConcentration) {
this.selectedResourceConcentration = selectedResourceConcentration;
}
public void activateHarvester(CreatureObject owner){
activated = true;
this.setOwner(owner);
owner.getClient().getSession().write(messageBuilder.buildHINO3Delta(this,(byte)1));
owner.getClient().getSession().write(messageBuilder.buildHINO7ActivateDelta2(this));
}
public void deactivateHarvester(CreatureObject owner){
activated = false;
owner.getClient().getSession().write(messageBuilder.buildHINO3Delta2(this,(byte)0));
owner.getClient().getSession().write(messageBuilder.buildHINO7DeactivateDelta(this));
}
public boolean isActivated(){
return this.activated;
}
public byte getHarvester_type() {
return harvester_type;
}
public void setHarvester_type(byte harvester_type) {
this.harvester_type = harvester_type;
}
public Vector<ResourceContainerObject> getOutputHopperContent() {
return outputHopperContent;
}
public void setOutputHopperContent(Vector<ResourceContainerObject> outputHopperContent) {
this.outputHopperContent = outputHopperContent;
}
public byte getStructuralCondition() {
return structuralCondition;
}
public void setStructuralCondition(byte structuralCondition) {
this.structuralCondition = structuralCondition;
}
public int getOutputHopperCapacity() {
return outputHopperCapacity;
}
public void setOutputHopperCapacity(int outputHopperCapacity) {
this.outputHopperCapacity = outputHopperCapacity;
}
public byte getUpdateCount() {
if (updateCount>254) updateCount = 0;
return updateCount++;
}
public byte getResourceUpdateCount() {
if (resourceUpdateCount>254) resourceUpdateCount = 0;
return resourceUpdateCount++;
}
public void setUpdateCount(byte updateCount) {
this.updateCount = updateCount;
}
public Vector<String> getAdminList() {
return adminList;
}
public void setAdminList(Vector<String> adminList) {
this.adminList = adminList;
}
public Vector<String> getHopperList() {
return hopperList;
}
public void setHopperList(Vector<String> hopperList) {
this.hopperList = hopperList;
}
public float getPowerLevel() {
return powerLevel;
}
public void setPowerLevel(float energyLevel) {
this.powerLevel = energyLevel;
}
public float getMaintenanceAmount() {
return maintenanceAmount;
}
public void setMaintenanceAmount(float maintenanceAmount) {
this.maintenanceAmount = maintenanceAmount;
}
public int getPowerCost() {
return powerCost;
}
public void setPowerCost(int powerCost) {
this.powerCost = powerCost;
}
public int getMaintenanceCost() {
return maintenanceCost;
}
public void setMaintenanceCost(int maintenanceCost) {
this.maintenanceCost = maintenanceCost;
}
public float getCurrentHarvestedCountFloat() {
return currentHarvestedCountFloat;
}
public void setCurrentHarvestedCountFloat(float currentHarvestedCountFloat) {
this.currentHarvestedCountFloat = currentHarvestedCountFloat;
}
public SWGObject getOwner() {
return owner;
}
public void setOwner(SWGObject owner) {
this.owner = owner;
}
public void setDeedTemplate(String deedTemplate){
this.deedTemplate = deedTemplate;
}
public String getDeedTemplate(){
return this.deedTemplate;
}
public boolean isGenerator() {
return generator;
}
public void setGenerator(boolean generator) {
this.generator = generator;
}
public void setHarvesterName(String name,CreatureObject owner){
owner.getClient().getSession().write(messageBuilder.buildCustomNameDelta(this,name));
this.setCustomName(name);
((CreatureObject)owner).sendSystemMessage("Structure renamed.", (byte) 0);
}
public void setPermissionAdmin(String name,CreatureObject owner){
Vector<String> permissionList = this.getAdminList();
owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name));
}
public void setPermissionHopper(String name,CreatureObject owner){
Vector<String> permissionList = this.getAdminList();
owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name));
}
public void operateMachinery(CreatureObject owner){
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
// Assemble resources at that spot
// For later, it might be needed to also pass the template to differentiate liquid resources
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
owner.getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, owner, planetResourcesVector));
owner.getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
}
public void deActivate(){
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
}
public void placeHarvester(){
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
}
public static void createAndPlaceHarvester(SWGObject object){
CreatureObject actor = (CreatureObject) object.getAttachment("Owner");
String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate");
HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet());
long objectId = harvester.getObjectID();
Vector<String> adminList = harvester.getAdminList();
String[] fullName = ((CreatureObject)actor).getCustomName().split(" ");
adminList.add(fullName[0]);
harvester.setAdminList(adminList);
// Set BER and outputhopper capacity here, take it from deed
harvester.setBER((int)object.getAttachment("Deed_BER"));
harvester.setSpecRate((int)(1.5F*(int)object.getAttachment("Deed_BER")));
harvester.setOutputHopperCapacity((int)object.getAttachment("Deed_Capacity"));
harvester.setDeedTemplate((String)object.getAttachment("Deed_DeedTemplate"));
if ((int)object.getAttachment("Deed_SurplusMaintenance")>0){
harvester.setMaintenanceAmount((int)object.getAttachment("Deed_SurplusMaintenance"));
}
if ((int)object.getAttachment("Deed_SurplusPower")>0){
harvester.setPowerLevel((int)object.getAttachment("Deed_SurplusPower"));
}
// build harvester
int resCRC = CRC.StringtoCRC(structureTemplate);
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId, object.getOrientation().x, object.getOrientation().y, object.getOrientation().z, object.getOrientation().w, object.getPosition().x, positionY, object.getPosition().z, resCRC, (byte) 0);
actor.getClient().getSession().write(createObjectMsg.serialize());
tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize());
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
resources.objects.installation.InstallationMessageBuilder messenger = new resources.objects.installation.InstallationMessageBuilder((InstallationObject)harvester);
actor.getClient().getSession().write(messenger.buildBaseline3((InstallationObject)harvester));
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(harvester.getObjectID());
actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize());
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z);
String displayname = "@installation_n:"+harvester.getStfName();
constructionWaypoint.setName(displayname);
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
player.waypointAdd(constructionWaypoint);
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
constructionWaypoint.setActive(true);
constructionWaypoint.setColor((byte)1);
constructionWaypoint.setStringAttribute("", "");
player.waypointAdd(constructionWaypoint);
constructionWaypoint.setName(displayname);
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
player.setLastSurveyWaypoint(constructionWaypoint);
List<WaypointAttachment> attachments = new ArrayList<WaypointAttachment>();
WaypointAttachment attachment = new WaypointAttachment();
attachment.active = true;
attachment.cellID = constructionWaypoint.getCellId();
attachment.color = (byte)1;
attachment.name = displayname;
attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName());
attachment.positionX = object.getPosition().x;
attachment.positionY = 0;
attachment.positionZ = object.getPosition().z;
attachments.add(attachment);
// remove constructor
NGECore.getInstance().objectService.destroyObject(object);
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(object.getObjectID());
actor.getClient().getSession().write(destroyObjectMsg.serialize());
// ToDo: waypoint attachment fix
Date date = new Date();
Mail constructionNotificationMail = new Mail();
constructionNotificationMail.setSenderName("Structure Service");
constructionNotificationMail.setSubject("Your structure");
constructionNotificationMail.setRecieverId(actor.getObjectID());
constructionNotificationMail.setTimeStamp((int) (date.getTime() / 1000));
constructionNotificationMail.setMailId(NGECore.getInstance().chatService.generateMailId());
String message = "Your construction is ready";
constructionNotificationMail.setMessage(message);
constructionNotificationMail.setStatus(Mail.NEW);
constructionNotificationMail.setAttachments(attachments);
//NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail);
NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail);
NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail);
}
public void createNewHopperContainer(){
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINO7Delta(this,(byte)1));
}
public void continueHopperContainer(){
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, owner, planetResourcesVector));
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
}
@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());
if(getPvPBitmask() != 0) {
UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID());
upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral);
upvpm.setStatus(getPvPBitmask());
destination.getSession().write(upvpm.serialize());
}
}
}
@@ -21,6 +21,205 @@
******************************************************************************/
package resources.objects.installation;
public class InstallationMessageBuilder {
import java.nio.ByteOrder;
import org.apache.mina.core.buffer.IoBuffer;
import resources.objects.ObjectMessageBuilder;
import resources.objects.harvester.HarvesterObject;
/**
* @author Charon
*/
public class InstallationMessageBuilder extends ObjectMessageBuilder{
public InstallationMessageBuilder(InstallationObject installationObject) {
setObject(installationObject);
}
public IoBuffer buildBaseline3(InstallationObject installationObject) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
int packSize = 66;
packSize += installationObject.getStfName().length();
packSize += installationObject.getStfFilename().length();
buffer.putShort((short)5);
buffer.putInt(0x68A75F0C);
buffer.putLong(installationObject.getObjectID());
buffer.putInt(0x494E534F);
buffer.put((byte)3);
buffer.putInt(packSize);
buffer.putShort((short) 0x05);
buffer.putFloat(installationObject.getComplexity());
buffer.put(getAsciiString(installationObject.getStfFilename())); // installation_n
buffer.putInt(0);
buffer.put(getAsciiString(installationObject.getStfName()));
buffer.put(getUnicodeString(""));//buffer.put(getUnicodeString(installationObject.getCustomName()));
buffer.putInt(1);// int 1 // oper 3
buffer.putShort((short)0);
buffer.putInt(0);
buffer.putInt(0);
buffer.putLong(0);
buffer.putInt(0);
buffer.putInt(0);
buffer.putInt(0);
buffer.putInt(0);
buffer.put((byte)1);
buffer.put((byte)0);
buffer.putFloat(0.0F);
buffer.putFloat(0.0F);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
// 0000: 05 00 0C 5F A7 68 82 EC 7D 16 00 00 02 00 4F 53 ..._.h..}.....OS
// 0010: 4E 49 06 0E 00 00 00 05 00 76 00 00 00 00 00 00 NI.......v......
// 0020: 00 01 00 00 00 .....
public IoBuffer buildBaseline6(InstallationObject installationObject) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
int packSize = 14;
buffer.putShort((short)5);
buffer.putInt(0x68A75F0C);
buffer.putLong(installationObject.getObjectID());
buffer.putInt(0x494E534F);
buffer.put((byte)6);
buffer.putInt(packSize);
buffer.putShort((short)5);
buffer.putInt(0x76);
buffer.putInt(0);
buffer.putInt(1);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildBaseline7() {
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort((short) 0);
int size = buffer.position();
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("INSO", (byte) 7, buffer, size);
return buffer;
}
public IoBuffer buildBaseline8() {
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort((short) 0);
int size = buffer.position();
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("INSO", (byte) 8, buffer, size);
return buffer;
}
public IoBuffer buildBaseline9() {
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putShort((short) 0);
int size = buffer.position();
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
buffer.flip();
buffer = createBaseline("INSO", (byte) 9, buffer, size);
return buffer;
}
public IoBuffer buildDelta3(InstallationObject installationObject,IoBuffer packet,int packSize) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(installationObject.getObjectID());
buffer.putInt(0x494E534F);
buffer.put((byte)3);
buffer.putInt(packSize);
buffer.put(packet);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer buildDelta7(InstallationObject installationObject,IoBuffer packet,int packSize) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)5);
buffer.putInt(0x12862153);
buffer.putLong(installationObject.getObjectID());
buffer.putInt(0x494E534F);
buffer.put((byte)7);
buffer.putInt(packSize);
buffer.put(packet);
int size = buffer.position();
buffer.flip();
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
}
public IoBuffer constructINSO7Var1(InstallationObject installationObject,long selectedResource) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
int hopperContentsSize = ((HarvesterObject)installationObject).getOutputHopperContent().size()+1;
byte updateCounter = ((HarvesterObject)installationObject).getUpdateCount();
buffer.setAutoExpand(true);
buffer.putShort((short)2); // buffer.putShort((short)updateCounter);
buffer.putShort((short)0xC);
buffer.put((byte)1);
buffer.putShort((short)0xD);
buffer.putInt(1);//buffer.putInt(hopperContentsSize); // works once with 1! HopperContentsSize->Number of resources in hopper
buffer.putInt(2); // UpdateCounter works once with 2!
buffer.put((byte)1); // subtype : ADD
buffer.putShort((short)0); // index was 0 buffer.putShort((short)(hopperContentsSize-1));
buffer.putLong(selectedResource);
buffer.putFloat(0);
int size = buffer.position();
buffer.flip();
return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size);
}
// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS
// 0010: 4E 49 07 1E 00 00 00 02 00 0C 00 01 0D 00 01 00 NI..............
// 0020: 00 00 02 00 00 00 01 00 00 8A D3 79 16 00 00 0F ...........y....
// 0030: 00 00 00 00 00 .....
public IoBuffer constructINSO7Var2(InstallationObject installationObject,long selectedResource) {
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putShort((short)2);
buffer.putShort((short)0x9);
buffer.putFloat(0);
buffer.putShort((short)0x5);
buffer.putLong(selectedResource);
int size = buffer.position();
buffer.flip();
return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size);
}
// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS
// 0010: 4E 49 07 12 00 00 00 02 00 09 00 00 00 00 00 05 NI..............
// 0020: 00 8A D3 79 16 00 00 0F 00 ...y.....
@Override
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
// TODO Auto-generated method stub
}
@Override
public void sendBaselines() {
}
}
@@ -23,9 +23,16 @@ package resources.objects.installation;
import com.sleepycat.persist.model.Persistent;
import engine.resources.scene.Planet;
import engine.resources.scene.Point3D;
import engine.resources.scene.Quaternion;
import resources.objects.tangible.TangibleObject;
@Persistent(version=0)
public class InstallationObject extends TangibleObject {
}
public InstallationObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
super(objectID, planet, template, position, orientation);
}
}
@@ -47,7 +47,7 @@ public class ResourceContainerObject extends TangibleObject {
private CreatureObject proprietor;
private String resourceType;
private String resourceClass;
private String resourceClass="";
private String resourceName;
private byte generalType;
private long referenceID;
@@ -148,7 +148,7 @@ public class ResourceContainerObject extends TangibleObject {
public void initializeStats(GalacticResource resource){
this.setResourceName(resource.getName());
this.setResourceClass(resource.getResourceClass());
this.setResourceClass(resource.getCategory());
this.setColdResistance(resource.getResourceStats()[0]);
this.setConductivity(resource.getResourceStats()[1]);
this.setDecayResistance(resource.getResourceStats()[2]);
+198
View File
@@ -38,6 +38,7 @@ import resources.common.Opcodes;
import resources.common.SpawnPoint;
import resources.objects.building.BuildingObject;
import resources.objects.creature.CreatureObject;
import resources.objects.deed.Harvester_Deed;
import resources.objects.player.PlayerObject;
import resources.objects.tangible.TangibleObject;
import resources.objects.tool.SurveyTool;
@@ -84,6 +85,7 @@ public class DevService implements INetworkDispatch {
suiOptions.put((long) 21, "Weapons");
suiOptions.put((long) 22, "Misc Items");
suiOptions.put((long) 23, "Jedi Items");
suiOptions.put((long) 26, "Installations");
suiOptions.put((long) 110, "Survey Devices");
if(creature.getClient().isGM()) suiOptions.put((long) 120, "House Deeds");
break;
@@ -122,6 +124,10 @@ public class DevService implements INetworkDispatch {
suiOptions.put((long) 91, "(Dark) Jedi Robe");
suiOptions.put((long) 92, "Belt of Master Bodo Baas");
break;
case 10: // [Items] Jedi Items
suiOptions.put((long) 111, "Harvesters");
suiOptions.put((long) 112, "Energy resources");
break;
}
@@ -187,6 +193,9 @@ public class DevService implements INetworkDispatch {
case 25: // Tools
sendCharacterBuilderSUI(player, 15);
return;
case 26: // Installations
sendCharacterBuilderSUI(player, 10);
return;
// [Items] Weapons
case 30: // Jedi Weapons
@@ -992,7 +1001,196 @@ public class DevService implements INetworkDispatch {
solarSurveyTool.setCustomName("Solar Survey Device");
inventory.add(solarSurveyTool);
return;
case 111:
// Minerals
String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff";
Harvester_Deed deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(5);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s2_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(11);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_heavy_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(135400);
deed1.setBER(14);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_deed_elite.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(44);
deed1.setAttributes();
inventory.add(deed1);
// Chemicals
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(5);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_medium.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(11);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_heavy.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(135400);
deed1.setBER(14);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_elite.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(44);
deed1.setAttributes();
inventory.add(deed1);
// Flora
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(5);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_medium.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(11);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_heavy.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(135400);
deed1.setBER(14);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_elite.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(44);
deed1.setAttributes();
inventory.add(deed1);
// Gas
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(5);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_medium.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(11);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_heavy.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(135400);
deed1.setBER(14);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_elite.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(44);
deed1.setAttributes();
inventory.add(deed1);
// Water
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(5);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_medium.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(27344);
deed1.setBER(11);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_heavy.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(135400);
deed1.setBER(14);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_elite.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(44);
deed1.setAttributes();
inventory.add(deed1);
// Generators
templateString="object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(19);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/generator_deed/shared_generator_wind_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(10);
deed1.setAttributes();
inventory.add(deed1);
templateString="object/tangible/deed/generator_deed/shared_generator_solar_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(15);
deed1.setAttributes();
inventory.add(deed1);
// templateString="object/tangible/deed/generator_deed/shared_generator_photo_bio_deed.iff";
// deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
// deed1.setOutputHopperCapacity(250000);
// deed1.setBER(19);
// inventory.add(deed1);
templateString="object/tangible/deed/generator_deed/shared_generator_geothermal_deed.iff";
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
deed1.setOutputHopperCapacity(250000);
deed1.setBER(15);
deed1.setAttributes();
inventory.add(deed1);
break;
case 112:
core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000);
break;
case 120:
SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet);
inventory.add(houseDeed);
+41 -1
View File
@@ -48,6 +48,7 @@ import protocol.swg.objectControllerObjects.CommandEnqueueRemove;
import protocol.swg.objectControllerObjects.ShowFlyText;
import protocol.swg.objectControllerObjects.StartTask;
import resources.objects.creature.CreatureObject;
import resources.objects.harvester.HarvesterObject;
import resources.objects.tangible.TangibleObject;
import resources.objects.weapon.WeaponObject;
@@ -137,7 +138,7 @@ public class CommandService implements INetworkDispatch {
target = actor;
}
if (target != actor) {
if (target != actor && target instanceof CreatureObject) {
return false;
}
@@ -521,6 +522,45 @@ public class CommandService implements INetworkDispatch {
}
});
objControllerOpcodes.put(ObjControllerOpcodes.RESOURCE_EMPTY_HOPPER, new INetworkRemoteEvent() {
@Override
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
data.order(ByteOrder.LITTLE_ENDIAN);
Client client = core.getClient(session);
CommandEnqueue commandEnqueue = new CommandEnqueue();
// 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 ED 00 00 00 3E 45
04 00 00 00 00 00 00 00 00 00 3E 45 04 00 00 00
00 00 90 52 05 00 00 00 00 00 D7 35 05 00 00 00
00 00 01 00 00 00 00 07
*/
long playerId = data.getLong(); // 3E 45 04 00 00 00 00 00
data.getInt(); // 00 00 00 00
data.getLong(); // 3E 45 04 00 00 00 00 00
long harvesterId = data.getLong(); // 1E 55 05 00 00 00 00 00
//long containerId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID
long resourceId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID
int stackCount = data.getInt(); // Stack count
byte actionMode = data.get(); // 0 for retrieving, 1 for discarding
byte updateCount = data.get(); // updateCount
CreatureObject actor = (CreatureObject) client.getParent();
SWGObject target = core.objectService.getObject(harvesterId);
core.harvesterService.handleEmptyHopper(actor,target,harvesterId,resourceId,stackCount,actionMode,updateCount);
}
});
}
+24 -2
View File
@@ -96,8 +96,11 @@ import resources.objects.Delta;
import resources.objects.building.BuildingObject;
import resources.objects.cell.CellObject;
import resources.objects.creature.CreatureObject;
import resources.objects.deed.Harvester_Deed;
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.mission.MissionObject;
import resources.objects.player.PlayerObject;
@@ -314,7 +317,11 @@ public class ObjectService implements INetworkDispatch {
object = new SurveyTool(objectID, planet, Template, position, orientation);
}else if(Template.startsWith("object/tangible")) {
} else if(Template.startsWith("object/tangible/deed/harvester_deed") || Template.startsWith("object/tangible/deed/generator_deed")) {
object = new Harvester_Deed(objectID, planet, Template, position, orientation);
} else if(Template.startsWith("object/tangible")) {
object = new TangibleObject(objectID, planet, Template, position, orientation);
@@ -370,7 +377,22 @@ public class ObjectService implements INetworkDispatch {
object = new ResourceContainerObject(objectID, planet, Template, position, orientation);
}else {
} else if(Template.startsWith("object/installation/mining_ore/construction")) {
float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f;
Point3D newpoint = new Point3D(position.x,positionY,position.z);
object = new InstallationObject(objectID, planet, Template, newpoint, orientation);
} else if(Template.startsWith("object/installation/mining_ore") || Template.startsWith("object/installation/mining_liquid") ||
Template.startsWith("object/installation/mining_gas") || Template.startsWith("object/installation/mining_organic") ||
Template.startsWith("object/installation/generators")) {
float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f;
Point3D newpoint = new Point3D(position.x,positionY,position.z);
object = new HarvesterObject(objectID, planet, Template, newpoint, orientation);
core.harvesterService.addHarvester(object);
} else {
return null;
}
File diff suppressed because it is too large Load Diff
@@ -28,13 +28,16 @@ import java.util.Random;
import java.util.Vector;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import com.sleepycat.persist.EntityCursor;
import main.NGECore;
import engine.resources.common.CRC;
import engine.resources.objects.SWGObject;
import engine.resources.service.INetworkDispatch;
import engine.resources.service.INetworkRemoteEvent;
import resources.objects.creature.CreatureObject;
import resources.objects.harvester.HarvesterObject;
import resources.objects.resource.GalacticResource;
import resources.objects.resource.ResourceContainerObject;
import resources.objects.resource.ResourceRoot;
@@ -11306,6 +11309,36 @@ public class ResourceService implements INetworkDispatch {
return resource;
}
public Vector<GalacticResource> getSpawnedResourcesByPlanetAndHarvesterType(int planetId, byte harvesterType) {
Vector<GalacticResource> planetResourceList = new Vector<GalacticResource>();
byte searchtype = harvesterType;
if (harvesterType==7) searchtype = (byte) 0;
for (GalacticResource gal : allSpawnedResources){
if (gal.isSpawnedOn(planetId) && gal.getGeneralType()==searchtype)
if (harvesterType!=HarvesterObject.HARVESTER_TYPE_FUSION)
planetResourceList.add(gal);
else if (harvesterType==HarvesterObject.HARVESTER_TYPE_FUSION) {
System.err.println("gal.getContainerType() " + gal.getContainerType());
if (gal.getResourceRoot().getContainerType()==ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE)
planetResourceList.add(gal);
} else if (harvesterType==HarvesterObject.HARVESTER_TYPE_GEO) {
System.err.println("gal.getContainerType() " + gal.getContainerType());
if (gal.getGeneralType()==GalacticResource.GENERAL_GEOTHERM)
planetResourceList.add(gal);
}
}
return planetResourceList;
}
public GalacticResource findResourceById(long id){
GalacticResource resource = new GalacticResource();
for (GalacticResource sampleResource : allSpawnedResources){
if (sampleResource.getId()==id)
return sampleResource;
}
return resource;
}
// ToDo: Improve
public GalacticResource grabMeatForCreature(CreatureObject corpse){
GalacticResource resource = null;
+21
View File
@@ -46,6 +46,7 @@ import resources.common.FileUtilities;
import resources.common.ObjControllerOpcodes;
import resources.common.Opcodes;
import resources.common.RadialOptions;
import resources.objects.harvester.HarvesterObject;
import services.sui.SUIWindow.SUICallback;
import services.sui.SUIWindow.Trigger;
import engine.clients.Client;
@@ -81,6 +82,26 @@ public class SUIService implements INetworkDispatch {
if(target == null || owner == null)
return;
if (target instanceof HarvesterObject){
HarvesterObject harvester = (HarvesterObject) target;
Vector<String> admins = harvester.getAdminList();
Vector<String> hoppers = harvester.getHopperList();
if (harvester.getOwner()==owner && !admins.contains(owner.getCustomName())){
admins.add(owner.getCustomName());
}
if (! admins.contains(owner.getCustomName()) && ! hoppers.contains(owner.getCustomName())){
return; // Completely unauthorized
}
if (! admins.contains(owner.getCustomName()) && hoppers.contains(owner.getCustomName())){
// authorized for hopper
// change radialOptions to hopper access
harvester.setAttachment("radial_filename", "harvesterHopper");
}
}
if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null)
{
if(core.housingService.getPermissions(owner, target.getContainer()))