quest fix & personal line impl

This commit is contained in:
Akka
2022-07-05 20:41:07 +08:00
committed by Luke H-W
parent 7bae35f51b
commit 910008216f
51 changed files with 924 additions and 200 deletions

View File

@@ -1,7 +1,6 @@
package emu.grasscutter.game.quest;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import emu.grasscutter.server.packet.send.PacketCodexDataUpdateNotify;
import org.bson.types.ObjectId;
@@ -31,20 +30,21 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@Entity(value = "quests", useDiscriminator = false)
public class GameMainQuest {
@Id private ObjectId id;
@Indexed private int ownerUid;
@Transient private Player owner;
private Map<Integer, GameQuest> childQuests;
private int parentQuestId;
private int[] questVars;
private ParentQuestState state;
private boolean isFinished;
List<QuestGroupSuite> questGroupSuites;
@Deprecated // Morphia only. Do not use.
public GameMainQuest() {}
public GameMainQuest(Player player, int parentQuestId) {
this.owner = player;
this.ownerUid = player.getUid();
@@ -52,12 +52,13 @@ public class GameMainQuest {
this.childQuests = new HashMap<>();
this.questVars = new int[5];
this.state = ParentQuestState.PARENT_QUEST_STATE_NONE;
this.questGroupSuites = new ArrayList<>();
}
public int getParentQuestId() {
return parentQuestId;
}
public int getOwnerUid() {
return ownerUid;
}
@@ -74,7 +75,7 @@ public class GameMainQuest {
public Map<Integer, GameQuest> getChildQuests() {
return childQuests;
}
public GameQuest getChildQuestById(int id) {
return this.getChildQuests().get(id);
}
@@ -91,26 +92,36 @@ public class GameMainQuest {
return isFinished;
}
public void finish() {
public List<QuestGroupSuite> getQuestGroupSuites() {
return questGroupSuites;
}
public void finish() {
this.isFinished = true;
this.state = ParentQuestState.PARENT_QUEST_STATE_FINISHED;
this.getOwner().getSession().send(new PacketFinishedParentQuestUpdateNotify(this));
this.getOwner().getSession().send(new PacketCodexDataUpdateNotify(this));
this.save();
// Add rewards
MainQuestData mainQuestData = GameData.getMainQuestDataMap().get(this.getParentQuestId());
for (int rewardId : mainQuestData.getRewardIdList()) {
RewardData rewardData = GameData.getRewardDataMap().get(rewardId);
if (rewardData == null) {
continue;
}
getOwner().getInventory().addItemParamDatas(rewardData.getRewardItemList(), ActionReason.QuestReward);
}
// handoff main quest
if(mainQuestData.getSuggestTrackMainQuestList() != null){
Arrays.stream(mainQuestData.getSuggestTrackMainQuestList())
.forEach(getOwner().getQuestManager()::startMainQuest);
}
}
public void save() {
@@ -122,16 +133,16 @@ public class GameMainQuest {
.setParentQuestId(getParentQuestId())
.setIsFinished(isFinished())
.setParentQuestState(getState().getValue());
for (GameQuest quest : this.getChildQuests().values()) {
ChildQuest childQuest = ChildQuest.newBuilder()
.setQuestId(quest.getQuestId())
.setState(quest.getState().getValue())
.build();
proto.addChildQuestList(childQuest);
}
if (getQuestVars() != null) {
for (int i : getQuestVars()) {
proto.addQuestVar(i);