diff --git a/scripts/object/tangible/terminal/terminal_mission_artisan.py b/scripts/object/tangible/terminal/terminal_mission_artisan.py index 6bface4e..7bbd42dd 100644 --- a/scripts/object/tangible/terminal/terminal_mission_artisan.py +++ b/scripts/object/tangible/terminal/terminal_mission_artisan.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - + object.setAttachment("terminalType", 4) core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_artisan', object.getPosition().x, object.getPosition().z, 41, 76, 0) return \ No newline at end of file diff --git a/src/resources/objectives/SurveyMissionObjective.java b/src/resources/objectives/SurveyMissionObjective.java index d54b3a47..025b15bf 100644 --- a/src/resources/objectives/SurveyMissionObjective.java +++ b/src/resources/objectives/SurveyMissionObjective.java @@ -21,7 +21,11 @@ ******************************************************************************/ package resources.objectives; +import java.util.concurrent.atomic.AtomicInteger; + +import engine.resources.scene.Point3D; import main.NGECore; +import resources.datatables.DisplayType; import resources.objects.creature.CreatureObject; import resources.objects.mission.MissionObject; import services.mission.MissionObjective; @@ -30,27 +34,50 @@ public class SurveyMissionObjective extends MissionObjective{ private static final long serialVersionUID = 1L; + private String resourceFamily; + private Point3D pickupLocation; + private String pickupPlanet; + private int surveyMissionNum; + public SurveyMissionObjective(MissionObject parent) { super(parent); } @Override public void activate(NGECore core, CreatureObject player) { - + pickupPlanet = player.getPlanet().getName(); + pickupLocation = player.getPosition(); + resourceFamily = getMissionObject().getMissionTargetName(); + + // This way will allow 2 survey missions at a time. + AtomicInteger number = new AtomicInteger(); + player.getSlottedObject("datapad").viewChildren(player, true, false, (obj) -> { + if (obj instanceof MissionObject && ((MissionObject) obj).getMissionType().equals("survey")) { number.getAndIncrement(); } + }); + player.setAttachment("surveyMission" + Integer.valueOf(number.get()), getMissionObject().getObjectID()); + surveyMissionNum = number.get(); + + player.sendSystemMessage("@mission/mission_generic:survey_start", DisplayType.Broadcast); } @Override public void complete(NGECore core, CreatureObject player) { - // TODO Auto-generated method stub + player.addBankCredits(getMissionObject().getCreditReward()); + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); } @Override public void abort(NGECore core, CreatureObject player) { - // TODO Auto-generated method stub + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); } @Override public void update(NGECore core, CreatureObject player) { - // TODO Auto-generated method stub } + + public String getResourceFamily() { return resourceFamily; } + + public Point3D getPickupLocation() { return pickupLocation; } + + public String getPickupPlanet() { return pickupPlanet; } } diff --git a/src/services/mission/MissionService.java b/src/services/mission/MissionService.java index 5a740eb9..967b01f3 100644 --- a/src/services/mission/MissionService.java +++ b/src/services/mission/MissionService.java @@ -38,8 +38,6 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -import com.sleepycat.je.Transaction; - import protocol.swg.ObjControllerMessage; import protocol.swg.objectControllerObjects.MissionAbort; import protocol.swg.objectControllerObjects.MissionAcceptRequest; @@ -153,17 +151,25 @@ public class MissionService implements INetworkDispatch { int terminalType = (int) terminal.getAttachment("terminalType"); - if (terminalType == TerminalType.GENERIC) { - handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); - } else if (terminalType == TerminalType.BOUNTY) { - if (!object.hasSkill("class_bountyhunter_phase1_novice")) { object.sendSystemMessage("@mission/mission_generic:not_bounty_hunter_terminal", (byte) 0); } - else { handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.BOUNTY); } - } else if (terminalType == TerminalType.ENTERTAINER) { + switch(terminalType) { + case TerminalType.GENERIC: + handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); + break; + + case TerminalType.BOUNTY: + if (!object.hasSkill("class_bountyhunter_phase1_novice")) { object.sendSystemMessage("@mission/mission_generic:not_bounty_hunter_terminal", (byte) 0); } + else { handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.BOUNTY); } + break; + + case TerminalType.ARTISAN: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ARTISAN); + break; + + case TerminalType.ENTERTAINER: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ENTERTAINER); + break; - } else if (terminalType == TerminalType.ARTISAN) { - handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ARTISAN); - } else { - //Console.println("ERROR: Unsupported terminal " + terminal.getObjectId()); + default: break; } } @@ -445,7 +451,9 @@ public class MissionService implements INetworkDispatch { if (surveySkill > 90) { maxLevel += 10; } if (surveySkill > 100) { maxLevel += 5; } //Max mission level is 95. - int randLevel = minLevel + 5 * (new Random().nextInt((maxLevel - minLevel)) / 5); + int randNumber = (maxLevel == minLevel ? 0 : ran.nextInt(maxLevel - minLevel)); // prevent bound error (can't randomize 0) + + int randLevel = minLevel + (5 * randNumber) / 5; if (randLevel > maxLevel) randLevel = maxLevel; @@ -474,7 +482,7 @@ public class MissionService implements INetworkDispatch { mission.setCreditReward(400 + (randLevel - minLevel) * 20 + ran.nextInt(100)); mission.setMissionTemplateObject(CRC.StringtoCRC(ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[family.getContainerType()])); // This should be the resource container obj - mission.setMissionTargetName(family.getResourceType()); + mission.setMissionTargetName(family.getResourceType() + family.getResourceClass()); } @@ -486,7 +494,7 @@ public class MissionService implements INetworkDispatch { String missionStf = "mission/mission_deliver_neutral_" + difficulties[ran.nextInt(difficulties.length)]; mission.setMissionId(getRandomStringEntry(missionStf)); - mission.setMissionDescription(missionStf); + mission.setMissionDescription(missionStf, "o"); mission.setMissionTitle(missionStf); mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); @@ -500,7 +508,7 @@ public class MissionService implements INetworkDispatch { mission.setStartLocation(startLocation, player.getPlanet().name); mission.setDestination(destination, player.getPlanet().name); - mission.setCreditReward((int) (50 + ((startLocation.getDistance2D(destination) / 10)))); + mission.setCreditReward((int) (200 + ((startLocation.getDistance2D(destination) / 10)))); mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); mission.setMissionTargetName("Datadisk"); @@ -563,7 +571,7 @@ public class MissionService implements INetworkDispatch { mission.setMissionDescription(missionStf, "s"); } - mission.setMissionLevel(new Random().nextInt(100 - 95) + 95); + mission.setMissionLevel(95 + bountyTarget.getFailedAttempts()); mission.setCreditReward(bountyTarget.getCreditReward());