more cleanup + fixes

Harvesters and house terminal work now
This commit is contained in:
Light2
2014-04-12 21:52:09 +02:00
committed by CharonInferar
parent 5594515cb4
commit cc45a337bc
8 changed files with 116 additions and 128 deletions
+1
View File
@@ -60,6 +60,7 @@ odb/chatRooms/je.info.*
odb/resourcehistory/je.info.*
odb/resourceroots/je.info.*
odb/resources/je.info.*
odb/auction/je.info.*
# External tool builders
.externalToolBuilders/
@@ -150,7 +150,10 @@ public class BuildingObject extends TangibleObject implements IPersistent {
public Vector<TangibleObject> getItemsList() {
Vector<TangibleObject> items = new Vector<TangibleObject>();
getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> items.add((TangibleObject) item)));
getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> {
if(!(item instanceof CreatureObject))
items.add((TangibleObject) item);
}));
return items;
}
@@ -237,8 +240,11 @@ public class BuildingObject extends TangibleObject implements IPersistent {
}
public Vector<CellObject> getCells() {
Vector<CellObject> cells = new Vector<CellObject>();
this.viewChildren(this, true, false, (cell) -> cells.add((CellObject) cell));
final Vector<CellObject> cells = new Vector<CellObject>();
this.viewChildren(this, true, false, (obj) -> {
if(obj instanceof CellObject)
cells.add((CellObject) obj);
});
return cells;
}
@@ -394,97 +394,7 @@ public class HarvesterObject extends InstallationObject {
public void placeHarvester(){
NGECore.getInstance().objectService.getObject(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());
NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
@@ -506,16 +416,10 @@ public class HarvesterObject extends InstallationObject {
return;
}
destination.getSession().write(messageBuilder.buildBaseline3());
destination.getSession().write(messageBuilder.buildBaseline6());
destination.getSession().write(messageBuilder.buildBaseline8());
destination.getSession().write(messageBuilder.buildBaseline9());
destination.getSession().write(installationMessageBuilder.buildBaseline3(this));
//destination.getSession().write(installationMessageBuilder.buildBaseline6(this));
//destination.getSession().write(installationMessageBuilder.buildBaseline8());
//destination.getSession().write(installationMessageBuilder.buildBaseline9());
if(getPvPBitmask() != 0) {
UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID());
upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral);
upvpm.setStatus(getPvPBitmask());
destination.getSession().write(upvpm.serialize());
}
}
}
@@ -24,6 +24,7 @@ package resources.objects.installation;
import com.sleepycat.persist.model.Entity;
import com.sleepycat.persist.model.Persistent;
import engine.clients.Client;
import engine.resources.scene.Planet;
import engine.resources.scene.Point3D;
import engine.resources.scene.Quaternion;
@@ -35,4 +36,9 @@ public class InstallationObject extends TangibleObject {
public InstallationObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
super(objectID, planet, template, position, orientation);
}
@Override
public void sendBaselines(Client destination) {
}
}
-2
View File
@@ -276,8 +276,6 @@ public class HousingService implements INetworkDispatch {
deed.setSurplusMaintenance((int)building.getMaintenanceAmount());
deed.setAttributes();
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(building.getObjectID());
owner.getClient().getSession().write(destroyObjectMsg.serialize());
core.objectService.destroyObject(building.getObjectID());
SWGObject ownerInventory = owner.getSlottedObject("inventory");
+8 -4
View File
@@ -54,6 +54,7 @@ import org.python.core.Py;
import org.python.core.PyObject;
import com.sleepycat.je.Transaction;
import com.sleepycat.je.TransactionConfig;
import com.sleepycat.persist.EntityCursor;
import com.sleepycat.persist.model.Entity;
import com.sleepycat.persist.model.PrimaryKey;
@@ -976,7 +977,8 @@ public class ObjectService implements INetworkDispatch {
CrcStringTableVisitor crcTable = ClientFileManager.loadFile("misc/object_template_crc_string_table.iff", CrcStringTableVisitor.class);
List<BuildingObject> persistentBuildings = new ArrayList<BuildingObject>();
Map<Long, Long> duplicate = new HashMap<Long, Long>();
Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null);
for (int i = 0; i < buildoutTable.getRowCount(); i++) {
String template;
@@ -1055,15 +1057,17 @@ public class ObjectService implements INetworkDispatch {
newObjectId = core.getDuplicateIdODB().get(key, String.class, DuplicateId.class).getObjectId();
} else {
newObjectId = generateObjectID();
Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null);
core.getDuplicateIdODB().put(new DuplicateId(key, newObjectId), String.class, DuplicateId.class, txn);
txn.commitSync();
}
duplicate.put(objectId, newObjectId);
objectId = newObjectId;
}
if(txn.isValid()) {
System.out.println("Committed doid transaction.");
txn.commitSync();
}
List<Long> containers = new ArrayList<Long>();
SWGObject object;
if(objectId != 0 && containerId == 0) {
+84 -17
View File
@@ -21,8 +21,11 @@
******************************************************************************/
package services.resources;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Vector;
@@ -30,6 +33,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import protocol.swg.EnterStructurePlacementModeMessage;
import protocol.swg.SceneCreateObjectByCrc;
import protocol.swg.SceneDestroyObject;
@@ -53,6 +57,8 @@ import resources.objects.resource.ResourceContainerObject;
import resources.objects.resource.ResourceRoot;
import resources.objects.tangible.TangibleObject;
import resources.objects.waypoint.WaypointObject;
import services.chat.Mail;
import services.chat.WaypointAttachment;
import services.sui.SUIWindow;
import services.sui.SUIWindow.SUICallback;
import services.sui.SUIWindow.Trigger;
@@ -383,8 +389,6 @@ public class HarvesterService implements INetworkDispatch {
deed.setSurplusPower((int)harvester.getPowerLevel());
deed.setAttributes();
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(harvester.getObjectID());
owner.getClient().getSession().write(destroyObjectMsg.serialize());
core.objectService.destroyObject(harvester.getObjectID());
SWGObject crafterInventory = owner.getSlottedObject("inventory");
@@ -557,9 +561,7 @@ public class HarvesterService implements INetworkDispatch {
int containerEnergy = containerVector.get(i).getStackCount();
if (containerEnergy <= deductedEnergy){
deductedEnergy -= containerEnergy;
playerInventory._remove(containerVector.get(i));
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(containerVector.get(i).getObjectID());
owner.getClient().getSession().write(destroyObjectMsg.serialize());
playerInventory.remove(containerVector.get(i));
} else {
containerEnergy -= deductedEnergy;
containerVector.get(i).setStackCount(containerEnergy,(CreatureObject)owner);
@@ -888,17 +890,9 @@ public class HarvesterService implements INetworkDispatch {
// destroy deed
TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory");
playerInventory._remove(usedDeed);
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(usedDeed.getObjectID());
actor.getClient().getSession().write(destroyObjectMsg.serialize());
playerInventory.remove(usedDeed);
int resCRC = CRC.StringtoCRC(constructorTemplate);
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(installation.getObjectID(), quaternion.x, quaternion.y, quaternion.z, quaternion.w, posX, positionY, posZ, resCRC, (byte) 0);
actor.getClient().getSession().write(createObjectMsg.serialize());
tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize());
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(installation.getObjectID());
actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize());
core.simulationService.add(installation, posX, posZ, true);
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
player.setLotsRemaining(player.getLotsRemaining()-(int)((Harvester_Deed)usedDeed).getLotRequirement());
@@ -907,8 +901,81 @@ public class HarvesterService implements INetworkDispatch {
}
}
public void placeHarvester(SWGObject object){
HarvesterObject.createAndPlaceHarvester(object);
public void placeHarvester(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(actor.getCustomName());
// 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
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
core.simulationService.add(harvester, harvester.getPosition().x, harvester.getPosition().x, true);
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);
// 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);
}
+4 -2
View File
@@ -99,13 +99,15 @@ public class SUIService implements INetworkDispatch {
if (! admins.contains(owner.getCustomName()) && hoppers.contains(owner.getCustomName())){
// authorized for hopper
// change radialOptions to hopper access
harvester.setAttachment("radial_filename", "harvesterHopper");
core.scriptService.callScript("scripts/radial/", "harvesterHopper", "createRadial", core, owner, target, request.getRadialOptions());
sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount());
return;
}
}
if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null)
{
if(core.housingService.getPermissions(owner, target.getContainer()))
if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure_management_terminal"))
{
core.scriptService.callScript("scripts/radial/", "moveable", "createRadial", core, owner, target, request.getRadialOptions());
sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount());