GameMainQuest.java 3.19 KB
Newer Older
Melledy's avatar
Melledy committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package emu.grasscutter.game.quest;

import java.util.HashMap;
import java.util.Map;

import org.bson.types.ObjectId;

import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import dev.morphia.annotations.Indexed;
import dev.morphia.annotations.Transient;
import emu.grasscutter.data.GameData;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.quest.enums.ParentQuestState;
import emu.grasscutter.game.quest.enums.QuestState;
import emu.grasscutter.net.proto.ChildQuestOuterClass.ChildQuest;
import emu.grasscutter.net.proto.ParentQuestOuterClass.ParentQuest;
import emu.grasscutter.net.proto.QuestOuterClass.Quest;
import emu.grasscutter.server.packet.send.PacketFinishedParentQuestUpdateNotify;
import emu.grasscutter.server.packet.send.PacketQuestListUpdateNotify;
import emu.grasscutter.server.packet.send.PacketQuestProgressUpdateNotify;
import emu.grasscutter.utils.Utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
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;
	
	@Deprecated // Morphia only. Do not use.
	public GameMainQuest() {}
	
	public GameMainQuest(Player player, int parentQuestId) {
		this.owner = player;
		this.ownerUid = player.getUid();
		this.parentQuestId = parentQuestId;
		this.childQuests = new HashMap<>();
		this.questVars = new int[5];
		this.state = ParentQuestState.PARENT_QUEST_STATE_NONE;
	}

	public int getParentQuestId() {
		return parentQuestId;
	}
	
	public int getOwnerUid() {
		return ownerUid;
	}

	public Player getOwner() {
		return owner;
	}

	public void setOwner(Player player) {
		if (player.getUid() != this.getOwnerUid()) return;
		this.owner = player;
	}

	public Map<Integer, GameQuest> getChildQuests() {
		return childQuests;
	}
	
	public GameQuest getChildQuestById(int id) {
		return this.getChildQuests().get(id);
	}

	public int[] getQuestVars() {
		return questVars;
	}

	public ParentQuestState getState() {
		return state;
	}

	public boolean isFinished() {
		return isFinished;
	}

	public void finish() {
		this.isFinished = true;
		this.state = ParentQuestState.PARENT_QUEST_STATE_FINISHED;
		this.getOwner().getSession().send(new PacketFinishedParentQuestUpdateNotify(this));
94
		this.save();
Melledy's avatar
Melledy committed
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
	}

	public void save() {
		DatabaseHelper.saveQuest(this);
	}

	public ParentQuest toProto() {
		ParentQuest.Builder proto = ParentQuest.newBuilder()
				.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);
			}
		}

		return proto.build();
	}
}