RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PlayerRemovalTask.java
1package com.osroyale.game.task.impl;
2
3import com.osroyale.content.activity.Activity;
4import com.osroyale.content.activity.impl.duelarena.DuelArenaActivity;
5import com.osroyale.content.combat.cannon.CannonManager;
6import com.osroyale.game.task.TickableTask;
7import com.osroyale.game.world.entity.mob.player.Player;
8import com.osroyale.game.world.entity.mob.player.persist.PlayerSerializer;
9import com.osroyale.util.Stopwatch;
10
11import java.util.concurrent.TimeUnit;
12
36
37public class PlayerRemovalTask extends TickableTask {
38
39 private final Player player;
40 private final Stopwatch stopwatch = Stopwatch.start();
41 private final boolean force;
42 private boolean flag;
43
44 public PlayerRemovalTask(Player player, boolean force) {
45 super(true, 0);
46 this.player = player;
47 this.force = force;
48 }
49
50 @Override
51 protected void tick() {
52
53 // wait till player death task is finished
54 if (player.isDead()) {
55 return;
56 }
57
58 // player is in combat for too long
59 if (player.getCombat().isUnderAttack() && stopwatch.elapsedTime(TimeUnit.SECONDS) < 60) {
60 return;
61 }
62
63 // if a player is in an activity they can logout if the activity lets them or unless 60 seconds has elapsed
64 if (Activity.evaluate(player, it -> !it.canLogout(player)) && (Activity.search(player, DuelArenaActivity.class).isPresent() || stopwatch.elapsedTime(TimeUnit.SECONDS) < 60)) {
65 return;
66 }
67
68 if (!flag) {
69 CannonManager.logout(player);
70 PlayerSerializer.save(player);
71 flag = true;
72 return;
73 }
74
75 // make sure the players account has saved first, player saving is on a different thread so its gonna take
76 // a few seconds
77 if (player.saved.get()) {
78 cancel();
79 }
80
81 }
82
83 @Override
84 protected void onCancel(boolean logout) {
85 player.unregister();
86 }
87
88}
synchronized final void cancel()
Definition Task.java:147