Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix battle in front of glowy stag god #2188

Merged
merged 2 commits into from
Jun 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions src/main/java/emu/grasscutter/game/player/PlayerProgress.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
import dev.morphia.annotations.Transient;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.quest.enums.QuestContent;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand All @@ -29,10 +30,10 @@ public class PlayerProgress {
// keep track of EXEC_ADD_QUEST_PROGRESS count, will be used in CONTENT_ADD_QUEST_PROGRESS
// not sure where to put this, this should be saved to DB but not to individual quest, since
// it will be hard to loop and compare
private Map<Integer, Integer> questProgressCountMap;
private Map<String, Integer> questProgressCountMap;

public PlayerProgress() {
this.questProgressCountMap = new Int2IntOpenHashMap();
this.questProgressCountMap = new ConcurrentHashMap<>();
this.completedDungeons = new IntArrayList();
this.itemHistory = new Int2ObjectOpenHashMap<>();
}
Expand Down Expand Up @@ -70,15 +71,15 @@ public int addToItemHistory(int itemId, int count) {
return itemEntry.addToObtainedCount(count);
}

public int getCurrentProgress(int progressId) {
public int getCurrentProgress(String progressId) {
return questProgressCountMap.getOrDefault(progressId, -1);
}

public int addToCurrentProgress(int progressId, int count) {
public int addToCurrentProgress(String progressId, int count) {
return questProgressCountMap.merge(progressId, count, Integer::sum);
}

public int resetCurrentProgress(int progressId) {
public int resetCurrentProgress(String progressId) {
return questProgressCountMap.merge(progressId, 0, Integer::min);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ public void addReplaceCostumes() {

/** Quest progress */
public void addQuestProgress(int id, int count) {
var newCount = player.getPlayerProgress().addToCurrentProgress(id, count);
var newCount = player.getPlayerProgress().addToCurrentProgress(String.valueOf(id), count);
player.save();
player
.getQuestManager()
Expand Down
19 changes: 17 additions & 2 deletions src/main/java/emu/grasscutter/game/quest/GameQuest.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,12 @@ public GameQuest(GameMainQuest mainQuest, QuestData questData) {
this.state = QuestState.QUEST_STATE_UNSTARTED;
this.triggerData = new HashMap<>();
this.triggers = new HashMap<>();
this.finishProgressList = new int[questData.getFinishCond().size()];
this.failProgressList = new int[questData.getFailCond().size()];
this.finishTime = 0;
}

public void start() {
this.clearProgress(false);
this.acceptTime = Utils.getCurrentSeconds();
this.startTime = this.acceptTime;
this.startGameDay = getOwner().getWorld().getTotalGameTimeDays();
Expand Down Expand Up @@ -153,17 +155,30 @@ public boolean clearProgress(boolean notifyDelete) {
// TODO improve
var oldState = state;
if (questData.getFinishCond() != null && questData.getFinishCond().size() != 0) {
for(var condition : questData.getFinishCond()) {
if(condition.getType() == QuestContent.QUEST_CONTENT_LUA_NOTIFY) {
this.getOwner().getPlayerProgress().resetCurrentProgress(condition.getParamStr());
}
}
this.finishProgressList = new int[questData.getFinishCond().size()];
}

if (questData.getFailCond() != null && questData.getFailCond().size() != 0) {
for(var condition : questData.getFailCond()) {
if(condition.getType() == QuestContent.QUEST_CONTENT_LUA_NOTIFY) {
this.getOwner().getPlayerProgress().resetCurrentProgress(condition.getParamStr());
}
}
this.failProgressList = new int[questData.getFailCond().size()];
}

this.getOwner().getPlayerProgress().resetCurrentProgress(String.valueOf(this.subQuestId));

setState(QuestState.QUEST_STATE_UNSTARTED);
finishTime = 0;
acceptTime = 0;
startTime = 0;
this.getOwner().getPlayerProgress().resetCurrentProgress(this.subQuestId);

if (oldState == QuestState.QUEST_STATE_UNSTARTED) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class ContentAddQuestProgress extends BaseContent {
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
val progressId = condition.getParam()[0];
val currentCount = quest.getOwner().getPlayerProgress().getCurrentProgress(progressId);
val currentCount = quest.getOwner().getPlayerProgress().getCurrentProgress(String.valueOf(progressId));

// if the condition count is 0 I think it is safe to assume that the
// condition count from EXEC only needs to be 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ public class ContentLuaNotify extends BaseContent {
@Override
public boolean execute(
GameQuest quest, QuestData.QuestContentCondition condition, String paramStr, int... params) {
return condition.getParamStr().equals(paramStr);
return condition.getParamStr().equals(paramStr) && condition.getCount() <= quest.getOwner().getPlayerProgress().getCurrentProgress(paramStr);
}
}
1 change: 1 addition & 0 deletions src/main/java/emu/grasscutter/scripts/ScriptLib.java
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,7 @@ public int AddQuestProgress(String var1){
var1);

for(var player : getSceneScriptManager().getScene().getPlayers()){
player.getPlayerProgress().addToCurrentProgress(var1, 1);
player.getQuestManager().queueEvent(QuestCond.QUEST_COND_LUA_NOTIFY, var1);
player.getQuestManager().queueEvent(QuestContent.QUEST_CONTENT_LUA_NOTIFY, var1);
}
Expand Down