mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-22 11:54:39 +01:00
Handle Unlocking of Waypoints and Statues (#1608)
Original commits: * Add necessary protos for scene point/area unlocking. * Rename PlayerOpenStateManager to PlayerProgressManager and move data to Player. * Handle unlocking of waypoints. * Add primo rewards for waypoint unlock. * Statue unlocking. * Add statue quest on player login. * I forgor to add an unlock command. * Give EXP as reward, fire quest trigger, make EXP UI show up.
This commit is contained in:
@@ -316,7 +316,7 @@ public class GameMainQuest {
|
||||
List<QuestData.QuestCondition> finishCond = subQuestWithCond.getQuestData().getFinishCond();
|
||||
int[] finish = new int[finishCond.size()];
|
||||
|
||||
for (int i = 0; i < subQuestWithCond.getQuestData().getFinishCond().size(); i++) {
|
||||
for (int i = 0; i < finishCond.size(); i++) {
|
||||
QuestData.QuestCondition condition = finishCond.get(i);
|
||||
boolean result = this.getOwner().getServer().getQuestSystem().triggerContent(subQuestWithCond, condition, paramStr, params);
|
||||
finish[i] = result ? 1 : 0;
|
||||
|
||||
@@ -13,9 +13,15 @@ public class ContentCompleteTalk extends QuestBaseHandler {
|
||||
|
||||
@Override
|
||||
public boolean execute(GameQuest quest, QuestCondition condition, String paramStr, int... params) {
|
||||
GameMainQuest checkMainQuest = quest.getOwner().getQuestManager().getMainQuestById(params[0]/100);
|
||||
if (checkMainQuest == null) {return false;}
|
||||
MainQuestData.TalkData talkData = checkMainQuest.getTalks().get(Integer.valueOf(params[0]));
|
||||
return talkData == null || condition.getParamStr().contains(paramStr) || checkMainQuest.getChildQuestById(params[0]) != null;
|
||||
GameMainQuest checkMainQuest = quest.getOwner().getQuestManager().getMainQuestById(params[0] / 100);
|
||||
if (checkMainQuest == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MainQuestData.TalkData talkData = checkMainQuest.getTalks().get(condition.getParam()[0]);
|
||||
return talkData != null;
|
||||
|
||||
// This expression makes zero sense.
|
||||
// return talkData == null || condition.getParamStr().contains(paramStr) || checkMainQuest.getChildQuestById(params[0]) != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.game.quest.exec;
|
||||
|
||||
import emu.grasscutter.data.excels.QuestData;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@QuestValue(QuestTrigger.QUEST_EXEC_UNLOCK_AREA)
|
||||
public class ExecUnlockArea extends QuestExecHandler {
|
||||
@Override
|
||||
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
|
||||
// Unlock the trans point for the player.
|
||||
int sceneId = Integer.parseInt(paramStr[0]);
|
||||
int areaId = Integer.parseInt(paramStr[1]);
|
||||
quest.getOwner().getProgressManager().unlockSceneArea(sceneId, areaId);
|
||||
|
||||
// Done.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.game.quest.exec;
|
||||
|
||||
import emu.grasscutter.data.excels.QuestData;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.game.quest.QuestValue;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.game.quest.handlers.QuestExecHandler;
|
||||
|
||||
@QuestValue(QuestTrigger.QUEST_EXEC_UNLOCK_POINT)
|
||||
public class ExecUnlockPoint extends QuestExecHandler {
|
||||
@Override
|
||||
public boolean execute(GameQuest quest, QuestData.QuestExecParam condition, String... paramStr) {
|
||||
// Unlock the trans point for the player.
|
||||
int sceneId = Integer.parseInt(paramStr[0]);
|
||||
int pointId = Integer.parseInt(paramStr[1]);
|
||||
boolean isStatue = quest.getMainQuestId() == 303;
|
||||
|
||||
quest.getOwner().getProgressManager().unlockTransPoint(sceneId, pointId, isStatue);
|
||||
|
||||
// Done.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user