This commit is contained in:
Light2
2014-06-18 21:05:47 +02:00
9 changed files with 216 additions and 103 deletions
-1
View File
@@ -1 +0,0 @@
140613 19:57:33:302 INFO [.\odb\cities]Chose lowest utilized file for cleaning. totalUtilization: 14 bestFileUtilization: 101 lnSizeCorrectionFactor: NaN isProbe: false
+30 -11
View File
@@ -4,9 +4,18 @@ from resources.objectives import DeliveryMissionObjective
import sys
def startConversation(core, actor, npc):
missionId = npc.getAttachment('assignedMission')
player = actor.getPlayerObject()
if missionId is None:
if player is None:
return
activeMissions = player.getActiveMissions()
missionId = checkMissions(core, actor, npc, activeMissions)
if missionId == 0:
core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job')
return
mission = core.objectService.getObject(missionId)
@@ -16,7 +25,7 @@ def startConversation(core, actor, npc):
objective = mission.getObjective()
if mission.getGrandparent().getObjectId() != actor.getObjectId() or objective is None:
if objective is None:
core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job')
return
@@ -38,33 +47,43 @@ def endConversation(core, actor, npc):
return
def handlePickupStage(core, actor, npc, objective, mission):
if objective.getMissionGiver().getObjectId() != npc.getObjectId():
if objective.getMissionGiver() != npc.getObjectId():
endConversation(core, actor, npc)
return
core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 'p')
core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 'p')
objective.createDeliveryItem(core, actor)
objective.update(core, actor)
return
def handleDeliveryStage(core, actor, npc, objective, mission):
if objective.getDropOffNpc().getObjectId() != npc.getObjectId():
if objective.getDropOffNpc() != npc.getObjectId():
endConversation(core, actor, npc)
return
core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 'r')
core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 'r')
core.objectService.destroyObject(objective.getDeliveryObject())
objective.update(core, actor)
return
def handleCompletionStage(core, actor, npc, objective, mission):
if objective.getMissionGiver().getObjectId() != npc.getObjectId():
if objective.getMissionGiver() != npc.getObjectId():
endConversation(core, actor, npc)
return
core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 's')
core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 's')
core.missionService.handleMissionComplete(actor, mission)
return
return
def checkMissions(core, actor, npc, activeMissions):
for objId in activeMissions:
missionObj = core.objectService.getObject(objId)
if (missionObj != None):
if (missionObj.getStartLocation() is not None and missionObj.getStartLocation().getObjectId() == npc.getObjectID()):
return missionObj.getObjectID()
elif (missionObj.getDestinationLocation() is not None and missionObj.getDestinationLocation().getObjectId() == npc.getObjectID()):
return missionObj.getObjectID()
return 0
+10 -17
View File
@@ -140,8 +140,8 @@ def addPlanetSpawns(core, planet):
#City Hall Interior
#Lucky Despot Interior TODO: Check Cell IDs for Spawned NPCS inside once Lucky Despot is spawning properly again.
building = core.objectService.getObject(long(-466404040703447347))
stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', building.getCellByCellNumber(9), float(32.3), float(7.0), float(1.6), float(0), float(0), float(0), float(0))
#building = core.objectService.getObject(long(-466404040703447347))
#stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', building.getCellByCellNumber(9), float(32.3), float(7.0), float(1.6), float(0), float(0), float(0), float(0))
valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71))
valarian.setCustomName('Lady Valarian')
@@ -162,9 +162,8 @@ def addPlanetSpawns(core, planet):
noble2.setCustomName('a Noble')
noble2.setOptionsBitmask(256)
commoner11 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91))
commoner11 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91))
commoner11.setCustomName('a Commoner')
commoner11.setOptionsBitmask(256)
businessman3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(3595.7), float(5.0), float(-4740.1), float(0), float(0))
businessman3.setCustomName('a Businessman')
@@ -174,21 +173,17 @@ def addPlanetSpawns(core, planet):
jawa1.setCustomName('a Jawa')
jawa1.setOptionsBitmask(256)
commoner12 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0))
commoner12 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0))
commoner12.setCustomName('a Scientist')
commoner12.setOptionsBitmask(256)
commoner13 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0))
commoner13 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0))
commoner13.setCustomName('a Commoner')
commoner13.setOptionsBitmask(256)
commoner14 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71))
commoner14 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71))
commoner14.setCustomName('a Commoner')
commoner14.setOptionsBitmask(256)
commoner15 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0))
commoner15 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0))
commoner15.setCustomName('a Commoner')
commoner15.setOptionsBitmask(256)
jawa2 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3485.2), float(4.9), float(-4859.2), float(0), float(0))
jawa2.setCustomName('a Jawa')
@@ -226,10 +221,9 @@ def addPlanetSpawns(core, planet):
bib.setCustomName('Bib Fortuna')
bib.setOptionsBitmask(256)
commoner16 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91))
commoner16 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91))
commoner16.setCustomName('a Commoner')
commoner16.setOptionsBitmask(256)
noble3 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3396.3), float(4.0), float(-4774.1), float(0.42), float(0.91))
noble3.setCustomName('a Noble')
noble3.setOptionsBitmask(256)
@@ -246,9 +240,8 @@ def addPlanetSpawns(core, planet):
eg1.setCustomName('an EG-6 Power Droid')
eg1.setOptionsBitmask(256)
commoner17 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0))
commoner17 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0))
commoner17.setCustomName('a Commoner')
commoner17.setOptionsBitmask(256)
lifter1 = stcSvc.spawnObject('object/mobile/shared_cll8_binary_load_lifter.iff', 'tatooine', long(0), float(3547), float(5.0), float(-4768.9), float(0), float(0))
lifter1.setCustomName('a CLL-8 Binary Load Lifter')
@@ -22,7 +22,6 @@
package resources.objectives;
import engine.resources.common.CRC;
import engine.resources.scene.Point3D;
import main.NGECore;
import resources.common.OutOfBand;
import resources.datatables.DisplayType;
@@ -36,9 +35,9 @@ public class DeliveryMissionObjective extends MissionObjective {
private static final long serialVersionUID = 1L;
private TangibleObject deliveryObject;
private CreatureObject missionGiver;
private CreatureObject dropOffNpc;
private long deliveryObjectId;
private long missionGiverId;
private long dropOffNpcId;
public DeliveryMissionObjective(MissionObject parent) {
super(parent);
@@ -50,47 +49,22 @@ public class DeliveryMissionObjective extends MissionObjective {
if (isActivated())
return;
String template = "object/mobile/shared_dressed_commoner_tatooine_sullustan_male_06.iff";
Point3D startLoc = parent.getStartLocation().getLocation();
Point3D destination = parent.getDestinationLocation().getLocation();
// TODO: Randomize this process.
CreatureObject missionGiver = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, startLoc.x, startLoc.y, startLoc.z, 0, 1);
if (missionGiver == null)
return;
missionGiver.setCustomName("a commoner");
missionGiver.setAttachment("conversationFile", "missions/deliver");
missionGiver.setAttachment("radial_filename", "object/conversation");
missionGiver.setAttachment("assignedMission", getMissionObject().getObjectId());
missionGiver.setOptionsBitmask(264);
setMissionGiver(missionGiver);
CreatureObject dropOffNpc = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, destination.x, destination.y, destination.z, 0, 1);
if (dropOffNpc == null)
return;
dropOffNpc.setCustomName("a commoner");
dropOffNpc.setAttachment("conversationFile", "missions/deliver");
dropOffNpc.setAttachment("radial_filename", "object/conversation");
dropOffNpc.setAttachment("assignedMission", getMissionObject().getObjectId());
dropOffNpc.setOptionsBitmask(264);
setDropOffNpc(dropOffNpc);
this.missionGiverId = parent.getStartLocation().getObjectId();
this.dropOffNpcId = parent.getDestinationLocation().getObjectId();
if (getObjectivePhase() == 0) {
WaypointObject waypoint = getMissionObject().getWaypoint();
//waypoint.setPlanet(missionGiver.getPlanet());
waypoint.setPlanetCRC(CRC.StringtoCRC(missionGiver.getPlanet().name));
waypoint.setPosition(startLoc);
waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name));
waypoint.setPosition(parent.getStartLocation().getLocation());
waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t");
waypoint.setColor(WaypointObject.ORANGE);
waypoint.setActive(true);
getMissionObject().setWaypoint(waypoint);
} else if (getObjectivePhase() == 1) {
WaypointObject waypoint = getMissionObject().getWaypoint();
waypoint.setPlanetCRC(CRC.StringtoCRC(dropOffNpc.getPlanet().name));
waypoint.setPosition(destination);
waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name));
waypoint.setPosition(parent.getDestinationLocation().getLocation());
waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t");
waypoint.setColor(WaypointObject.ORANGE);
waypoint.setActive(true);
@@ -108,22 +82,13 @@ public class DeliveryMissionObjective extends MissionObjective {
player.addBankCredits(reward);
player.sendSystemMessage(OutOfBand.ProsePackage("@mission/mission_generic:success_w_amount", reward), DisplayType.Broadcast);
abort(core, player);
core.objectService.destroyObject(getMissionObject());
}
@Override
public void abort(NGECore core, CreatureObject player) {
TangibleObject deliveryObject = (TangibleObject) core.objectService.getObject(deliveryObjectId);
if (deliveryObject != null)
core.objectService.destroyObject(deliveryObject.getObjectId());
if (missionGiver != null)
core.objectService.destroyObject(missionGiver, 360);
if (dropOffNpc != null)
core.objectService.destroyObject(dropOffNpc, 360);
core.objectService.destroyObject(deliveryObject);
}
@Override
@@ -138,6 +103,7 @@ public class DeliveryMissionObjective extends MissionObjective {
waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t");
waypoint.setColor(WaypointObject.ORANGE);
waypoint.setActive(true);
waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name));
getMissionObject().setTargetName("Dropoff Location");
getMissionObject().setWaypoint(waypoint);
break;
@@ -147,6 +113,7 @@ public class DeliveryMissionObjective extends MissionObjective {
returnWp.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t");
returnWp.setColor(WaypointObject.ORANGE);
returnWp.setActive(true);
returnWp.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name));
getMissionObject().setTargetName("Return");
getMissionObject().setWaypoint(returnWp);
break;
@@ -166,23 +133,23 @@ public class DeliveryMissionObjective extends MissionObjective {
TangibleObject deliveryObject = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_datadisk.iff", player.getPlanet());
if (deliveryObject != null && inventory.add(deliveryObject)) {
setDeliveryObject(deliveryObject);
setDeliveryObject(deliveryObject.getObjectID());
return true;
}
else
return false;
}
public TangibleObject getDeliveryObject() { return deliveryObject; }
public long getDeliveryObject() { return deliveryObjectId; }
public void setDeliveryObject(TangibleObject object) { this.deliveryObject = object; }
public void setDeliveryObject(long object) { this.deliveryObjectId = object; }
public CreatureObject getMissionGiver() { return missionGiver; }
public long getMissionGiver() { return missionGiverId; }
public void setMissionGiver(CreatureObject missionGiver) { this.missionGiver = missionGiver; }
public void setMissionGiver(long missionGiver) { this.missionGiverId = missionGiver; }
public CreatureObject getDropOffNpc() { return dropOffNpc; }
public long getDropOffNpc() { return dropOffNpcId; }
public void setDropOffNpc(CreatureObject dropOffNpc) { this.dropOffNpc = dropOffNpc; }
public void setDropOffNpc(long dropOffNpc) { this.dropOffNpcId = dropOffNpc; }
}
@@ -47,6 +47,8 @@ public class MissionObject extends IntangibleObject implements Serializable {
private transient MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this);
private MissionObjective objective;
public MissionObject() {
super();
}
@@ -58,7 +60,7 @@ public class MissionObject extends IntangibleObject implements Serializable {
@Override
public Baseline getOtherVariables() {
Baseline baseline = super.getOtherVariables();
baseline.put("objective", new DefaultMissionObjective(this));
//baseline.put("objective", new DefaultMissionObjective(this));
baseline.put("bountyMarkId", (long) 0);
baseline.put("missionId", 0);
baseline.put("missionType", "");
@@ -118,9 +120,8 @@ public class MissionObject extends IntangibleObject implements Serializable {
return (MissionLocation) getBaseline(3).get("startLocation");
}
public void setStartLocation(Point3D location, long objId, String planet) {
public void setStartLocation(MissionLocation startLocation) {
if (getGrandparent() != null && getGrandparent().getClient() != null) {
MissionLocation startLocation = new MissionLocation(location.clone(), objId, planet);
getGrandparent().getClient().getSession().write(getBaseline(3).set("startLocation", startLocation));
}
}
@@ -149,9 +150,8 @@ public class MissionObject extends IntangibleObject implements Serializable {
return (MissionLocation) getBaseline(3).get("destinationLocation");
}
public void setDestinationLocation(Point3D location, long objId, String planet) {
public void setDestinationLocation(MissionLocation destinationLocation) {
if (getGrandparent() != null && getGrandparent().getClient() != null) {
MissionLocation destinationLocation = new MissionLocation(location.clone(), objId, planet);
getGrandparent().getClient().getSession().write(getBaseline(3).set("destinationLocation", destinationLocation));
}
}
@@ -241,15 +241,17 @@ public class MissionObject extends IntangibleObject implements Serializable {
}
public MissionObjective getObjective() {
if (otherVariables.get("objective") instanceof DefaultMissionObjective) {
/*if (otherVariables.get("objective") instanceof DefaultMissionObjective) {
return null;
} else {
return (MissionObjective) otherVariables.get("objective");
}
}*/
return objective;
}
public void setObjective(MissionObjective objective) {
otherVariables.set("objective", objective);
//otherVariables.set("objective", objective);
this.objective = objective;
}
public long getBountyMarkId() {
@@ -92,6 +92,7 @@ public class PlayerObject extends IntangibleObject implements Serializable {
baseline.put("lotsRemaining", 10);
baseline.put("holoEmote", "");
baseline.put("holoEmoteUses", 0);
baseline.put("activeMissions", new ArrayList<Long>()); // TODO: Look at MissionCriticalObject in CREO4, could use that instead of this
return baseline;
}
@@ -927,6 +928,19 @@ public class PlayerObject extends IntangibleObject implements Serializable {
return false;
}
public void addActiveMission(long missionObjId) {
getActiveMissions().add(missionObjId);
}
public void removeActiveMission(long missionObjId) {
getActiveMissions().remove(missionObjId);
}
@SuppressWarnings("unchecked")
public List<Long> getActiveMissions() {
return (List<Long>) otherVariables.get("activeMissions");
}
public boolean isCallingCompanion() {
synchronized(objectMutex) {
return callingCompanion;
+22
View File
@@ -36,6 +36,7 @@ import java.util.Map;
import resources.common.FileUtilities;
import resources.objects.building.BuildingObject;
import resources.objects.cell.CellObject;
import resources.objects.creature.CreatureObject;
import services.ai.AIActor;
import services.spawn.MobileTemplate;
import main.NGECore;
@@ -214,6 +215,27 @@ public class StaticService implements INetworkDispatch {
return object;
}
/**
* Used for spawning a commoner that can be used for a variety of mission types, like delivery and crafting missions.
*/
public CreatureObject spawnCommoner(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) {
CreatureObject commoner = (CreatureObject) spawnObject(template, planetName, cellId, x, y, z, qW, qX, qY, qZ);
if (commoner == null)
return null;
commoner.setAttachment("conversationFile", "missions/deliver");
commoner.setAttachment("radial_filename", "object/conversation");
commoner.setOptionsBitmask(264);
core.missionService.addCommoner(commoner);
return commoner;
}
public CreatureObject spawnCommoner(String template, String planetName, long cellId, float x, float y, float z, float qY, float qW) {
return spawnCommoner(template, planetName, cellId, x, y, z, qW, 0, qY, 0);
}
public List<SWGObject> getCloningFacilitiesByPlanet(Planet planet) {
List<SWGObject> objects = core.simulationService.get(planet, 0, 0, 8300);
List<SWGObject> cloners = new ArrayList<SWGObject>();
+51
View File
@@ -0,0 +1,51 @@
/*******************************************************************************
* 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 services.mission;
import engine.resources.scene.Point3D;
public class CommonerSpawn {
private long objectId;
private Point3D position;
public CommonerSpawn(long objectId, Point3D position) {
this.objectId = objectId;
this.position = position;
}
public long getObjectId() {
return objectId;
}
public void setObjectId(long objectId) {
this.objectId = objectId;
}
public Point3D getLocation() {
return position;
}
public void setLocation(Point3D position) {
this.position = position;
}
}
+58 -12
View File
@@ -46,6 +46,7 @@ import protocol.swg.objectControllerObjects.MissionListRequest;
import resources.common.BountyListItem;
import resources.common.SpawnPoint;
import resources.common.ObjControllerOpcodes;
import services.mission.CommonerSpawn;
import resources.objectives.BountyMissionObjective;
import resources.objectives.DeliveryMissionObjective;
import resources.objectives.DestroyMissionObjective;
@@ -75,12 +76,12 @@ public class MissionService implements INetworkDispatch {
// Use a HashMap for obtaining number of entries so we aren't using a visitor all the time.
private Map<String, Integer> entryCounts = new ConcurrentHashMap<String, Integer>();
private Map<Long, BountyListItem> bountyMap = new ConcurrentHashMap<Long, BountyListItem>();
private Map<String, Vector<CommonerSpawn>> commonerMap = new ConcurrentHashMap<String, Vector<CommonerSpawn>>();
private ObjectDatabase bountiesODB;
private Random ran = new Random();
public MissionService(NGECore core) {
this.core = core;
try { nameGenerator = new NameGen("names.txt"); }
catch (IOException e) { e.printStackTrace(); }
@@ -223,6 +224,9 @@ public class MissionService implements INetworkDispatch {
* @param silent If true, called the MissionObjective.abort() method, otherwise it simply destroys the mission (false)
*/
public void handleMissionAbort(CreatureObject creature, MissionObject mission, boolean silent) {
creature.getPlayerObject().removeActiveMission(mission.getObjectID());
MissionObjective objective = mission.getObjective();
if (objective != null && !silent)
@@ -307,7 +311,8 @@ public class MissionService implements INetworkDispatch {
randomBountyMission(player, mission);
else if (type == TerminalType.ARTISAN)
randomSurveyMission(player, mission);
return;
//randomSurveyMission(player, mission);
else
return;
@@ -337,12 +342,17 @@ public class MissionService implements INetworkDispatch {
}
public void handleMissionComplete(CreatureObject creature, MissionObject mission) {
creature.getPlayerObject().removeActiveMission(mission.getObjectID());
MissionObjective objective = mission.getObjective();
if (objective == null)
return;
objective.complete(core, creature);
core.objectService.destroyObject(mission.getObjectId());
}
private boolean handleMissionAccept(CreatureObject creature, MissionObject mission) {
@@ -388,6 +398,7 @@ public class MissionService implements INetworkDispatch {
mission.setPlanetId(creature.getPlanetId());
}
creature.getPlayerObject().addActiveMission(mission.getObjectID());
missionBag.transferTo(creature, datapad, mission);
createMissionObjective(creature, mission);
return true;
@@ -443,7 +454,7 @@ public class MissionService implements INetworkDispatch {
return null;
}
}
private void randomSurveyMission(SWGObject player, MissionObject mission) {
/*private void randomSurveyMission(SWGObject player, MissionObject mission) {
byte generalType = (byte) (ran.nextInt(3) == 0 ? 1 : 0);
@@ -496,9 +507,38 @@ public class MissionService implements INetworkDispatch {
mission.setTemplateObject(CRC.StringtoCRC(ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[family.getContainerType()])); // This should be the resource container obj
mission.setTargetName(family.getResourceType() + family.getResourceClass());
}
}*/
private void randomDeliveryMission(SWGObject player, MissionObject mission) {
if (!commonerMap.containsKey(player.getPlanet().name))
return;
Vector<CommonerSpawn> spawns = commonerMap.get(player.getPlanet().name);
Point3D playerLocation = player.getWorldPosition();
MissionLocation startLocation = null;
MissionLocation destinationLocation = null;
Random randomSpawn = new Random(10);
// TODO: There is probably a much better way of doing this.
for (CommonerSpawn spawn : spawns) {
if (randomSpawn.nextInt() >= 5) {
continue;
}
float distance = playerLocation.getDistance2D(spawn.getLocation());
if (distance <= 500 && startLocation == null) {
startLocation = new MissionLocation(spawn.getLocation(), spawn.getObjectId(), player.getPlanet().name);
} else if (distance <= 2500 && destinationLocation == null) {
destinationLocation = new MissionLocation(spawn.getLocation(), spawn.getObjectId(), player.getPlanet().name);
}
if (destinationLocation != null && startLocation != null)
break;
}
if (startLocation == null || destinationLocation == null)
return;
mission.setMissionType("deliver");
String[] difficulties = { "easy", "medium", "hard" };
@@ -513,14 +553,9 @@ public class MissionService implements INetworkDispatch {
mission.setDifficultyLevel(5);
// TODO: Use pre-defined commoner locations
Point3D startLocation = SpawnPoint.getRandomPosition(player.getPosition(), (float) 50, (float) 300, player.getPlanetId());
Point3D destination = SpawnPoint.getRandomPosition(startLocation, (float) 50, (float) 500, player.getPlanetId());
mission.setStartLocation(startLocation, 0, player.getPlanet().name);
mission.setDestinationLocation(destination, 0, player.getPlanet().name);
mission.setCreditReward((int) (200 + ((startLocation.getDistance2D(destination) / 10))));
mission.setStartLocation(startLocation);
mission.setDestinationLocation(destinationLocation);
mission.setCreditReward((int) (200 + ((startLocation.getLocation().getDistance2D(destinationLocation.getLocation()) / 10))));
mission.setTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff"));
mission.setTargetName("Datadisk");
@@ -654,6 +689,17 @@ public class MissionService implements INetworkDispatch {
return true;
}
public void addCommoner(SWGObject commoner) {
CommonerSpawn commonerSpawn = new CommonerSpawn(commoner.getObjectId(), commoner.getPosition());
if (commonerMap.containsKey(commoner.getPlanet().name))
commonerMap.get(commoner.getPlanet().name).add(commonerSpawn);
else {
commonerMap.put(commoner.getPlanet().name, new Vector<CommonerSpawn>());
commonerMap.get(commoner.getPlanet().name).add(commonerSpawn);
}
}
public boolean removeBounty(long bountyTarget, boolean listRemove) {
if (listRemove)
bountyMap.remove(bountyTarget);