diff --git a/src/resources/objects/mission/MissionMessageBuilder.java b/src/resources/objects/mission/MissionMessageBuilder.java index 1baca6ee..c97226cd 100644 --- a/src/resources/objects/mission/MissionMessageBuilder.java +++ b/src/resources/objects/mission/MissionMessageBuilder.java @@ -42,46 +42,47 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = IoBuffer.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); - buffer.putShort((short) 17); + buffer.putShort((short) 16); - buffer.putFloat(1); // mission complexity ?? - buffer.put(getAsciiString("mission/mission_object")); + buffer.putFloat(object.getComplexity()); // mission complexity ?? + + buffer.put(getAsciiString(object.getStfFilename())); buffer.putInt(0); - buffer.put(getAsciiString("destroy_mission")); + buffer.put(getAsciiString(object.getStfName())); if (mission.getCustomName() == null) { buffer.putInt(0); } else { buffer.put(getUnicodeString(mission.getCustomName())); } - buffer.putInt(0); // volume + buffer.putInt(object.getVolume()); // volume + buffer.putInt(0); // unused + buffer.putInt(mission.getMissionLevel()); buffer.putFloat(mission.getMissionStartX()); buffer.putFloat(mission.getMissionStartZ()); // missionStartZ buffer.putFloat(mission.getMissionStartY()); - buffer.putLong(0); // Start Object ID - - if (mission.getMissionStartPlanet() == null) { + if (mission.getMissionStartPlanet() == null) buffer.putInt(0); - } else { + else buffer.putInt(CRC.StringtoCRC(mission.getMissionStartPlanet())); - } - - buffer.put(getUnicodeString(mission.getCreator())); + + if (mission.getCreator() != null) + buffer.put(getUnicodeString(mission.getCreator())); + else + buffer.putInt(0); + buffer.putInt(mission.getCreditReward()); buffer.putFloat(mission.getMissionDestinationX()); buffer.putFloat(mission.getMissionDestinationZ()); buffer.putFloat(mission.getMissionDestinationY()); - buffer.putLong(0); // Destination Object ID - - if (mission.getMissionDestinationPlanet() == null) { + if (mission.getMissionDestinationPlanet() == null) buffer.putInt(0); - } else { + else buffer.putInt(CRC.StringtoCRC(mission.getMissionDestinationPlanet())); - } buffer.putInt(mission.getMissionTemplateObject()); @@ -95,11 +96,10 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); // refresh counter - if(mission.getMissionType() == null) { + if(mission.getMissionType() == null) buffer.putInt(0); - } else { + else buffer.putInt(CRC.StringtoCRC(mission.getMissionType())); - } buffer.put(getAsciiString(mission.getMissionTargetName())); @@ -178,7 +178,7 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } -/* + public IoBuffer buildStfDelta(String stfFile, String stfName) { IoBuffer buffer = IoBuffer.allocate(4 + stfFile.length() + stfName.length(), false).order(ByteOrder.LITTLE_ENDIAN); @@ -231,9 +231,9 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { public IoBuffer buildCreatorNameDelta(String creator) { - IoBuffer buffer = IoBuffer.allocate(4 + creator.length(), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(4 + (creator.length() * 2), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(creator)); + buffer.put(getUnicodeString(creator)); int size = buffer.position(); buffer.flip(); @@ -278,11 +278,11 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildTargetObjectIffDelta(String template) { + public IoBuffer buildTargetObjectIffDelta(int template) { IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(CRC.StringtoCRC(template)); + buffer.putInt(template); int size = buffer.position(); buffer.flip(); @@ -359,66 +359,7 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } -*/ - @SuppressWarnings("unused") - public IoBuffer buildMissionDelta() { - IoBuffer buffer = IoBuffer.allocate(500, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.isAutoExpand(); - buffer.isAutoShrink(); - - MissionObject mission = (MissionObject) object; - - buffer.putShort((short) 11); - buffer.put(getAsciiString(mission.getMissionDescription())); - buffer.putInt(0); - buffer.put(getAsciiString(mission.getMissionDescId())); - - buffer.putShort((short) 5); - buffer.putInt(mission.getMissionLevel()); - - buffer.putShort((short) 7); - buffer.put(getUnicodeString(mission.getCreator())); - - buffer.putShort((short) 8); - buffer.putInt(mission.getCreditReward()); - - buffer.putShort((short) 9); - buffer.putFloat(mission.getMissionDestinationX()); - buffer.putFloat(mission.getMissionDestinationZ()); - buffer.putFloat(mission.getMissionDestinationY()); - buffer.putLong(0); - buffer.putInt(CRC.StringtoCRC(mission.getMissionDestinationPlanet())); - - buffer.putShort((short) 10); - buffer.putInt(mission.getMissionTemplateObject()); - - buffer.putShort((short) 12); - buffer.put(getAsciiString(mission.getMissionTitle())); - buffer.putInt(0); - buffer.put(getAsciiString(mission.getMissionTitleId())); - - buffer.putShort((short) 13); - buffer.putInt(mission.getMissionRepeatCounter()); - - buffer.putShort((short) 14); - buffer.putInt(CRC.StringtoCRC(mission.getMissionType())); - - buffer.putShort((short) 15); - buffer.put(getAsciiString(mission.getMissionTargetName())); - - buffer.putShort((short) 6); - buffer.putFloat(mission.getMissionStartX()); - buffer.putFloat(mission.getMissionStartZ()); - buffer.putFloat(mission.getMissionStartY()); - buffer.putLong(0); // Start Object ID - buffer.putInt(CRC.StringtoCRC(mission.getMissionStartPlanet())); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("MISO", (byte) 3, (short) 8, buffer, size + 4); - Console.println("MISO3 Delta: " + StringUtilities.bytesToHex(buffer.array())); - return buffer; - } + @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index baca60e7..c5d69f0a 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -21,8 +21,6 @@ ******************************************************************************/ package resources.objects.mission; -import java.util.List; - import com.sleepycat.je.Environment; import com.sleepycat.je.Transaction; import com.sleepycat.persist.model.NotPersistent; @@ -39,25 +37,25 @@ import engine.resources.scene.Quaternion; @Persistent(version=0) public class MissionObject extends IntangibleObject implements IPersistent { - private float destX; - private float destY; - private float destZ; - private float startX; - private float startY; - private float startZ; - private String startPlanet; - private int difficultyLevel; // Difficulty level displayed in details - private String destinationPlanet; - private int repeatCount; // increases for each player using the mission; used for redisplaying on mission term too - private int reward; - private String creator; - private String description; // TODO: Base off of a new Object, SWGString? - private String title; // TODO: Base off of a new Object, SWGString? - private String missionTargetName; // Target object I guess? - private String descId; - private String titleId; - private String type; - private int missionTemplateObject; + private float destX = 0; + private float destY = 0; + private float destZ = 0; + private float startX = 0; + private float startY = 0; + private float startZ = 0; + private String startPlanet = ""; + private int difficultyLevel = 0; // Difficulty level displayed in details + private String destinationPlanet = ""; + private int repeatCount = 0; // increases for each player using the mission; used for redisplaying on mission term too + private int reward = 0; + private String creator = ""; + private String description = ""; + private String title = ""; + private String missionTargetName = ""; // Target object I guess? + private String descId = ""; + private String titleId = ""; + private String type = ""; + private int missionTemplateObject = 0; private WaypointObject attachedWaypoint; @@ -100,8 +98,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { this.startY = y; this.startPlanet = planet; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildStartLocationDelta(x, z, y, planet)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildStartLocationDelta(x, z, y, planet)); } } @@ -130,8 +128,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { this.destZ = z; this.destinationPlanet = planet; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildDestinationDelta(x, z, y, planet)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDestinationDelta(x, z, y, planet)); } } @@ -151,8 +149,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.difficultyLevel = missionLevel; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildDifficultyLevelDelta(missionLevel)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDifficultyLevelDelta(missionLevel)); } } @@ -172,6 +170,9 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.repeatCount = missionRepeatCounter; } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildRepeatCounterDelta(missionRepeatCounter)); + } } public int getCreditReward() { @@ -184,8 +185,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.reward = missionCredits; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildCreditsRewardDelta(missionCredits)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreditsRewardDelta(missionCredits)); } } @@ -199,8 +200,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.creator = missionCreator; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildCreatorNameDelta(missionCreator)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreatorNameDelta(missionCreator)); } } @@ -215,8 +216,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { this.description = missionDescription; this.descId = id; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionDescription, id)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionDescription, id)); } } @@ -231,8 +232,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { this.title = missionTitle; this.titleId = id; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionTitle, id)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionTitle, id)); } } @@ -246,8 +247,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.missionTargetName = missionTargetName; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildTargetNameDelta(missionTargetName)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetNameDelta(missionTargetName)); } } @@ -273,8 +274,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.missionTemplateObject = missionTemplateObject; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildTargetObjectIffDelta(missionTemplateObject)); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetObjectIffDelta(missionTemplateObject)); } } @@ -300,18 +301,9 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.type = missionType; } - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildMissionTypeDelta(missionType)); - } - } - - public void sendMissionDelta() { - getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDelta()); - //getContainer().getClient().getSession().write(messageBuilder.buildMissionDelta()); - System.out.println("Sent delta"); - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - //getContainer().getClient().getSession().write(messageBuilder.buildMissionDelta()); - //System.out.println("Sent delta"); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTypeDelta(missionType)); + } } diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 60666553..b11bd350 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -310,12 +310,11 @@ public class CharacterService implements INetworkDispatch { object._add(bank); object._add(missionBag); - /*for(int missionsAdded = 0; missionsAdded < 12; missionsAdded++) { + for(int missionsAdded = 1; missionsAdded <= 10; missionsAdded++) { MissionObject mission = (MissionObject) core.objectService.createObject("object/mission/shared_mission_object.iff", object.getPlanet()); missionBag._add(mission); - Console.println("Added empty mission " + missionsAdded); - }*/ + } // TODO: Race abilities if (client.isGM()) @@ -330,8 +329,6 @@ public class CharacterService implements INetworkDispatch { object.addObjectToEquipList(missionBag); object.addObjectToEquipList(appInventory); - core.missionService.createDefaultMissions(object); - WeaponObject defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", object.getPlanet()); object.addObjectToEquipList(defaultWeapon); object._add(defaultWeapon); diff --git a/src/services/MissionService.java b/src/services/MissionService.java index 16aecee0..02b4c929 100644 --- a/src/services/MissionService.java +++ b/src/services/MissionService.java @@ -99,55 +99,10 @@ public class MissionService implements INetworkDispatch { }); } - @SuppressWarnings("unused") private void populateMissions(final SWGObject player, int type) { CreatureObject creature = (CreatureObject) player; - TangibleObject missionBag = (TangibleObject) creature.getSlottedObject("mission_bag"); - - final AtomicInteger deCount = new AtomicInteger(); - final AtomicInteger dCount = new AtomicInteger(); - //createDefaultMissions(creature); - missionBag.viewChildren(creature, true, false, new Traverser() { - @Override - public void process(SWGObject child) { - MissionObject mission = (MissionObject) child; - if (deCount.get() < 5) { - mission.setMissionType("destroy"); - mission.setMissionStart(200, 0, 200, "tatooine"); - deCount.getAndIncrement(); - Console.println("Destroy missions: " + String.valueOf(deCount.get())); - } - else if (dCount.get() < 5) { - mission.setMissionType("deliver"); - mission.setMissionStart(0, 0, 0, "tatooine"); - dCount.getAndIncrement(); - Console.println("Deliver missions: " + String.valueOf(dCount.get())); - } else { - return; - } - mission.setCreditReward(1337); - mission.setCreator("Waverunner"); - mission.setMissionLevel(5); - mission.setMissionDescription("mission/mission_destroy_neutral_hard_creature_tatooine", "m17d"); - mission.setMissionTitle("mission/mission_destroy_neutral_hard_creature_tatooine", "m17t"); - mission.setMissionDestination(400, 0, 400, "tatooine"); - mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/lair/base/shared_objective_power_generator.iff")); - mission.setMissionTargetName("@lair_n:tatooine_giant_worrt_lair_neutral_medium"); - mission.setRepeatCount(1); - /*WaypointObject wp = new WaypointObject(); - wp.setName("@mission/mission_destroy_neutral_hard_creature_tatooine:m17t"); - wp.setColor(WaypointObject.ORANGE); - wp.setPosition(new Point3D(10, 10, 10)); - wp.setCellId(0); - wp.setPlanet(core.terrainService.getPlanetByName("tatooine"));*/ - mission.sendMissionDelta(); - - } - - }); - - //Console.println("Sent deltas"); + debugMissionDelta(creature); } // May want to create a map for the server with needed info @@ -172,33 +127,57 @@ public class MissionService implements INetworkDispatch { return 0; } - public void createDefaultMissions(CreatureObject player) { - for(int missionsAdded = 0; missionsAdded <= 10; missionsAdded++) { - MissionObject mission = (MissionObject) core.objectService.createObject("object/mission/shared_mission_object.iff", player.getPlanet()); - - mission.setMissionLevel(0); - mission.setMissionStart(0, 0, 0, null); - mission.setCreator(""); - mission.setCreditReward(0); - - mission.setMissionDestination(0, 0, 0, null); - - //mission.setMissionTemplateObject(missionTemplateObject); - mission.setMissionDescription("", ""); - mission.setMissionTitle("", ""); - - mission.setMissionType("destroy"); // 0x19C9FAC1 - - mission.setMissionTargetName(""); + public void debugMissionDelta(CreatureObject creature) { + TangibleObject missionBag = (TangibleObject) creature.getSlottedObject("mission_bag"); + final AtomicInteger count = new AtomicInteger(); + final AtomicInteger deCount = new AtomicInteger(); + final AtomicInteger dCount = new AtomicInteger(); + + count.getAndSet(1); + missionBag.viewChildren(creature, true, false, new Traverser() { - TangibleObject missionBag = (TangibleObject) player.getSlottedObject("mission_bag"); - missionBag._add(mission); - - Console.println("Added mission " + missionsAdded); - } - Console.println("Successfully created default missions"); + @Override + public void process(SWGObject child) { + + //if (count.get() > 1) + //return; + + if (child instanceof MissionObject == true) { + System.out.println(count.get() + " is a MissionObject"); + } else { + System.out.println(count.get() + " is not a MissionObject!!"); + } + + MissionObject mission = (MissionObject) child; + if (deCount.get() < 5) { + mission.setMissionType("destroy"); + deCount.getAndIncrement(); + Console.println("Destroy missions: " + String.valueOf(deCount.get())); + } + else if (dCount.get() < 5) { + mission.setMissionType("deliver"); + dCount.getAndIncrement(); + Console.println("Deliver missions: " + String.valueOf(dCount.get())); + } else { + return; + } + + mission.setMissionDescription("mission/mission_deliver_neutral_easy", "m9d"); + mission.setMissionLevel(1); + mission.setMissionStart((float) 3377.148, (float) -4753.221, (float) 0, "tatooine"); + mission.setCreator("Waverunner"); + mission.setCreditReward(69); + mission.setMissionDestination((float) 3447.129, (float) -5070.057, (float) 0, "tatooine"); + mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); + mission.setMissionTitle("mission/mission_deliver_neutral_easy", "m9t"); + mission.setRepeatCount(1); + + //mission.sendMissionDelta(); + System.out.println("Object: " + count.getAndIncrement()); + } + + }); } - @Override public void shutdown() {