Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
QuestManager.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3using Newtonsoft.Json;
4using UnityEngine;
5
6public class QuestManager : EClass
7{
8 public const int MaxRandomQuest = 5;
9
10 [JsonProperty]
11 public List<Quest> list = new List<Quest>();
12
13 [JsonProperty]
14 public List<Quest> globalList = new List<Quest>();
15
16 [JsonProperty]
17 public HashSet<string> completedIDs = new HashSet<string>();
18
19 [JsonProperty]
20 public HashSet<string> completedTypes = new HashSet<string>();
21
22 [JsonProperty]
23 public int uid;
24
25 public QuestMain Main => Get<QuestMain>();
26
27 public new QuestHome Home => Get<QuestHome>();
28
29 public Quest Add(string id, string idGlobalChara = null)
30 {
31 Quest quest = Quest.Create(id);
32 if (idGlobalChara.IsEmpty())
33 {
34 idGlobalChara = quest.source.drama[0];
35 }
36 quest.SetClient(EClass.game.cards.globalCharas.Find(idGlobalChara), assignQuest: false);
37 EClass.game.quests.globalList.Add(quest);
38 return quest;
39 }
40
41 public Quest Start(string id, string idGlobalChara)
42 {
43 Quest q = Quest.Create(id).SetClient(EClass.game.cards.globalCharas.Find(idGlobalChara), assignQuest: false);
44 return Start(q);
45 }
46
47 public Quest Start(string id, Chara c = null, bool assignQuest = true)
48 {
49 return Start(Quest.Create(id).SetClient(c, assignQuest));
50 }
51
52 public Quest Start(Quest q)
53 {
54 list.Insert(0, q);
55 q.Start();
57 {
58 q.UpdateJournal();
60 {
62 }
63 }
64 return q;
65 }
66
67 public void Remove(Quest q)
68 {
69 if (!list.Remove(q))
70 {
71 Debug.Log("exception: Failed to remove quest:" + q?.ToString() + "/" + q.uid + "/" + q.source.id + "/" + q.deadline + "/" + q.Hours);
72 q = Get(q.uid);
73 Debug.Log(q);
74 if (q != null && q.IsRandomQuest)
75 {
76 list.Remove(q);
77 }
78 }
79 }
80
81 public void RemoveGlobal(Quest q)
82 {
83 globalList.Remove(q);
84 }
85
86 public void RemoveAll(Chara c)
87 {
88 foreach (Quest item in list.Where((Quest a) => a.chara == c).ToList())
89 {
90 Remove(item);
91 }
92 foreach (Quest item2 in globalList.Where((Quest a) => a.chara == c).ToList())
93 {
94 RemoveGlobal(item2);
95 }
96 }
97
98 public void Complete(Quest q)
99 {
100 q.Complete();
101 }
102
103 public bool OnShowDialog(Chara c)
104 {
105 foreach (Quest item in list)
106 {
107 if (item.person.chara == c && (item.CanUpdateOnTalk(c) || (item.CanAutoAdvance && EClass.debug.autoAdvanceQuest)))
108 {
109 return item.UpdateOnTalk();
110 }
111 }
112 return false;
113 }
114
115 public void OnAdvanceHour()
116 {
117 list.ForeachReverse(delegate(Quest q)
118 {
119 if (q.IsExpired)
120 {
121 Msg.Say("questExpired", q.GetTitle());
122 q.Fail();
123 }
124 });
125 }
126
127 public bool IsStarted<T>() where T : Quest
128 {
129 return GetPhase<T>() != -1;
130 }
131
132 public int GetPhase<T>() where T : Quest
133 {
134 if (completedTypes.Contains(typeof(T).ToString()))
135 {
136 return 999;
137 }
138 foreach (Quest item in list)
139 {
140 if (item is T)
141 {
142 return item.phase;
143 }
144 }
145 return -1;
146 }
147
148 public T Get<T>() where T : Quest
149 {
150 foreach (Quest item in list)
151 {
152 if (item is T)
153 {
154 return item as T;
155 }
156 }
157 return null;
158 }
159
160 public Quest Get(string id)
161 {
162 foreach (Quest item in list)
163 {
164 if (item.GetType().ToString() == id || item.id == id)
165 {
166 return item;
167 }
168 }
169 return null;
170 }
171
172 public Quest Get(int uid)
173 {
174 foreach (Quest item in list)
175 {
176 if (item.uid == uid)
177 {
178 return item;
179 }
180 }
181 return null;
182 }
183
184 public Quest GetGlobal(string id)
185 {
186 foreach (Quest global in globalList)
187 {
188 if (global.GetType().ToString() == id || global.id == id)
189 {
190 return global;
191 }
192 }
193 return null;
194 }
195
196 public bool IsCompleted(string id)
197 {
198 return completedIDs.Contains(id);
199 }
200
201 public int CountNew()
202 {
203 int num = 0;
204 foreach (Quest item in list)
205 {
206 if (item.isNew)
207 {
208 num++;
209 }
210 }
211 return num;
212 }
213
214 public int CountRandomQuest()
215 {
216 int num = 0;
217 foreach (Quest item in list)
218 {
219 if (item is QuestRandom)
220 {
221 num++;
222 }
223 }
224 return num;
225 }
226
227 public void UpdateJournal()
228 {
229 SE.WriteJournal();
230 Msg.Say("journalUpdate");
231 }
232
233 public bool IsDeliverTarget(Chara c)
234 {
235 foreach (Quest item in list)
236 {
237 if (item.IsDeliverTarget(c))
238 {
239 return true;
240 }
241 }
242 return false;
243 }
244
245 public void AddQuestAsh()
246 {
247 Chara c = EClass.game.cards.globalCharas.Find("ashland");
248 QuestCraft obj = Quest.Create("ash1") as QuestCraft;
249 obj.SetClient(c);
250 obj.req1.Add(new QuestCraft.Req("rock", 1));
251 obj.req1.Add(new QuestCraft.Req("branch", 1));
252 obj.req2.Add(new QuestCraft.Req("axe", 1));
253 }
254
255 public void AddQuestFiama()
256 {
257 Chara c = EClass.game.cards.globalCharas.Find("fiama");
258 QuestCraft obj = Quest.Create("fiama1") as QuestCraft;
259 obj.SetClient(c);
260 obj.req1.Add(new QuestCraft.Req("crim", 3));
261 obj.req2.Add(new QuestCraft.Req("hotcrim", 1));
262 }
263
264 public bool HasFarAwayEscort(bool execute = false)
265 {
266 bool has = false;
268 {
269 return false;
270 }
271 EClass._map.charas.ForeachReverse(delegate(Chara m)
272 {
273 if (m.IsEscorted() && EClass.pc.Dist(m) >= 5)
274 {
275 has = true;
276 if (execute)
277 {
278 m.Destroy();
279 }
280 }
281 });
282 if (has && execute)
283 {
284 OnEnterZone();
285 }
286 return has;
287 }
288
289 public void OnEnterZone()
290 {
291 list.ForeachReverse(delegate(Quest q)
292 {
293 q.OnEnterZone();
294 });
295 }
296}
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
int Dist(Card c)
Definition: Card.cs:6777
Definition: Chara.cs:10
bool IsEscorted()
Definition: Chara.cs:2102
bool autoAdvanceQuest
Definition: CoreDebug.cs:210
bool IsGameStarted
Definition: Core.cs:84
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
CardManager cards
Definition: Game.cs:155
QuestManager quests
Definition: Game.cs:179
List< Chara > charas
Definition: Map.cs:81
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
bool questTracker
Definition: Player.cs:790
List< Req > req1
Definition: QuestCraft.cs:27
List< Req > req2
Definition: QuestCraft.cs:30
void OnAdvanceHour()
HashSet< string > completedIDs
Definition: QuestManager.cs:17
List< Quest > list
Definition: QuestManager.cs:11
int GetPhase< T >()
bool OnShowDialog(Chara c)
void AddQuestFiama()
bool IsStarted< T >()
Quest Get(int uid)
Quest Start(Quest q)
Definition: QuestManager.cs:52
Quest Start(string id, Chara c=null, bool assignQuest=true)
Definition: QuestManager.cs:47
Quest Add(string id, string idGlobalChara=null)
Definition: QuestManager.cs:29
void RemoveGlobal(Quest q)
Definition: QuestManager.cs:81
int CountRandomQuest()
new QuestHome Home
Definition: QuestManager.cs:27
QuestMain Main
Definition: QuestManager.cs:25
void Complete(Quest q)
Definition: QuestManager.cs:98
void Remove(Quest q)
Definition: QuestManager.cs:67
void AddQuestAsh()
const int MaxRandomQuest
Definition: QuestManager.cs:8
bool IsCompleted(string id)
void UpdateJournal()
Quest Start(string id, string idGlobalChara)
Definition: QuestManager.cs:41
void OnEnterZone()
List< Quest > globalList
Definition: QuestManager.cs:14
bool HasFarAwayEscort(bool execute=false)
HashSet< string > completedTypes
Definition: QuestManager.cs:20
Quest Get(string id)
bool IsDeliverTarget(Chara c)
Quest GetGlobal(string id)
void RemoveAll(Chara c)
Definition: QuestManager.cs:86
Definition: Quest.cs:7
virtual bool IsRandomQuest
Definition: Quest.cs:237
bool IsExpired
Definition: Quest.cs:112
int uid
Definition: Quest.cs:34
int Hours
Definition: Quest.cs:124
virtual void OnEnterZone()
Definition: Quest.cs:418
int deadline
Definition: Quest.cs:46
void Start()
Definition: Quest.cs:405
Chara chara
Definition: Quest.cs:105
string id
Definition: Quest.cs:31
Quest SetClient(Chara c, bool assignQuest=true)
Definition: Quest.cs:380
void UpdateJournal()
Definition: Quest.cs:685
void Complete()
Definition: Quest.cs:468
virtual SourceQuest.Row source
Definition: Quest.cs:107
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
virtual bool HasLaw
Definition: Zone.cs:226
bool IsInstance
Definition: Zone.cs:480
virtual bool IsTown
Definition: Zone.cs:220
bool IsPCFaction
Definition: Zone.cs:464