Elin Decompiled Documentation EA 23.153 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 IsAdded<T>() where T : Quest
128 {
129 if (IsStarted<T>())
130 {
131 return true;
132 }
133 foreach (Quest global in globalList)
134 {
135 if (global is T)
136 {
137 return true;
138 }
139 }
140 return false;
141 }
142
143 public bool IsStarted<T>() where T : Quest
144 {
145 return GetPhase<T>() != -1;
146 }
147
148 public int GetPhase<T>() where T : Quest
149 {
150 if (completedTypes.Contains(typeof(T).ToString()))
151 {
152 return 999;
153 }
154 foreach (Quest item in list)
155 {
156 if (item is T)
157 {
158 return item.phase;
159 }
160 }
161 return -1;
162 }
163
164 public T Get<T>() where T : Quest
165 {
166 foreach (Quest item in list)
167 {
168 if (item is T)
169 {
170 return item as T;
171 }
172 }
173 return null;
174 }
175
176 public Quest Get(string id)
177 {
178 foreach (Quest item in list)
179 {
180 if (item.GetType().ToString() == id || item.id == id)
181 {
182 return item;
183 }
184 }
185 return null;
186 }
187
188 public Quest Get(int uid)
189 {
190 foreach (Quest item in list)
191 {
192 if (item.uid == uid)
193 {
194 return item;
195 }
196 }
197 return null;
198 }
199
200 public Quest GetGlobal(string id)
201 {
202 foreach (Quest global in globalList)
203 {
204 if (global.GetType().ToString() == id || global.id == id)
205 {
206 return global;
207 }
208 }
209 return null;
210 }
211
212 public bool IsCompleted(string id)
213 {
214 return completedIDs.Contains(id);
215 }
216
217 public int CountNew()
218 {
219 int num = 0;
220 foreach (Quest item in list)
221 {
222 if (item.isNew)
223 {
224 num++;
225 }
226 }
227 return num;
228 }
229
230 public int CountRandomQuest()
231 {
232 int num = 0;
233 foreach (Quest item in list)
234 {
235 if (item is QuestRandom)
236 {
237 num++;
238 }
239 }
240 return num;
241 }
242
243 public void UpdateJournal()
244 {
245 SE.WriteJournal();
246 Msg.Say("journalUpdate");
247 }
248
249 public bool IsDeliverTarget(Chara c)
250 {
251 foreach (Quest item in list)
252 {
253 if (item.IsDeliverTarget(c))
254 {
255 return true;
256 }
257 }
258 return false;
259 }
260
261 public void AddQuestAsh()
262 {
263 Chara c = EClass.game.cards.globalCharas.Find("ashland");
264 QuestCraft obj = Quest.Create("ash1") as QuestCraft;
265 obj.SetClient(c);
266 obj.req1.Add(new QuestCraft.Req("rock", 1));
267 obj.req1.Add(new QuestCraft.Req("branch", 1));
268 obj.req2.Add(new QuestCraft.Req("axe", 1));
269 }
270
271 public void AddQuestFiama()
272 {
273 Chara c = EClass.game.cards.globalCharas.Find("fiama");
274 QuestCraft obj = Quest.Create("fiama1") as QuestCraft;
275 obj.SetClient(c);
276 obj.req1.Add(new QuestCraft.Req("crim", 3));
277 obj.req2.Add(new QuestCraft.Req("hotcrim", 1));
278 }
279
280 public bool HasFarAwayEscort(bool execute = false)
281 {
282 bool has = false;
284 {
285 return false;
286 }
287 EClass._map.charas.ForeachReverse(delegate(Chara m)
288 {
289 if (m.IsEscorted() && EClass.pc.Dist(m) >= 5)
290 {
291 has = true;
292 if (execute)
293 {
294 m.Destroy();
295 }
296 }
297 });
298 if (has && execute)
299 {
300 OnEnterZone();
301 }
302 return has;
303 }
304
305 public void OnEnterZone()
306 {
307 list.ForeachReverse(delegate(Quest q)
308 {
309 q.OnEnterZone();
310 });
311 }
312}
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
int Dist(Card c)
Definition: Card.cs:7235
Definition: Chara.cs:10
bool IsEscorted()
Definition: Chara.cs:2170
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:805
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: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:482
virtual bool IsTown
Definition: Zone.cs:220
bool IsPCFaction
Definition: Zone.cs:466