diff --git a/scripts/radial/npc/bounty_seeker.py b/scripts/radial/npc/bounty_seeker.py index f619a5bb..bcd07349 100644 --- a/scripts/radial/npc/bounty_seeker.py +++ b/scripts/radial/npc/bounty_seeker.py @@ -33,8 +33,8 @@ def handleSelection(core, owner, target, option): pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) ori = owner.getOrientation() seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) - time.sleep(3) owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + time.sleep(3) seeker.setPosture(8) time.sleep(6.5) core.objectService.destroyObject(seeker) @@ -42,5 +42,31 @@ def handleSelection(core, owner, target, option): return if option == 137 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isSeekerActive(): + owner.sendSystemMessage('@mission/mission_generic:bounty_already_tracking', 0) + return + if target.getUses() == 0: + core.objectService.destroyObject(target) + else: + target.setUses(target.getUses() - 1) + pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) + ori = owner.getOrientation() + seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) + owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + time.sleep(3) + seeker.setPosture(8) + time.sleep(6.5) + core.objectService.destroyObject(seeker) + mission.getObjective().beginIdentifyTarget(core, owner) return return \ No newline at end of file diff --git a/src/resources/objectives/BountyMissionObjective.java b/src/resources/objectives/BountyMissionObjective.java index 35eb4837..5ed1b0c0 100644 --- a/src/resources/objectives/BountyMissionObjective.java +++ b/src/resources/objectives/BountyMissionObjective.java @@ -304,18 +304,18 @@ public class BountyMissionObjective extends MissionObjective { WaypointObject missionWp = mission.getWaypoint(); - if (missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { + if (missionWp == null || missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { WaypointObject waypoint = (WaypointObject) getMissionObject().getWaypoint(); waypoint.setActive(true); waypoint.setColor(WaypointObject.ORANGE); waypoint.setName(getMissionObject().getTargetName()); waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); waypoint.setStringAttribute("", ""); - getMissionObject().setWaypoint(waypoint); + waypoint.setPosition(target.getWorldPosition()); + mission.setWaypoint(waypoint); } else { missionWp.setPosition(target.getWorldPosition()); mission.setWaypoint(missionWp); - getMissionObject().setWaypoint(missionWp); } actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); actor.sendSystemMessage("@mission/mission_generic:target_continue_tracking", DisplayType.Broadcast); @@ -331,6 +331,46 @@ public class BountyMissionObjective extends MissionObjective { } } + public void beginIdentifyTarget(NGECore core, CreatureObject actor) { + if (seekerActive) + return; + + setSeekerActive(true); + setSeekerPlanet(actor.getPlanet().name); + + Executors.newSingleThreadScheduledExecutor().schedule(() -> { + MissionObject mission = getMissionObject(); + SWGObject target = core.objectService.getObject(markObjId); + + if (target == null) { + actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); + return; + } else if (target.getPlanet().getName() != getSeekerPlanet()) { + actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); + return; + } + + WaypointObject missionWp = mission.getWaypoint(); + + if (missionWp == null || missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { + WaypointObject waypoint = (WaypointObject) getMissionObject().getWaypoint(); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + waypoint.setPosition(target.getWorldPosition()); + mission.setWaypoint(waypoint); + } else { + missionWp.setPosition(target.getWorldPosition()); + mission.setWaypoint(missionWp); + } + + actor.sendSystemMessage("Your target was identified as " + target.getCustomName() + ".", DisplayType.Broadcast); // Can't find this in the string files + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + }, 60, TimeUnit.SECONDS); + } + public void beginArakydUpdate(final CreatureObject actor) { arakydActive = true; Executors.newScheduledThreadPool(1).schedule(() -> { @@ -350,8 +390,7 @@ public class BountyMissionObjective extends MissionObjective { waypoint.setName(getMissionObject().getTargetName()); waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); waypoint.setStringAttribute("", ""); - - actor.getClient().getSession().write(getMissionObject().getBaseline3().set("waypoint", waypoint)); + getMissionObject().setWaypoint(waypoint); actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast);