diff --git a/src/resources/buffs/Buff.java b/src/resources/buffs/Buff.java index d845d423..cac48c4f 100644 --- a/src/resources/buffs/Buff.java +++ b/src/resources/buffs/Buff.java @@ -444,7 +444,11 @@ public class Buff implements IDelta, Serializable { @Override public void run() { - core.buffService.removeBuffFromCreature(owner, Buff.this); + try { + core.buffService.removeBuffFromCreature(owner, Buff.this); + } catch (Exception e) { + e.printStackTrace(); + } } diff --git a/src/resources/objectives/BountyMissionObjective.java b/src/resources/objectives/BountyMissionObjective.java index bd5d7a87..35eb4837 100644 --- a/src/resources/objectives/BountyMissionObjective.java +++ b/src/resources/objectives/BountyMissionObjective.java @@ -225,40 +225,44 @@ public class BountyMissionObjective extends MissionObjective { @Override public void run() { - switch(countDown.incrementAndGet()) { - case 15: - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_5", DisplayType.Broadcast); - break; - case 16: - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_4", DisplayType.Broadcast); - break; - case 17: - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_3", DisplayType.Broadcast); - break; - case 18: - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_2", DisplayType.Broadcast); - break; - case 19: - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_1", DisplayType.Broadcast); - arakydLandingLocation = SpawnPoint.getRandomPosition(actor.getPosition(), 50, 120, actor.getPlanetId()); - PlayClientEffectLocMessage effectMsg = new PlayClientEffectLocMessage("clienteffect/probot_delivery.cef", actor.getPlanet().getName(), arakydLandingLocation); - actor.getClient().getSession().write(effectMsg.serialize()); - break; - case 20: - break; - case 23: - Quaternion ori = actor.getOrientation(); - - CreatureObject probe = (CreatureObject) NGECore.getInstance().staticService.spawnObject("object/creature/npc/droid/shared_imperial_probot_bounty.iff", - actor.getPlanet().getName(), 0, arakydLandingLocation.x, arakydLandingLocation.y, arakydLandingLocation.z, ori.y, ori.w); - - // TODO: Move probe to the player. - - probe.setAttachment("probotRequester", actor.getObjectID()); - probe.setAttachment("attachedMission", getMissionObject().getObjectID()); - actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival", DisplayType.Broadcast); - probeSummonTask.cancel(false); - break; + try { + switch(countDown.incrementAndGet()) { + case 15: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_5", DisplayType.Broadcast); + break; + case 16: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_4", DisplayType.Broadcast); + break; + case 17: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_3", DisplayType.Broadcast); + break; + case 18: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_2", DisplayType.Broadcast); + break; + case 19: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_1", DisplayType.Broadcast); + arakydLandingLocation = SpawnPoint.getRandomPosition(actor.getPosition(), 50, 120, actor.getPlanetId()); + PlayClientEffectLocMessage effectMsg = new PlayClientEffectLocMessage("clienteffect/probot_delivery.cef", actor.getPlanet().getName(), arakydLandingLocation); + actor.getClient().getSession().write(effectMsg.serialize()); + break; + case 20: + break; + case 23: + Quaternion ori = actor.getOrientation(); + + CreatureObject probe = (CreatureObject) NGECore.getInstance().staticService.spawnObject("object/creature/npc/droid/shared_imperial_probot_bounty.iff", + actor.getPlanet().getName(), 0, arakydLandingLocation.x, arakydLandingLocation.y, arakydLandingLocation.z, ori.y, ori.w); + + // TODO: Move probe to the player. + + probe.setAttachment("probotRequester", actor.getObjectID()); + probe.setAttachment("attachedMission", getMissionObject().getObjectID()); + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival", DisplayType.Broadcast); + probeSummonTask.cancel(false); + break; + } + } catch (Exception e) { + e.printStackTrace(); } } }, 1, 1, TimeUnit.SECONDS); @@ -278,44 +282,47 @@ public class BountyMissionObjective extends MissionObjective { @Override public void run() { - - MissionObject mission = getMissionObject(); - SWGObject target = core.objectService.getObject(markObjId); - - if (target == null) { - actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); - cancelLocationUpdates(); - return; - } else if (target.getPlanet().getName() != getSeekerPlanet()) { - actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); - cancelLocationUpdates(); - return; - } else { + try { + MissionObject mission = getMissionObject(); + SWGObject target = core.objectService.getObject(markObjId); - if (updates.get() >= 6) { - actor.sendSystemMessage("@mission/mission_generic:target_track_lost", DisplayType.Broadcast); + if (target == null) { + actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } else if (target.getPlanet().getName() != getSeekerPlanet()) { + actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); cancelLocationUpdates(); return; - } - - WaypointObject missionWp = mission.getWaypoint(); - - if (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); } else { - missionWp.setPosition(target.getWorldPosition()); - mission.setWaypoint(missionWp); - getMissionObject().setWaypoint(missionWp); + + if (updates.get() >= 6) { + actor.sendSystemMessage("@mission/mission_generic:target_track_lost", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } + + WaypointObject missionWp = mission.getWaypoint(); + + if (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); + } 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); + updates.getAndIncrement(); } - actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); - actor.sendSystemMessage("@mission/mission_generic:target_continue_tracking", DisplayType.Broadcast); - updates.getAndIncrement(); + } catch (Exception e) { + e.printStackTrace(); } } }, 60, 15, TimeUnit.SECONDS); @@ -327,28 +334,30 @@ public class BountyMissionObjective extends MissionObjective { public void beginArakydUpdate(final CreatureObject actor) { arakydActive = true; Executors.newScheduledThreadPool(1).schedule(() -> { - - int number = new Random().nextInt(100); - - // Effectively a 16% chance of failing. The failure type is calculated by subtracting 10 from the number received. - if (number <= 16 && number != 0) { actor.sendSystemMessage("@mission/mission_generic:target_not_found_" + String.valueOf(10 - number), (byte) 0); return; } - - SWGObject target = NGECore.getInstance().objectService.getObject(markObjId); - if (target == null) { actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); } - - WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), - target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); - waypoint.setActive(true); - waypoint.setColor(WaypointObject.ORANGE); - waypoint.setName(getMissionObject().getTargetName()); - waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); - waypoint.setStringAttribute("", ""); - - actor.getClient().getSession().write(getMissionObject().getBaseline3().set("waypoint", waypoint)); - - actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); - actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast); - + try { + int number = new Random().nextInt(100); + + // Effectively a 16% chance of failing. The failure type is calculated by subtracting 10 from the number received. + if (number <= 16 && number != 0) { actor.sendSystemMessage("@mission/mission_generic:target_not_found_" + String.valueOf(10 - number), (byte) 0); return; } + + SWGObject target = NGECore.getInstance().objectService.getObject(markObjId); + if (target == null) { actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); } + + WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), + target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + + actor.getClient().getSession().write(getMissionObject().getBaseline3().set("waypoint", waypoint)); + + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast); + } catch (Exception e) { + e.printStackTrace(); + } }, 180, TimeUnit.SECONDS); } diff --git a/src/services/BuffService.java b/src/services/BuffService.java index d8c95147..819ebdd2 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -171,9 +171,12 @@ public class BuffService implements INetworkDispatch { @Override public void run() { - removeBuffFromCreature(target, buff); + try { + removeBuffFromCreature(target, buff); + } catch (Exception e) { + e.printStackTrace(); + } - } }, (long) buff.getDuration(), TimeUnit.SECONDS); @@ -186,11 +189,15 @@ public class BuffService implements INetworkDispatch { ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { - if (buffer == null || buffer.getClient() == null) - removeBuffFromCreature(target, buff); - - if (target.getWorldPosition().getDistance2D(buffer.getWorldPosition()) > 80) { - removeBuffFromCreature(target, buff); + try { + if (buffer == null || buffer.getClient() == null) + removeBuffFromCreature(target, buff); + + if (target.getWorldPosition().getDistance2D(buffer.getWorldPosition()) > 80) { + removeBuffFromCreature(target, buff); + } + } catch (Exception e) { + e.printStackTrace(); } } }, 5, 5, TimeUnit.SECONDS); @@ -282,7 +289,13 @@ public class BuffService implements INetworkDispatch { } if(buff.getRemainingDuration() > 0 && buff.getDuration() > 0) { - ScheduledFuture task = scheduler.schedule(() -> removeBuffFromCreature(creature, buff), (long) buff.getRemainingDuration(), TimeUnit.SECONDS); + ScheduledFuture task = scheduler.schedule(() -> { + try { + removeBuffFromCreature(creature, buff); + } catch (Exception e) { + e.printStackTrace(); + } + }, (long) buff.getRemainingDuration(), TimeUnit.SECONDS); buff.setRemovalTask(task); continue; } else { diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index ea22298d..9d4803f1 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -79,19 +79,23 @@ public class ConnectionService implements INetworkDispatch { scheduler.scheduleAtFixedRate(new Runnable() { public void run() { - synchronized(core.getActiveConnectionsMap()) { - for(Client c : core.getActiveConnectionsMap().values()) { - if(c.getParent() != null) { - if ((System.currentTimeMillis() - c.getSession().getLastReadTime()) > 300000) { - try { - disconnect(c); - } catch (Exception e) { - System.err.println("ConnectionService:disconnect(): Error disconnecting client."); - e.printStackTrace(); + try { + synchronized(core.getActiveConnectionsMap()) { + for(Client c : core.getActiveConnectionsMap().values()) { + if(c.getParent() != null) { + if ((System.currentTimeMillis() - c.getSession().getLastReadTime()) > 300000) { + try { + disconnect(c); + } catch (Exception e) { + System.err.println("ConnectionService:disconnect(): Error disconnecting client."); + e.printStackTrace(); + } } } } } + } catch (Exception e) { + e.printStackTrace(); } } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index fccb607b..c29a117d 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -649,22 +649,24 @@ public class EntertainmentService implements INetworkDispatch { public void startPerformanceExperience(final CreatureObject entertainer) { final ScheduledFuture experienceTask = scheduler.scheduleAtFixedRate(() -> { - - Performance p = performancesByIndex.get(entertainer.getPerformanceId()); - if (p == null) { + try { + Performance p = performancesByIndex.get(entertainer.getPerformanceId()); + if (p == null) { + entertainer.setFlourishCount(0); + return; + } + + int floXP = p.getFlourishXpMod(); + int floCount = entertainer.getFlourishCount(); + + //FIXME: this is not an accurate implementation yet. It needs group bonuses and other things. + int XP = (int) Math.round( ((floCount > 2) ? 2 : floCount) * floXP * 3.8 ); + entertainer.setFlourishCount(0); - return; + core.playerService.giveExperience(entertainer, XP); + } catch (Exception e) { + e.printStackTrace(); } - - int floXP = p.getFlourishXpMod(); - int floCount = entertainer.getFlourishCount(); - - //FIXME: this is not an accurate implementation yet. It needs group bonuses and other things. - int XP = (int) Math.round( ((floCount > 2) ? 2 : floCount) * floXP * 3.8 ); - - entertainer.setFlourishCount(0); - core.playerService.giveExperience(entertainer, XP); - }, 10000, 10000, TimeUnit.MILLISECONDS); entertainer.setEntertainerExperience(experienceTask); @@ -685,26 +687,29 @@ public class EntertainmentService implements INetworkDispatch { spectator.setMoodAnimation("entertained"); final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(() -> { - - if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { - - if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { - spectator.setPerformanceWatchee(null); - spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() - + " is out of range.", (byte) 0); + try { + if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { + + if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { + spectator.setPerformanceWatchee(null); + spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + else { + spectator.setPerformanceListenee(null); + spectator.sendSystemMessage("You stop listening to " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + spectator.setMoodAnimation("neutral"); + performer.removeSpectator(spectator); + + if (spectator.getInspirationTick().cancel(true)) + spectator.getSpectatorTask().cancel(true); + } - else { - spectator.setPerformanceListenee(null); - spectator.sendSystemMessage("You stop listening to " + performer.getCustomName() + " because " + performer.getCustomName() - + " is out of range.", (byte) 0); - } - spectator.setMoodAnimation("neutral"); - performer.removeSpectator(spectator); - - if (spectator.getInspirationTick().cancel(true)) - spectator.getSpectatorTask().cancel(true); + } catch (Exception e) { + e.printStackTrace(); } - }, 2, 2, TimeUnit.SECONDS); spectator.setSpectatorTask(spectatorTask); @@ -742,8 +747,12 @@ public class EntertainmentService implements INetworkDispatch { performer.doSkillAnimation(anmFlo); scheduler.schedule(() -> { - performer.setFlourishCount(0); - performer.setPerformingFlourish(false); + try { + performer.setFlourishCount(0); + performer.setPerformingFlourish(false); + } catch (Exception e) { + e.printStackTrace(); + } }, (long) performance.getLoopDuration(), TimeUnit.SECONDS); } @@ -786,7 +795,11 @@ public class EntertainmentService implements INetworkDispatch { performer.playEffectObject(effect, ""); scheduler.schedule(() -> { - performer.setPerformingEffect(false); + try { + performer.setPerformingEffect(false); + } catch (Exception e) { + e.printStackTrace(); + } }, (long) pEffect.getEffectDuration(), TimeUnit.SECONDS); return true; @@ -796,38 +809,40 @@ public class EntertainmentService implements INetworkDispatch { // http://youtu.be/WqyAde-oC7o?t=11m14s << Player watching entertainer (Has ring only, no pet, + 15 min ticks) // TODO: Camp/Cantina checks for expertise and duration bonus %. Right now only using basic values. final ScheduledFuture inspirationTick = scheduler.scheduleAtFixedRate(() -> { - - int time = 0; // current buff duration time (minutes) - int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. - - if (spectator.getAttachment("inspireDuration") != null) - time+= (int) spectator.getAttachment("inspireDuration"); - - if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { - SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); - buffCap += durationMod.getBase() + durationMod.getModifier(); - } - - if (time >= buffCap) { - spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap - spectator.getInspirationTick().cancel(true); - } else { - int entTick = 10; - if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { - SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); - entTick += pulseMod.getBase() + pulseMod.getModifier(); + try { + int time = 0; // current buff duration time (minutes) + int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. + + if (spectator.getAttachment("inspireDuration") != null) + time+= (int) spectator.getAttachment("inspireDuration"); + + if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { + SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); + buffCap += durationMod.getBase() + durationMod.getModifier(); } - - int duration = (time + entTick); // minutes - int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); - int hours = MathUtilities.secondsToWholeHours(duration * 60); - - spectator.showFlyText(OutOfBand.ProsePackage("@spam:buff_duration_tick_observer", "TO", hours + " hours , " + hMinutes + " minutes "), 0.66f, new RGB(255, 182, 193), 3, false); - - spectator.setAttachment("inspireDuration", duration); - //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + + if (time >= buffCap) { + spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap + spectator.getInspirationTick().cancel(true); + } else { + int entTick = 10; + if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { + SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); + entTick += pulseMod.getBase() + pulseMod.getModifier(); + } + + int duration = (time + entTick); // minutes + int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); + int hours = MathUtilities.secondsToWholeHours(duration * 60); + + spectator.showFlyText(OutOfBand.ProsePackage("@spam:buff_duration_tick_observer", "TO", hours + " hours , " + hMinutes + " minutes "), 0.66f, new RGB(255, 182, 193), 3, false); + + spectator.setAttachment("inspireDuration", duration); + //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + } + } catch (Exception e) { + e.printStackTrace(); } - }, 10, 10, TimeUnit.SECONDS); spectator.setInspirationTick(inspirationTick); } diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java index 09ec11d4..fcc5e7b9 100644 --- a/src/services/InstanceService.java +++ b/src/services/InstanceService.java @@ -224,12 +224,16 @@ public class InstanceService implements INetworkDispatch { private Map> instanceMap = reference; public void run() { - for (List instanceList : instanceMap.values()) { - for (Instance instance : instanceList) { - if ((instance.isClosed() || !instance.isOpen())) { - instanceList.remove(instance); + try { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if ((instance.isClosed() || !instance.isOpen())) { + instanceList.remove(instance); + } } } + } catch (Exception e) { + e.printStackTrace(); } } @@ -276,21 +280,25 @@ public class InstanceService implements INetworkDispatch { instance.setTask(scheduler.scheduleAtFixedRate(new Runnable() { - private Instance instance = reference; - private boolean sentCloseWarning = false; - - public void run() { - if (instance.getDuration() > 300 && instance.getTimeRemaining() <= 300 && !sentCloseWarning) { - instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:five_minute_warning", (byte) 0)); - sentCloseWarning = true; - } + try { + private Instance instance = reference; + private boolean sentCloseWarning = false; - if (!instance.isOpen()) { - instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:instance_time_out", (byte) 0)); - close(instance); + public void run() { + if (instance.getDuration() > 300 && instance.getTimeRemaining() <= 300 && !sentCloseWarning) { + instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:five_minute_warning", (byte) 0)); + sentCloseWarning = true; + } + + if (!instance.isOpen()) { + instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:instance_time_out", (byte) 0)); + close(instance); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "run", core, instance); } - - core.scriptService.callScript("scripts/instances/", instance.getName(), "run", core, instance); + } catch (Exception e) { + e.printStackTrace(); } }, 1, 1, TimeUnit.MINUTES)); diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 0c61f37b..1072c854 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -121,59 +121,79 @@ public class PlayerService implements INetworkDispatch { List> scheduleList = new ArrayList>(); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000); - IoBuffer packet = time.serialize(); - creature.getClient().getSession().write(packet); + try { + ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000); + IoBuffer packet = time.serialize(); + creature.getClient().getSession().write(packet); + } catch (Exception e) { + e.printStackTrace(); + } }, 45, 45, TimeUnit.SECONDS)); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000))); - player.setLastPlayTimeUpdate(System.currentTimeMillis()); - core.collectionService.checkExplorationRegions(creature); + try { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000))); + player.setLastPlayTimeUpdate(System.currentTimeMillis()); + core.collectionService.checkExplorationRegions(creature); + } catch (Exception e) { + e.printStackTrace(); + } }, 30, 30, TimeUnit.SECONDS)); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { - List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); - - for (SWGObject object : objects) { - if (object == null) { - continue; - } + try { + if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { + List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); - if (!(object instanceof CreatureObject)) { - continue; - } - - CreatureObject observer = (CreatureObject) object; - - int camoflauge = creature.getSkillModBase("camoflauge") - observer.getSkillModBase("detectcamo"); - camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition())); - - if (new Random(camoflauge).nextInt() == camoflauge) { - creature.setInStealth(false); + for (SWGObject object : objects) { + if (object == null) { + continue; + } + + if (!(object instanceof CreatureObject)) { + continue; + } + + CreatureObject observer = (CreatureObject) object; + + int camoflauge = creature.getSkillModBase("camoflauge") - observer.getSkillModBase("detectcamo"); + camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition())); + + if (new Random(camoflauge).nextInt() == camoflauge) { + creature.setInStealth(false); + } } } - } - - if (creature.getDefendersList().size() == 0 && creature.isInCombat()) { - creature.setInCombat(false); + + if (creature.getDefendersList().size() == 0 && creature.isInCombat()) { + creature.setInCombat(false); + } + } catch (Exception e) { + e.printStackTrace(); } }, 15, 15, TimeUnit.SECONDS)); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { - if(!creature.isInCombat()) - creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); - else - creature.setAction(creature.getAction() + ((15 + creature.getLevel() * 5) / 2)); + try { + if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { + if(!creature.isInCombat()) + creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); + else + creature.setAction(creature.getAction() + ((15 + creature.getLevel() * 5) / 2)); + } + } catch (Exception e) { + e.printStackTrace(); } }, 0, 1000, TimeUnit.MILLISECONDS)); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) - creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + try { + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) + creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + } catch (Exception e) { + e.printStackTrace(); + } }, 0, 1000, TimeUnit.MILLISECONDS)); schedulers.put(creature.getObjectID(), scheduleList); @@ -182,10 +202,13 @@ public class PlayerService implements INetworkDispatch { @Override public void run() { - if (ghost.isSet(PlayerFlags.LD)) { - ghost.toggleFlag(PlayerFlags.LD); + try { + if (ghost.isSet(PlayerFlags.LD)) { + ghost.toggleFlag(PlayerFlags.LD); + } + } catch (Exception e) { + e.printStackTrace(); } - } }, 1, TimeUnit.SECONDS);*/ diff --git a/src/services/SurveyService.java b/src/services/SurveyService.java index 1088c505..b218982a 100644 --- a/src/services/SurveyService.java +++ b/src/services/SurveyService.java @@ -70,7 +70,11 @@ public class SurveyService implements INetworkDispatch { @Override public void run() { - ServiceProcessing(); + try { + ServiceProcessing(); + } catch (Exception e) { + e.printStackTrace(); + } } }, 10, 1000, TimeUnit.MILLISECONDS); diff --git a/src/services/TreasureService.java b/src/services/TreasureService.java index 4684d045..d567871c 100644 --- a/src/services/TreasureService.java +++ b/src/services/TreasureService.java @@ -57,7 +57,11 @@ public class TreasureService implements INetworkDispatch { @Override public void run() { - ServiceProcessing(); + try { + ServiceProcessing(); + } catch (Exception e) { + e.printStackTrace(); + } } }, 10, 5000, TimeUnit.MILLISECONDS); diff --git a/src/services/WeatherService.java b/src/services/WeatherService.java index d007d307..78baca9b 100644 --- a/src/services/WeatherService.java +++ b/src/services/WeatherService.java @@ -65,7 +65,11 @@ public class WeatherService { currentWeatherMap.put(planet, defaultWeather); scheduler.scheduleAtFixedRate(() -> { - runWeatherCycle(planet); + try { + runWeatherCycle(planet); + } catch (Exception e) { + e.printStackTrace(); + } }, 30, 30, TimeUnit.MINUTES); } diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index 719d1ec0..1e461e9c 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -74,23 +74,31 @@ public class AIActor { creature.getEventBus().subscribe(this); this.currentState = new IdleState(); regenTask = scheduler.scheduleAtFixedRate(() -> { - if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) - creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + try { + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) + creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + } catch (Exception e) { + e.printStackTrace(); + } }, 0, 1000, TimeUnit.MILLISECONDS); if(creature.getOption(Options.AGGRESSIVE)) { aggroCheckTask = scheduler.scheduleAtFixedRate(() -> { - if(creature == null || creature.getObservers().isEmpty() || creature.isInCombat() || isStalking) - return; - creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 10)).forEach((obj) -> { - if(new Random().nextFloat() <= 0.33 || creature.isInCombat() || isStalking) { - /*if(mobileTemplate.isStalker()) { - setFollowObject((CreatureObject) obj); - setCurrentState(new StalkState()); - } else */ - addDefender((CreatureObject) obj); - - } - }); + try { + if(creature == null || creature.getObservers().isEmpty() || creature.isInCombat() || isStalking) + return; + creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 10)).forEach((obj) -> { + if(new Random().nextFloat() <= 0.33 || creature.isInCombat() || isStalking) { + /*if(mobileTemplate.isStalker()) { + setFollowObject((CreatureObject) obj); + setCurrentState(new StalkState()); + } else */ + addDefender((CreatureObject) obj); + + } + }); + } catch (Exception e) { + e.printStackTrace(); + } }, 0, 5000, TimeUnit.MILLISECONDS); } @@ -313,11 +321,15 @@ public class AIActor { scheduler.schedule(new Runnable() { @Override - public void run() { - damageMap.clear(); - followObject = null; - creature.setAttachment("AI", null); - NGECore.getInstance().objectService.destroyObject(creature); + public void run() { + try { + damageMap.clear(); + followObject = null; + creature.setAttachment("AI", null); + NGECore.getInstance().objectService.destroyObject(creature); + } catch (Exception e) { + e.printStackTrace(); + } } }, 2, TimeUnit.MINUTES); } diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java index 5932bb25..6d27303c 100644 --- a/src/services/bazaar/BazaarService.java +++ b/src/services/bazaar/BazaarService.java @@ -873,14 +873,18 @@ public class BazaarService implements INetworkDispatch { public void startVendorUpdateTask(CreatureObject owner, SWGObject vendor) { scheduler.scheduleAtFixedRate(() -> { - if(vendor == null || !((Boolean) vendor.getAttachment("initialized"))) - return; - - float maintenanceRate = 15; - if((Boolean) vendor.getAttachment("onMap")) - maintenanceRate += 6; - vendor.setAttachment("maintenanceAmount", (Integer) vendor.getAttachment("maintenanceAmount") - maintenanceRate); - // TODO add vendor delete after x days + try { + if(vendor == null || !((Boolean) vendor.getAttachment("initialized"))) + return; + + float maintenanceRate = 15; + if((Boolean) vendor.getAttachment("onMap")) + maintenanceRate += 6; + vendor.setAttachment("maintenanceAmount", (Integer) vendor.getAttachment("maintenanceAmount") - maintenanceRate); + // TODO add vendor delete after x days + } catch (Exception e) { + e.printStackTrace(); + } }, 1, 1, TimeUnit.HOURS); } diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 040dca41..c4c74838 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -152,15 +152,17 @@ public class CombatService implements INetworkDispatch { @Override public void run() { - - if(command.getDelayAttackParticle().length() > 0) - target.notifyObservers(new PlayClientEffectLocMessage(command.getDelayAttackParticle(), target.getPlanet().getName(), target.getWorldPosition()), true); - - if(command.getAttackType() == 1) - doSingleTargetCombat(attacker, target, weapon, command, actionCounter); - else if(command.getAttackType() == 0 || command.getAttackType() == 2 || command.getAttackType() == 3) - doAreaCombat(attacker, targetPos, weapon, command, actionCounter, targetParent); - + try { + if(command.getDelayAttackParticle().length() > 0) + target.notifyObservers(new PlayClientEffectLocMessage(command.getDelayAttackParticle(), target.getPlanet().getName(), target.getWorldPosition()), true); + + if(command.getAttackType() == 1) + doSingleTargetCombat(attacker, target, weapon, command, actionCounter); + else if(command.getAttackType() == 0 || command.getAttackType() == 2 || command.getAttackType() == 3) + doAreaCombat(attacker, targetPos, weapon, command, actionCounter, targetParent); + } catch (Exception e) { + e.printStackTrace(); + } } }, 0, (long) (command.getDelayAttackInterval() * 1000), TimeUnit.MILLISECONDS); @@ -169,7 +171,11 @@ public class CombatService implements INetworkDispatch { @Override public void run() { - task.cancel(true); + try { + task.cancel(true); + } catch (Exception e) { + e.printStackTrace(); + } } }, (long) ((command.getDelayAttackInterval() * 1000) * command.getDelayAttackLoops()), TimeUnit.MILLISECONDS); @@ -212,7 +218,11 @@ public class CombatService implements INetworkDispatch { @Override public void run() { - core.objectService.destroyObject(target); + try { + core.objectService.destroyObject(target); + } catch (Exception e) { + e.printStackTrace(); + } } }, 2, TimeUnit.MINUTES); @@ -831,14 +841,16 @@ public class CombatService implements INetworkDispatch { ScheduledFuture incapTask = scheduler.schedule(() -> { synchronized(target.getMutex()) { - - if(target.getPosture() != 13) - return; - - target.setPosture(Posture.Upright); - target.setTurnRadius(1); - target.setSpeedMultiplierBase(1); - + try { + if(target.getPosture() != 13) + return; + + target.setPosture(Posture.Upright); + target.setTurnRadius(1); + target.setSpeedMultiplierBase(1); + } catch (Exception e) { + e.printStackTrace(); + } } }, target.getIncapTimer(), TimeUnit.SECONDS); @@ -1242,14 +1254,16 @@ public class CombatService implements INetworkDispatch { @Override public void run() { - - if(dot.getRemainingDuration() <= 0) { - target.removeDot(dot); - dot.getTask().cancel(true); + try { + if(dot.getRemainingDuration() <= 0) { + target.removeDot(dot); + dot.getTask().cancel(true); + } + + doDotDamageTick(attacker, target, command, dot); + } catch (Exception e) { + e.printStackTrace(); } - - doDotDamageTick(attacker, target, command, dot); - } }, 10, 2000, TimeUnit.MILLISECONDS); @@ -1358,14 +1372,16 @@ public class CombatService implements INetworkDispatch { @Override public void run() { - - if(dot.getRemainingDuration() <= 0) { - target.removeDot(dot); - dot.getTask().cancel(true); + try { + if(dot.getRemainingDuration() <= 0) { + target.removeDot(dot); + dot.getTask().cancel(true); + } + + doHealOverTimeTick(healer, target, command, dot); + } catch (Exception e) { + e.printStackTrace(); } - - doHealOverTimeTick(healer, target, command, dot); - } diff --git a/src/services/gcw/FactionService.java b/src/services/gcw/FactionService.java index fac08cb7..df74bf0c 100644 --- a/src/services/gcw/FactionService.java +++ b/src/services/gcw/FactionService.java @@ -396,16 +396,20 @@ public class FactionService implements INetworkDispatch { } scheduler.schedule(() -> { - actor.setFaction(faction); - actor.setFactionStatus(FactionStatus.OnLeave); - actor.setPvpBitmask(0); - PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); - if (player != null) { - player.resetGcwPoints(); - player.resetPvpKills(); - player.setCurrentRank(1); + try { + actor.setFaction(faction); + actor.setFactionStatus(FactionStatus.OnLeave); + actor.setPvpBitmask(0); + PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); + if (player != null) { + player.resetGcwPoints(); + player.resetPvpKills(); + player.setCurrentRank(1); + } + actor.updatePvpStatus(); + } catch (Exception e) { + e.printStackTrace(); } - actor.updatePvpStatus(); }, 1, TimeUnit.SECONDS); } @@ -462,10 +466,14 @@ public class FactionService implements INetworkDispatch { final String finalMessage = message; scheduler.schedule(() -> { - actor.setPvpBitmask(0); - actor.setFactionStatus(factionStatus); - actor.updatePvpStatus(); - actor.sendSystemMessage("@faction_recruiter:" + finalMessage, DisplayType.Broadcast); + try { + actor.setPvpBitmask(0); + actor.setFactionStatus(factionStatus); + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:" + finalMessage, DisplayType.Broadcast); + } catch (Exception e) { + e.printStackTrace(); + } }, time, TimeUnit.SECONDS); } @@ -495,17 +503,21 @@ public class FactionService implements INetworkDispatch { } scheduler.schedule(() -> { - actor.setPvpBitmask(0); - actor.setFactionStatus(FactionStatus.OnLeave); - actor.setFaction(""); - PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); - if (player != null) { - player.resetGcwPoints(); - player.resetPvpKills(); - player.setCurrentRank(0); + try { + actor.setPvpBitmask(0); + actor.setFactionStatus(FactionStatus.OnLeave); + actor.setFaction(""); + PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); + if (player != null) { + player.resetGcwPoints(); + player.resetPvpKills(); + player.setCurrentRank(0); + } + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:resign_complete", DisplayType.Broadcast); + } catch (Exception e) { + e.printStackTrace(); } - actor.updatePvpStatus(); - actor.sendSystemMessage("@faction_recruiter:resign_complete", DisplayType.Broadcast); }, time, TimeUnit.SECONDS); } diff --git a/src/services/gcw/GCWService.java b/src/services/gcw/GCWService.java index f1c775f6..6a47d4cd 100644 --- a/src/services/gcw/GCWService.java +++ b/src/services/gcw/GCWService.java @@ -308,7 +308,7 @@ public class GCWService implements INetworkDispatch { }, 2, 2, TimeUnit.DAYS); scheduler.scheduleAtFixedRate(new Runnable() { - @Override public void run() { gcwUpdate(); } + @Override public void run() { try { gcwUpdate(); } catch (Exception e) { e.printStackTrace(); } } private void gcwUpdate() { int nextUpdateTime = (int) calculateNextUpdateTime(); diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 8c810f91..294efdba 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -187,38 +187,40 @@ public class HousingService implements INetworkDispatch { AtomicReference> ref = new AtomicReference>(); ref.set(scheduler.scheduleAtFixedRate(() -> { - - if(core.objectService.getObject(building.getObjectID()) == null) - ref.get().cancel(true); - - int amount = building.getBMR(); - boolean needSave = false; - CreatureObject owner = (CreatureObject) core.objectService.getObject((long) building.getAttachment("structureOwner")); - if(owner == null) { - needSave = true; - owner = core.objectService.getCreatureFromDB((long) building.getAttachment("structureOwner")); - } - if(building.getMaintenanceAmount() >= amount) { - building.setMaintenanceAmount(building.getMaintenanceAmount() - amount); - } else { - if(owner == null) + try { + if(core.objectService.getObject(building.getObjectID()) == null) ref.get().cancel(true); - if(owner.getBankCredits() >= amount) { - owner.setBankCredits(owner.getBankCredits() - amount); - } else if(owner.getCashCredits() >= amount) { - owner.setCashCredits(owner.getCashCredits() - amount); - } else { - if(building.getAttachment("isCondemned") != null && !((boolean) building.getAttachment("isCondemned"))) { - building.setAttachment("isCondemned", true); - building.setBuildingName(building.getBuildingName() + " \\#FF0000(CONDEMNED)\\#FFFFFF"); - } - building.setOutstandingMaintenance(building.getOutstandingMaintenance() + amount); - // TODO: lock down building, add option to pay outstanding maintenance and uncondemn building + + int amount = building.getBMR(); + boolean needSave = false; + CreatureObject owner = (CreatureObject) core.objectService.getObject((long) building.getAttachment("structureOwner")); + if(owner == null) { + needSave = true; + owner = core.objectService.getCreatureFromDB((long) building.getAttachment("structureOwner")); } + if(building.getMaintenanceAmount() >= amount) { + building.setMaintenanceAmount(building.getMaintenanceAmount() - amount); + } else { + if(owner == null) + ref.get().cancel(true); + if(owner.getBankCredits() >= amount) { + owner.setBankCredits(owner.getBankCredits() - amount); + } else if(owner.getCashCredits() >= amount) { + owner.setCashCredits(owner.getCashCredits() - amount); + } else { + if(building.getAttachment("isCondemned") != null && !((boolean) building.getAttachment("isCondemned"))) { + building.setAttachment("isCondemned", true); + building.setBuildingName(building.getBuildingName() + " \\#FF0000(CONDEMNED)\\#FFFFFF"); + } + building.setOutstandingMaintenance(building.getOutstandingMaintenance() + amount); + // TODO: lock down building, add option to pay outstanding maintenance and uncondemn building + } + } + if(needSave && owner != null) + core.objectService.persistObject(owner.getObjectID(), owner, core.getSWGObjectODB()); + } catch (Exception e) { + e.printStackTrace(); } - if(needSave && owner != null) - core.objectService.persistObject(owner.getObjectID(), owner, core.getSWGObjectODB()); - }, (long) building.getAttachment("nextMaintenance") - System.currentTimeMillis(), 3600000, TimeUnit.MILLISECONDS)); } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index d5acc45c..f9e7ab2f 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -488,7 +488,11 @@ public class ObjectService implements INetworkDispatch { @Override public void run() { - destroyObject(object); + try { + destroyObject(object); + } catch (Exception e) { + e.printStackTrace(); + } } }, seconds, TimeUnit.SECONDS); @@ -512,7 +516,11 @@ public class ObjectService implements INetworkDispatch { @Override public void run() { - NGECore.getInstance().spawnService.spawnCreature(Template, objectId, planet.getName(), cellId, position.x, position.y, position.z, orientation.w, orientation.x, orientation.y, orientation.z, level); + try { + NGECore.getInstance().spawnService.spawnCreature(Template, objectId, planet.getName(), cellId, position.x, position.y, position.z, orientation.w, orientation.x, orientation.y, orientation.z, level); + } catch (Exception e) { + e.printStackTrace(); + } } }, ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime(), TimeUnit.SECONDS); diff --git a/src/services/resources/HarvesterService.java b/src/services/resources/HarvesterService.java index cd0a1306..237674c3 100644 --- a/src/services/resources/HarvesterService.java +++ b/src/services/resources/HarvesterService.java @@ -175,7 +175,11 @@ public class HarvesterService implements INetworkDispatch { @Override public void run() { - ServiceProcessing(); + try { + ServiceProcessing(); + } catch (Exception e) { + e.printStackTrace(); + } } }, 10, 5000, TimeUnit.MILLISECONDS); @@ -198,10 +202,10 @@ public class HarvesterService implements INetworkDispatch { } catch (InterruptedException e1) { System.err.println("InterruptedException IN HARVESTERSERVICE !!! " + e1.getMessage()); } - } catch (ExecutionException e2) { - System.err.println("EXCEPTION IN HARVESTERSERVICE !!! " + e2.getMessage()); - System.err.println("EXCEPTION CAUSE : " + e2.getCause()); - } + } catch (ExecutionException e2) { + System.err.println("EXCEPTION IN HARVESTERSERVICE !!! " + e2.getMessage()); + System.err.println("EXCEPTION CAUSE : " + e2.getCause()); + } } } diff --git a/src/services/resources/ResourceService.java b/src/services/resources/ResourceService.java index 78612dd9..79c1e38a 100644 --- a/src/services/resources/ResourceService.java +++ b/src/services/resources/ResourceService.java @@ -11566,40 +11566,42 @@ public class ResourceService implements INetworkDispatch { actor.sendSystemMessage("@skl_use:milk_begin", (byte) 0); scheduler.schedule(() -> { - - if(actor.getInventoryItemCount() >= 80) { - actor.sendSystemMessage("@skl_use:milk_inventory_full", (byte) 0); - ai.setMilkState(MilkState.NOTYETMILKED); - return; + try { + if(actor.getInventoryItemCount() >= 80) { + actor.sendSystemMessage("@skl_use:milk_inventory_full", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(target.getPosture() == 14) { + actor.sendSystemMessage("@skl_use:milk_cant_milk_the_dead", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(!actor.inRange(target.getWorldPosition(), 5)) { + actor.sendSystemMessage("@skl_use:milk_too_far", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(actor.isInCombat()) { + actor.sendSystemMessage("@skl_use:milk_combat", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(new Random().nextFloat() <= 0.05f) { + actor.sendSystemMessage("@skl_use:milk_not_hidden", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + ai.addDefender(actor); + return; + } + + giveMilk(actor, target); + } catch (Exception e) { + e.printStackTrace(); } - - if(target.getPosture() == 14) { - actor.sendSystemMessage("@skl_use:milk_cant_milk_the_dead", (byte) 0); - ai.setMilkState(MilkState.NOTYETMILKED); - return; - } - - if(!actor.inRange(target.getWorldPosition(), 5)) { - actor.sendSystemMessage("@skl_use:milk_too_far", (byte) 0); - ai.setMilkState(MilkState.NOTYETMILKED); - return; - } - - if(actor.isInCombat()) { - actor.sendSystemMessage("@skl_use:milk_combat", (byte) 0); - ai.setMilkState(MilkState.NOTYETMILKED); - return; - } - - if(new Random().nextFloat() <= 0.05f) { - actor.sendSystemMessage("@skl_use:milk_not_hidden", (byte) 0); - ai.setMilkState(MilkState.NOTYETMILKED); - ai.addDefender(actor); - return; - } - - giveMilk(actor, target); - }, 10000, TimeUnit.MILLISECONDS); } diff --git a/src/services/travel/TravelPoint.java b/src/services/travel/TravelPoint.java index 98dd1930..fb188f36 100644 --- a/src/services/travel/TravelPoint.java +++ b/src/services/travel/TravelPoint.java @@ -160,30 +160,34 @@ public class TravelPoint { scheduler.execute(new Runnable() { @Override public void run() { - while(getShuttle() != null) { - - try { - setShuttleAvailable(true); - setShuttleLanding(false); - Thread.sleep(120000); - setShuttleAvailable(false); - setShuttleDeparting(true); - setDepartureTimestamp(System.currentTimeMillis() / 1000); - getShuttle().setPosture((byte) 2); - setShuttleDeparting(false); - Thread.sleep(60000); - setShuttleLanding(true); - getShuttle().setPosture((byte) 0); - if(isStarport()) - Thread.sleep(21000); - else - Thread.sleep(17000); - + try { + while(getShuttle() != null) { + + try { + setShuttleAvailable(true); + setShuttleLanding(false); + Thread.sleep(120000); + setShuttleAvailable(false); + setShuttleDeparting(true); + setDepartureTimestamp(System.currentTimeMillis() / 1000); + getShuttle().setPosture((byte) 2); + setShuttleDeparting(false); + Thread.sleep(60000); + setShuttleLanding(true); + getShuttle().setPosture((byte) 0); + if(isStarport()) + Thread.sleep(21000); + else + Thread.sleep(17000); + + + } catch (InterruptedException e) { + e.printStackTrace(); + } - } catch (InterruptedException e) { - e.printStackTrace(); } - + } catch (Exception e) { + e.printStackTrace(); } }