Elin Decompiled Documentation EA 23.264 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 T Get<T>() where T : Quest
170 {
171 foreach (Quest item in list)
172 {
173 if (item is T)
174 {
175 return item as T;
176 }
177 }
178 return null;
179 }
180
181 public Quest Get(string id)
182 {
183 foreach (Quest item in list)
184 {
185 if (item.GetType().ToString() == id || item.id == id)
186 {
187 return item;
188 }
189 }
190 return null;
191 }
192
193 public Quest Get(int uid)
194 {
195 foreach (Quest item in list)
196 {
197 if (item.uid == uid)
198 {
199 return item;
200 }
201 }
202 return null;
203 }
204
205 public Quest GetGlobal(string id)
206 {
207 foreach (Quest global in globalList)
208 {
209 if (global.GetType().ToString() == id || global.id == id)
210 {
211 return global;
212 }
213 }
214 return null;
215 }
216
217 public bool IsCompleted(string id)
218 {
219 return completedIDs.Contains(id);
220 }
221
222 public int CountNew()
223 {
224 int num = 0;
225 foreach (Quest item in list)
226 {
227 if (item.isNew)
228 {
229 num++;
230 }
231 }
232 return num;
233 }
234
235 public int CountRandomQuest()
236 {
237 int num = 0;
238 foreach (Quest item in list)
239 {
240 if (item is QuestRandom)
241 {
242 num++;
243 }
244 }
245 return num;
246 }
247
248 public void UpdateJournal()
249 {
250 SE.WriteJournal();
251 Msg.Say("journalUpdate");
252 }
253
254 public bool IsDeliverTarget(Chara c)
255 {
256 foreach (Quest item in list)
257 {
258 if (item.IsDeliverTarget(c))
259 {
260 return true;
261 }
262 }
263 return false;
264 }
265
266 public void AddQuestAsh()
267 {
268 Chara c = EClass.game.cards.globalCharas.Find("ashland");
269 QuestCraft obj = Quest.Create("ash1") as QuestCraft;
270 obj.SetClient(c);
271 obj.req1.Add(new QuestCraft.Req("rock", 1));
272 obj.req1.Add(new QuestCraft.Req("branch", 1));
273 obj.req2.Add(new QuestCraft.Req("axe", 1));
274 }
275
276 public void AddQuestFiama()
277 {
278 Chara c = EClass.game.cards.globalCharas.Find("fiama");
279 QuestCraft obj = Quest.Create("fiama1") as QuestCraft;
280 obj.SetClient(c);
281 obj.req1.Add(new QuestCraft.Req("crim", 3));
282 obj.req2.Add(new QuestCraft.Req("hotcrim", 1));
283 }
284
285 public bool HasFarAwayEscort(bool execute = false)
286 {
287 bool has = false;
289 {
290 return false;
291 }
292 EClass._map.charas.ForeachReverse(delegate(Chara m)
293 {
294 if (m.IsEscorted() && EClass.pc.Dist(m) >= 5)
295 {
296 has = true;
297 if (execute)
298 {
299 m.Destroy();
300 }
301 }
302 });
303 if (has && execute)
304 {
305 OnEnterZone();
306 }
307 return has;
308 }
309
310 public void OnEnterZone()
311 {
312 list.ForeachReverse(delegate(Quest q)
313 {
314 q.OnEnterZone();
315 });
316 }
317}
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
int Dist(Card c)
Definition: Card.cs:7838
Definition: Chara.cs:10
bool IsEscorted()
Definition: Chara.cs:2412
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:989
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
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
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
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
virtual bool HasLaw
Definition: Zone.cs:229
bool IsInstance
Definition: Zone.cs:489
virtual bool IsTown
Definition: Zone.cs:223
bool IsPCFaction
Definition: Zone.cs:473