mirror of https://github.com/PikaMug/Quests.git
Incomplete stage timer workaround, fixes #2172
This commit is contained in:
parent
82de833b60
commit
969bac022d
|
@ -43,6 +43,7 @@ import me.pikamug.quests.quests.components.Planner;
|
||||||
import me.pikamug.quests.quests.components.Requirements;
|
import me.pikamug.quests.quests.components.Requirements;
|
||||||
import me.pikamug.quests.quests.components.Rewards;
|
import me.pikamug.quests.quests.components.Rewards;
|
||||||
import me.pikamug.quests.quests.components.Stage;
|
import me.pikamug.quests.quests.components.Stage;
|
||||||
|
import me.pikamug.quests.tasks.BukkitStageTimer;
|
||||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||||
import me.pikamug.quests.util.BukkitInventoryUtil;
|
import me.pikamug.quests.util.BukkitInventoryUtil;
|
||||||
import me.pikamug.quests.util.BukkitItemUtil;
|
import me.pikamug.quests.util.BukkitItemUtil;
|
||||||
|
@ -263,7 +264,7 @@ public class BukkitQuest implements Quest {
|
||||||
/**
|
/**
|
||||||
* Force player to proceed to the next ordered stage
|
* Force player to proceed to the next ordered stage
|
||||||
*
|
*
|
||||||
* @param quester Player to force
|
* @param quester Player to force progression
|
||||||
* @param allowSharedProgress Whether to distribute progress to fellow questers
|
* @param allowSharedProgress Whether to distribute progress to fellow questers
|
||||||
*/
|
*/
|
||||||
public void nextStage(final Quester quester, final boolean allowSharedProgress) {
|
public void nextStage(final Quester quester, final boolean allowSharedProgress) {
|
||||||
|
@ -284,41 +285,49 @@ public class BukkitQuest implements Quest {
|
||||||
quester.findCompassTarget();
|
quester.findCompassTarget();
|
||||||
}
|
}
|
||||||
if (currentStage.getDelay() < 0) {
|
if (currentStage.getDelay() < 0) {
|
||||||
if (currentStage.getFinishAction() != null) {
|
doNextStage(quester, allowSharedProgress);
|
||||||
currentStage.getFinishAction().fire(quester, this);
|
|
||||||
}
|
|
||||||
if (quester.getCurrentQuests().get(this) == (orderedStages.size() - 1)) {
|
|
||||||
if (currentStage.getScript() != null) {
|
|
||||||
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null);
|
|
||||||
}
|
|
||||||
completeQuest(quester);
|
|
||||||
} else {
|
|
||||||
setStage(quester, quester.getCurrentQuests().get(this) + 1);
|
|
||||||
}
|
|
||||||
if (quester.getQuestDataOrDefault(this) != null) {
|
|
||||||
quester.getQuestDataOrDefault(this).setDelayStartTime(0);
|
|
||||||
quester.getQuestDataOrDefault(this).setDelayTimeLeft(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Multiplayer
|
|
||||||
if (allowSharedProgress && options.getShareProgressLevel() == 3) {
|
|
||||||
final List<Quester> mq = quester.getMultiplayerQuesters(this);
|
|
||||||
for (final Quester qq : mq) {
|
|
||||||
if (currentStage.equals(qq.getCurrentStage(this))) {
|
|
||||||
nextStage(qq, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
quester.startStageTimer(this);
|
// Here we avoid BukkitStageTimer as the stage objectives are incomplete
|
||||||
|
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
||||||
|
doNextStage(quester, allowSharedProgress);
|
||||||
|
}, (long) (currentStage.getDelay() * 0.02));
|
||||||
}
|
}
|
||||||
quester.updateJournal();
|
quester.updateJournal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void doNextStage(final Quester quester, final boolean allowSharedProgress) {
|
||||||
|
final Stage currentStage = quester.getCurrentStage(this);
|
||||||
|
if (currentStage.getFinishAction() != null) {
|
||||||
|
currentStage.getFinishAction().fire(quester, this);
|
||||||
|
}
|
||||||
|
if (quester.getCurrentQuests().get(this) == (orderedStages.size() - 1)) {
|
||||||
|
if (currentStage.getScript() != null) {
|
||||||
|
plugin.getDenizenTrigger().runDenizenScript(currentStage.getScript(), quester, null);
|
||||||
|
}
|
||||||
|
completeQuest(quester);
|
||||||
|
} else {
|
||||||
|
setStage(quester, quester.getCurrentQuests().get(this) + 1);
|
||||||
|
}
|
||||||
|
if (quester.getQuestDataOrDefault(this) != null) {
|
||||||
|
quester.getQuestDataOrDefault(this).setDelayStartTime(0);
|
||||||
|
quester.getQuestDataOrDefault(this).setDelayTimeLeft(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Multiplayer
|
||||||
|
if (allowSharedProgress && options.getShareProgressLevel() == 3) {
|
||||||
|
final List<Quester> mq = quester.getMultiplayerQuesters(this);
|
||||||
|
for (final Quester qq : mq) {
|
||||||
|
if (currentStage.equals(qq.getCurrentStage(this))) {
|
||||||
|
nextStage(qq, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force player to proceed to the specified stage
|
* Force player to proceed to the specified stage
|
||||||
*
|
*
|
||||||
* @param quester Player to force
|
* @param quester Player to force progression
|
||||||
* @param stage Stage number to specify
|
* @param stage Stage number to specify
|
||||||
* @throws IndexOutOfBoundsException if stage does not exist
|
* @throws IndexOutOfBoundsException if stage does not exist
|
||||||
*/
|
*/
|
||||||
|
@ -907,6 +916,10 @@ public class BukkitQuest implements Quest {
|
||||||
quester.sendMessage("- " + message);
|
quester.sendMessage("- " + message);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (rewards.getExp() > 0) {
|
||||||
|
quester.sendMessage("- " + ChatColor.DARK_GREEN + rewards.getExp() + " "
|
||||||
|
+ BukkitLang.get(p, "experience"));
|
||||||
|
}
|
||||||
if (rewards.getQuestPoints() > 0) {
|
if (rewards.getQuestPoints() > 0) {
|
||||||
quester.sendMessage("- " + ChatColor.DARK_GREEN + rewards.getQuestPoints() + " "
|
quester.sendMessage("- " + ChatColor.DARK_GREEN + rewards.getQuestPoints() + " "
|
||||||
+ BukkitLang.get(p, "questPoints"));
|
+ BukkitLang.get(p, "questPoints"));
|
||||||
|
|
|
@ -37,6 +37,9 @@ public class BukkitStageTimer implements Runnable {
|
||||||
if (quester.getCurrentStage(quest) == null) {
|
if (quester.getCurrentStage(quest) == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!quester.testComplete(quest)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (quester.getCurrentStage(quest).getFinishAction() != null) {
|
if (quester.getCurrentStage(quest).getFinishAction() != null) {
|
||||||
quester.getCurrentStage(quest).getFinishAction().fire(quester, quest);
|
quester.getCurrentStage(quest).getFinishAction().fire(quester, quest);
|
||||||
}
|
}
|
||||||
|
@ -45,7 +48,7 @@ public class BukkitStageTimer implements Runnable {
|
||||||
plugin.getDependencies().runDenizenScript(quester.getCurrentStage(quest).getScript(), quester, null);
|
plugin.getDependencies().runDenizenScript(quester.getCurrentStage(quest).getScript(), quester, null);
|
||||||
}
|
}
|
||||||
quest.completeQuest(quester);
|
quest.completeQuest(quester);
|
||||||
} else if (quester.testComplete(quest)) {
|
} else {
|
||||||
final int stageNum = quester.getCurrentQuests().get(quest) + 1;
|
final int stageNum = quester.getCurrentQuests().get(quest) + 1;
|
||||||
quester.getQuestDataOrDefault(quest).setDelayStartTime(0);
|
quester.getQuestDataOrDefault(quest).setDelayStartTime(0);
|
||||||
quester.getQuestDataOrDefault(quest).setDelayTimeLeft(-1);
|
quester.getQuestDataOrDefault(quest).setDelayTimeLeft(-1);
|
||||||
|
|
Loading…
Reference in New Issue