mirror of https://github.com/PikaMug/Quests.git
Cancel timer does not auto-fail quest, fixes #2113
This commit is contained in:
parent
8d4b39c9d7
commit
56a75acc37
|
@ -1075,6 +1075,12 @@ public class Quest implements IQuest {
|
|||
if (preEvent.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
for (final Map.Entry<Integer, IQuest> entry : quester.getTimers().entrySet()) {
|
||||
if (entry.getValue().getId().equals(getId())) {
|
||||
plugin.getServer().getScheduler().cancelTask(entry.getKey());
|
||||
quester.getTimers().remove(entry.getKey());
|
||||
}
|
||||
}
|
||||
final Player player = quester.getPlayer();
|
||||
if (!ignoreFailAction) {
|
||||
final IStage stage = quester.getCurrentStage(this);
|
||||
|
|
|
@ -29,8 +29,10 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Action implements IAction {
|
||||
|
@ -419,44 +421,19 @@ public class Action implements IAction {
|
|||
player.sendMessage(ChatColor.GREEN + Lang.get(player, "timerStart")
|
||||
.replace("<time>", ChatColor.RED + MiscUtil.getTime(timer * 1000L) + ChatColor.GREEN)
|
||||
.replace("<quest>", ChatColor.GOLD + quest.getName() + ChatColor.GREEN));
|
||||
if (timer > 60) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 60, false)
|
||||
.runTaskLater(plugin, (timer - 60) * 20L).getTaskId(), quest);
|
||||
final List<Integer> toNotify = Arrays.asList(60, 30, 10, 5, 4, 3, 2, 1);
|
||||
for (final int seconds : toNotify) {
|
||||
if (timer > seconds) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, seconds)
|
||||
.runTaskLater(plugin, (timer - seconds) * 20L).getTaskId(), quest);
|
||||
}
|
||||
}
|
||||
if (timer > 30) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 30, false)
|
||||
.runTaskLater(plugin, (timer - 30) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 10) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 10, false)
|
||||
.runTaskLater(plugin, (timer - 10) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 5) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 5, false)
|
||||
.runTaskLater(plugin, (timer - 5) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 4) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 4, false)
|
||||
.runTaskLater(plugin, (timer - 4) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 3) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 3, false)
|
||||
.runTaskLater(plugin, (timer - 3) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 2) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 2, false)
|
||||
.runTaskLater(plugin, (timer - 2) * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (timer > 1) {
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 1, false)
|
||||
.runTaskLater(plugin, (timer - 1) * 20L).getTaskId(), quest);
|
||||
}
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 0, true)
|
||||
quester.getTimers().put(new ActionTimer(quester, quest, 0)
|
||||
.runTaskLater(plugin, timer * 20L).getTaskId(), quest);
|
||||
}
|
||||
if (cancelTimer) {
|
||||
for (final Map.Entry<Integer, IQuest> entry : quester.getTimers().entrySet()) {
|
||||
if (entry.getValue().getName().equals(quest.getName())) {
|
||||
if (entry.getValue().getId().equals(quest.getId())) {
|
||||
plugin.getServer().getScheduler().cancelTask(entry.getKey());
|
||||
quester.getTimers().remove(entry.getKey());
|
||||
}
|
||||
|
|
|
@ -935,13 +935,6 @@ public class PlayerListener implements Listener {
|
|||
currentStage.getDisconnectAction().fire(quester, quest);
|
||||
}
|
||||
}
|
||||
for (final Integer timerId : quester.getTimers().keySet()) {
|
||||
plugin.getServer().getScheduler().cancelTask(timerId);
|
||||
if (quester.getTimers().containsKey(timerId)) {
|
||||
quester.getTimers().get(timerId).failQuest(quester);
|
||||
quester.removeTimer(timerId);
|
||||
}
|
||||
}
|
||||
if (!plugin.getSettings().canGenFilesOnJoin()) {
|
||||
if (quester.hasBaseData()) {
|
||||
quester.saveData();
|
||||
|
|
|
@ -24,19 +24,17 @@ public class ActionTimer extends BukkitRunnable {
|
|||
private final IQuester quester;
|
||||
private final IQuest quest;
|
||||
private final int time;
|
||||
private final boolean last;
|
||||
|
||||
public ActionTimer(final IQuester quester, final IQuest quest, final int time, final boolean last) {
|
||||
public ActionTimer(final IQuester quester, final IQuest quest, final int time) {
|
||||
this.quester = quester;
|
||||
this.quest = quest;
|
||||
this.time = time;
|
||||
this.last = last;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
quester.removeTimer(getTaskId());
|
||||
if (last) {
|
||||
if (time < 1) {
|
||||
quest.failQuest(quester, false);
|
||||
quester.updateJournal();
|
||||
} else {
|
||||
|
|
|
@ -22,6 +22,7 @@ actions:
|
|||
timer: 40
|
||||
CancelTimer:
|
||||
cancel-timer: true
|
||||
fail-quest: true
|
||||
RunCommand:
|
||||
message: "<red>Answer to life, the universe, and everything?"
|
||||
commands:
|
||||
|
|
|
@ -83,7 +83,7 @@ quests:
|
|||
break-block-durability:
|
||||
- 0
|
||||
start-event: TimerStart
|
||||
finish-event: CancelTimer
|
||||
disconnect-event: CancelTimer
|
||||
rewards:
|
||||
items:
|
||||
- name-GOLD_INGOT:amount-1
|
||||
|
|
Loading…
Reference in New Issue