Elin Decompiled Documentation EA 23.286 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.hasChara && item is QuestExploration && item.phase == 5 && c.id == "ashland")
108 {
109 EClass.ui.Say("Bug: Quest Ash not found");
110 item.person.uidChara = c.uid;
111 }
112 if (item.person.chara == c && (item.CanUpdateOnTalk(c) || (item.CanAutoAdvance && EClass.debug.autoAdvanceQuest)))
113 {
114 return item.UpdateOnTalk();
115 }
116 }
117 return false;
118 }
119
120 public void OnAdvanceHour()
121 {
122 list.ForeachReverse(delegate(Quest q)
123 {
124 if (q.IsExpired)
125 {
126 Msg.Say("questExpired", q.GetTitle());
127 q.Fail();
128 }
129 });
130 }
131
132 public bool IsAdded<T>() where T : Quest
133 {
134 if (IsStarted<T>() || GetPhase<T>() == 999)
135 {
136 return true;
137 }
138 foreach (Quest global in globalList)
139 {
140 if (global is T)
141 {
142 return true;
143 }
144 }
145 return false;
146 }
147
148 public bool IsStarted<T>() where T : Quest
149 {
150 return GetPhase<T>() != -1;
151 }
152
153 public int GetPhase<T>() where T : Quest
154 {
155 if (completedTypes.Contains(typeof(T).ToString()))
156 {
157 return 999;
158 }
159 foreach (Quest item in list)
160 {
161 if (item is T)
162 {
163 return item.phase;
164 }
165 }
166 return -1;
167 }
168
169 public int GetPhase(string id)
170 {
171 if (IsCompleted(id))
172 {
173 return 999;
174 }
175 foreach (Quest item in list)
176 {
177 if (item.id == id)
178 {
179 return item.phase;
180 }
181 }
182 return -1;
183 }
184
185 public T Get<T>() where T : Quest
186 {
187 foreach (Quest item in list)
188 {
189 if (item is T)
190 {
191 return item as T;
192 }
193 }
194 return null;
195 }
196
197 public Quest Get(string id)
198 {
199 foreach (Quest item in list)
200 {
201 if (item.GetType().ToString() == id || item.id == id)
202 {
203 return item;
204 }
205 }
206 return null;
207 }
208
209 public Quest Get(int uid)
210 {
211 foreach (Quest item in list)
212 {
213 if (item.uid == uid)
214 {
215 return item;
216 }
217 }
218 return null;
219 }
220
221 public Quest GetGlobal(string id)
222 {
223 foreach (Quest global in globalList)
224 {
225 if (global.GetType().ToString() == id || global.id == id)
226 {
227 return global;
228 }
229 }
230 return null;
231 }
232
233 public bool IsCompleted(string id)
234 {
235 return completedIDs.Contains(id);
236 }
237
238 public int CountNew()
239 {
240 int num = 0;
241 foreach (Quest item in list)
242 {
243 if (item.isNew)
244 {
245 num++;
246 }
247 }
248 return num;
249 }
250
251 public int CountRandomQuest()
252 {
253 int num = 0;
254 foreach (Quest item in list)
255 {
256 if (item is QuestRandom)
257 {
258 num++;
259 }
260 }
261 return num;
262 }
263
264 public void UpdateJournal()
265 {
266 SE.WriteJournal();
267 Msg.Say("journalUpdate");
268 }
269
270 public bool IsDeliverTarget(Chara c)
271 {
272 foreach (Quest item in list)
273 {
274 if (item.IsDeliverTarget(c))
275 {
276 return true;
277 }
278 }
279 return false;
280 }
281
282 public void AddQuestAsh()
283 {
284 Chara c = EClass.game.cards.globalCharas.Find("ashland");
285 QuestCraft obj = Quest.Create("ash1") as QuestCraft;
286 obj.SetClient(c);
287 obj.req1.Add(new QuestCraft.Req("rock", 1));
288 obj.req1.Add(new QuestCraft.Req("branch", 1));
289 obj.req2.Add(new QuestCraft.Req("axe", 1));
290 }
291
292 public void AddQuestFiama()
293 {
294 Chara c = EClass.game.cards.globalCharas.Find("fiama");
295 QuestCraft obj = Quest.Create("fiama1") as QuestCraft;
296 obj.SetClient(c);
297 obj.req1.Add(new QuestCraft.Req("crim", 3));
298 obj.req2.Add(new QuestCraft.Req("hotcrim", 1));
299 }
300
301 public bool HasFarAwayEscort(bool execute = false)
302 {
303 bool has = false;
305 {
306 return false;
307 }
308 EClass._map.charas.ForeachReverse(delegate(Chara m)
309 {
310 if (m.IsEscorted() && EClass.pc.Dist(m) >= 5)
311 {
312 has = true;
313 if (execute)
314 {
315 m.Destroy();
316 }
317 }
318 });
319 if (has && execute)
320 {
321 OnEnterZone();
322 }
323 return has;
324 }
325
326 public void OnEnterZone()
327 {
328 list.ForeachReverse(delegate(Quest q)
329 {
330 q.OnEnterZone();
331 });
332 }
333}
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
int Dist(Card c)
Definition: Card.cs:7901
Definition: Chara.cs:10
bool IsEscorted()
Definition: Chara.cs:2471
bool autoAdvanceQuest
Definition: CoreDebug.cs:211
bool IsGameStarted
Definition: Core.cs:84
Definition: EClass.cs:6
static Game game
Definition: EClass.cs:9
static Core core
Definition: EClass.cs:7
static Zone _zone
Definition: EClass.cs:21
static Map _map
Definition: EClass.cs:19
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
static CoreDebug debug
Definition: EClass.cs:49
static UI ui
Definition: EClass.cs:17
CardManager cards
Definition: Game.cs:156
QuestManager quests
Definition: Game.cs:183
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:1032
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 GetPhase(string id)
int CountRandomQuest()
new QuestHome Home
Definition: QuestManager.cs:27
bool IsAdded< T >()
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
static Quest Create(string _id, string _idPerson=null, Chara c=null, bool assignQuest=true)
Definition: Quest.cs:241
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:690
void Complete()
Definition: Quest.cs:473
virtual SourceQuest.Row source
Definition: Quest.cs:107
virtual bool HasLaw
Definition: Zone.cs:231
bool IsInstance
Definition: Zone.cs:491
virtual bool IsTown
Definition: Zone.cs:225
bool IsPCFaction
Definition: Zone.cs:475