Elin Decompiled Documentation EA 23.198 Nightly Patch 1
Loading...
Searching...
No Matches
DramaManager.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.Linq;
5using DG.Tweening;
6using UnityEngine;
7using UnityEngine.UI;
8
9public class DramaManager : EMono
10{
11 public static Chara TG;
12
14
15 public CanvasGroup cg;
16
17 public CanvasGroup cgCover;
18
20
21 public Transform actorPos;
22
23 public Transform endroll;
24
26
28
30
32
34
35 public GameObject goSkip;
36
37 public Image imageBG;
38
39 public Image imageCover;
40
41 public Font[] fonts;
42
43 public Person tg;
44
45 public bool bgmChanged;
46
47 private List<DramaEvent> customEvents = new List<DramaEvent>();
48
49 public List<DramaChoice> _choices = new List<DramaChoice>();
50
51 public Dictionary<string, string> customTalkTopics = new Dictionary<string, string>();
52
53 public Dictionary<string, string> dictLocalize = new Dictionary<string, string>();
54
55 public float creditSpeed;
56
57 private string lastIF;
58
59 private string lastIF2;
60
62
63 public bool enableTone;
64
65 public bool customEventsAdded;
66
67 public bool idDefaultPassed;
68
69 public int countLine;
70
71 private string idDefault;
72
73 private string textReplace;
74
75 public static Dictionary<string, ExcelData> dictCache = new Dictionary<string, ExcelData>();
76
78
79 private void Update()
80 {
81 if (sequence != null)
82 {
84 }
85 }
86
88 {
89 this.setup = setup;
90 cgCover.SetActive(enable: false);
91 endroll.SetActive(enable: false);
92 tg = setup.person;
93 SetDialog();
95 {
96 setup = setup,
97 manager = this,
98 id = setup.sheet
99 };
100 Load();
101 sequence.lastStep = (sequence.lastlastStep = setup.step);
102 if (!setup.forceJump.IsEmpty())
103 {
105 }
106 else
107 {
108 sequence.Play();
109 }
110 return sequence;
111 }
112
114 {
115 sequence.Clear();
116 customEvents.Clear();
117 customTalkTopics.Clear();
118 moldActor = actorPos.CreateMold<DramaActor>();
119 if (tg != null)
120 {
121 sequence.AddActor("tg", tg);
122 }
123 sequence.AddActor("pc", new Person(EMono.pc));
124 string text = CorePath.DramaData + setup.book + ".xlsx";
125 ExcelData excelData = dictCache.TryGetValue(text);
126 if (excelData != null && excelData.IsModified())
127 {
128 excelData = null;
129 }
130 if (excelData == null)
131 {
132 excelData = new ExcelData();
133 }
134 excelData.maxEmptyRows = 10;
135 excelData.path = text;
136 List<Dictionary<string, string>> list = excelData.BuildList(setup.sheet);
137 if (!Lang.isBuiltin && dictLocalize.Count == 0)
138 {
139 foreach (Dictionary<string, string> item in new ExcelData
140 {
141 maxEmptyRows = 10,
142 path = CorePath.DramaDataLocal + setup.book + ".xlsx"
144 {
145 string text2 = item["id"];
146 if (!text2.IsEmpty() && !item["text"].IsEmpty())
147 {
148 dictLocalize.Add(text2, item["text"]);
149 }
150 }
151 }
152 dictCache[text] = excelData;
154 lastTalk = null;
156 countLine = 0;
157 for (int i = 0; i < list.Count; i++)
158 {
159 ParseLine(list[i]);
160 countLine++;
161 }
163 sequence.steps["end"] = 99999;
164 sequence.AddActor("narrator", new Person("narrator"));
165 return sequence;
166 }
167
168 public void AddCustomEvents(string idCustom = "Resident")
169 {
171 {
172 return;
173 }
174 DramaCustomSequence dramaCustomSequence = new DramaCustomSequence
175 {
176 manager = this,
178 idCustom = idCustom,
179 events = customEvents,
182 };
183 CustomEvent(delegate
184 {
185 sequence.Exit();
186 });
187 if (tg != null && tg.hasChara)
188 {
189 TG = tg.chara;
190 dramaCustomSequence.Build(tg.chara);
191 }
192 if (!sequence.setup.textData.IsEmpty())
193 {
194 dramaCustomSequence.BuildTextData();
195 }
196 foreach (DramaEvent customEvent in customEvents)
197 {
198 AddEvent(customEvent);
199 }
200 customEventsAdded = true;
201 }
202
203 public void ParseLine(Dictionary<string, string> item)
204 {
205 string[] array = (item.ContainsKey("action") ? item["action"].Split('/') : null);
206 string action = ((array != null) ? array[0] : null);
207 string text2 = (item.ContainsKey("step") ? item["step"] : null);
208 if (text2 == "//")
209 {
210 return;
211 }
212 if (text2 == idDefault)
213 {
214 idDefaultPassed = true;
215 }
216 string actor = (item.ContainsKey("actor") ? item["actor"] : "#1");
217 string[] p = (item.ContainsKey("param") ? item["param"].Split(',') : new string[0]);
218 string p2 = ((p.Length != 0) ? p[0] : "");
219 string p3 = ((p.Length > 1) ? p[1] : "");
220 string p4 = ((p.Length > 2) ? p[2] : "");
221 float.TryParse(p2, out var p0f);
222 float.TryParse(p3, out var result);
223 bool flag = !item["text_JP"].IsEmpty();
224 item.TryGetValue("text_JP");
225 string text = null;
226 if (flag)
227 {
228 if (!Lang.isBuiltin)
229 {
230 string key = item["id"];
231 if (dictLocalize.ContainsKey(key))
232 {
233 text = dictLocalize[key];
234 }
235 else
236 {
237 text = item.TryGetValue("text_EN");
238 }
239 }
240 else
241 {
242 text = item["text_" + Lang.langCode];
243 }
244 }
245 if (flag && text.StartsWith("$") && tg != null && tg.hasChara)
246 {
247 string text3 = text.Split(' ')[0];
248 text = text.Replace(text3, tg.chara.GetTalkText(text3.Remove(0, 1)));
249 }
250 string jump = (item.ContainsKey("jump") ? item["jump"] : null);
251 string text4 = (item.ContainsKey("if") ? item["if"] : null);
252 string iF = (item.ContainsKey("if2") ? item["if2"] : null);
253 string cHECK = (item.ContainsKey("check") ? item["check"] : null);
254 bool flag2 = false;
255 if (text2 != null && !sequence.steps.ContainsKey(text2) && action != "choice" && action != "cancel")
256 {
257 sequence.steps.Add(text2, sequence.events.Count);
258 }
259 if (text4 == "*")
260 {
261 text4 = lastIF;
262 iF = lastIF2;
263 }
264 else
265 {
266 lastIF = text4;
267 lastIF2 = iF;
268 }
269 if (!CheckIF(text4) || !CheckIF(iF))
270 {
271 if (action == "reload")
272 {
273 string id = "flag" + countLine;
274 sequence.AddStep(id);
275 }
276 return;
277 }
278 if (LayerDrama.fromBook && action == "editPlaylist")
279 {
280 action = "BGM";
281 }
282 switch (action)
283 {
284 case "disableFullPortrait":
285 AddEvent(delegate
286 {
287 sequence.fullPortrait = false;
288 });
289 break;
290 case "enableTone":
291 enableTone = true;
292 break;
293 case "canSkip":
294 AddEvent(delegate
295 {
296 sequence.skipJump = p2;
297 });
298 break;
299 case "screenLock":
301 break;
302 case "haltBGM":
303 EMono.Sound.haltUpdate = true;
304 break;
305 case "forceBGM":
306 AddEvent(delegate
307 {
308 SoundManager.ForceBGM();
309 });
310 break;
311 case "setFlag":
312 AddEvent(delegate
313 {
314 if (p2.StartsWith("*"))
315 {
316 Quest quest3 = EMono.game.quests.Get(p2.TrimStart('*'));
317 quest3?.ChangePhase(p3.ToInt(quest3.GetType()));
318 }
319 else
320 {
321 EMono.player.dialogFlags[p2] = (p3.IsEmpty() ? 1 : int.Parse(p3));
322 }
323 });
324 break;
325 case "reload":
326 {
327 string __step = "flag" + countLine;
328 AddEvent(delegate
329 {
330 Load();
331 sequence.Play(jump.IsEmpty(__step));
332 }, 0.01f, halt: true);
333 sequence.AddStep(__step);
334 break;
335 }
336 case "inject":
337 {
338 DramaEventTalk dramaEventTalk = lastTalk;
339 if (idDefaultPassed)
340 {
341 AddCustomEvents(p2);
342 }
343 lastTalk = dramaEventTalk;
344 break;
345 }
346 case "topic":
347 customTalkTopics[p2] = text;
348 break;
349 case "cancel":
350 lastTalk.canCancel = true;
351 lastTalk.idCancelJump = jump;
352 break;
353 case "_choices":
354 foreach (DramaChoice choice in _choices)
355 {
356 lastTalk.AddChoice(choice);
357 }
358 break;
359 case "choice":
360 if (!CheckIF(text4) || !CheckIF(iF))
361 {
362 break;
363 }
364 if (array.Length > 1)
365 {
366 switch (array[1])
367 {
368 case "quest":
369 text = "deQuest".lang();
370 jump = "_quest";
371 break;
372 case "depart":
373 text = "depart".lang();
374 jump = "_depart";
375 break;
376 case "rumor":
377 text = "letsTalk".lang();
378 jump = "_rumor";
379 break;
380 case "buy":
381 text = "daBuy".lang();
382 jump = "_buy";
383 break;
384 case "sell":
385 text = "daSell".lang();
386 jump = "_sell";
387 break;
388 case "give":
389 text = "daGive".lang();
390 jump = "_give";
391 break;
392 case "trade":
393 text = "daTrade".lang();
394 jump = "_trade";
395 break;
396 case "bye":
397 text = "bye".lang();
398 jump = "_bye";
399 break;
400 }
401 }
402 flag2 = true;
403 lastTalk.AddChoice(new DramaChoice(text, jump, p2, cHECK, text4));
404 break;
405 case "addTempActor":
406 {
407 Person person = new Person(actor);
408 Chara chara = EMono.game.cards.globalCharas.Find(actor) ?? EMono._map.FindChara(actor);
409 if (chara != null)
410 {
411 person.SetChara(chara);
412 }
413 sequence.AddActor(actor, person);
414 break;
415 }
416 case "addActor":
417 {
418 if (actor == "god")
419 {
421 break;
422 }
423 DramaActor dramaActor = sequence.AddActor(actor, new Person(actor));
424 if (!text.IsEmpty())
425 {
426 dramaActor.owner.tempName = text;
427 }
428 break;
429 }
430 case "invoke":
432 {
433 break;
434 }
435 if (jump.IsEmpty())
436 {
437 AddEvent(delegate
438 {
439 typeof(DramaOutcome).GetMethod(p[0]).Invoke(outcome, null);
440 });
441 break;
442 }
443 AddEvent(delegate
444 {
445 }, () => (!(bool)typeof(DramaOutcome).GetMethod(p[0]).Invoke(outcome, null)) ? "" : jump);
446 flag2 = true;
447 break;
448 case "refAction1":
449 AddEvent(delegate
450 {
452 });
453 break;
454 case "refAction2":
455 AddEvent(delegate
456 {
458 });
459 break;
460 case "setBG":
461 AddEvent(delegate
462 {
463 if (p2.IsEmpty())
464 {
465 imageBG.enabled = false;
466 }
467 else
468 {
469 imageBG.enabled = true;
470 imageBG.sprite = Resources.Load<Sprite>("Media/Graphics/Image/Drama/" + p2);
471 }
472 });
473 break;
474 case "setBG2":
475 AddEvent(delegate
476 {
477 Util.Instantiate<Transform>("Media/Graphics/Image/Drama/" + p2, layer).SetAsFirstSibling();
478 });
479 break;
480 case "glitch":
481 AddEvent(delegate
482 {
483 DramaActor.useGlitch = true;
484 });
485 break;
486 case "setDialog":
487 AddEvent(delegate
488 {
489 SetDialog(p2);
490 });
491 break;
492 case "Playlist":
493 AddEvent(delegate
494 {
495 LayerDrama.haltPlaylist = false;
496 EMono.Sound.StopBGM();
497 EMono.Sound.currentBGM = null;
498 bgmChanged = true;
499 });
500 break;
501 case "editPlaylist":
502 AddEvent(delegate
503 {
504 List<int> list = new List<int>();
505 string[] array2 = p;
506 foreach (string s in array2)
507 {
508 list.Add(int.Parse(s));
509 }
510 EMono._zone.SetBGM(list);
511 });
512 break;
513 case "BGM":
514 AddEvent(delegate
515 {
516 LayerDrama.haltPlaylist = true;
517 LayerDrama.maxBGMVolume = true;
518 EMono.Sound.PlayBGM(EMono.core.refs.dictBGM[p2.ToInt()]);
519 bgmChanged = true;
520 });
521 break;
522 case "BGMStay":
523 AddEvent(delegate
524 {
525 EMono.Sound.PlayBGM(EMono.core.refs.dictBGM[p2.ToInt()]);
526 });
527 break;
528 case "lastBGM":
529 AddEvent(delegate
530 {
531 EMono.Sound.StopBGM(p0f, playLastBGM: true);
532 });
533 break;
534 case "stopBGM":
535 AddEvent(delegate
536 {
537 LayerDrama.haltPlaylist = true;
538 EMono.Sound.StopBGM(p0f);
539 EMono.Sound.currentBGM = null;
540 });
541 break;
542 case "sound":
543 AddEvent(delegate
544 {
545 if (p3 != "")
546 {
547 SoundManager.current.MuteBGMFor(float.Parse(p3, CultureInfo.InvariantCulture));
548 }
549 EMono.Sound.Play(p2);
550 });
551 break;
552 case "haltPlaylist":
553 LayerDrama.haltPlaylist = true;
554 break;
555 case "keepBGM":
556 LayerDrama.keepBGM = true;
557 break;
558 case "alphaInOut":
559 AddEvent(delegate
560 {
561 DOTween.Kill(cg);
562 cg.alpha = 1f;
563 cg.DOFade(0f, p0f).SetDelay(0.1f);
564 }, p0f, halt: true);
565 AddEvent(new DramaEventWait((result == 0f) ? 0.1f : result));
566 AddEvent(delegate
567 {
568 DOTween.Kill(cg);
569 cg.alpha = 0f;
570 cg.DOFade(1f, p0f).SetDelay(0.1f);
571 }, p0f);
572 break;
573 case "alphaIn":
574 AddEvent(delegate
575 {
576 DOTween.Kill(cg);
577 cg.alpha = 0f;
578 cg.DOFade(1f, p0f).SetDelay(0.1f);
579 }, p0f);
580 break;
581 case "alphaOut":
582 AddEvent(delegate
583 {
584 DOTween.Kill(cg);
585 cg.alpha = 1f;
586 cg.DOFade(0f, p0f).SetDelay(0.1f);
587 }, p0f, halt: true);
588 break;
589 case "fadeIn":
590 AddEvent(delegate
591 {
592 imageCover.color = ((p3 != null && p3 == "white") ? Color.white : Color.black);
593 cgCover.SetActive(enable: true);
594 cgCover.alpha = 1f;
595 cgCover.DOFade(0f, p0f).SetDelay(0.1f);
596 }, p0f);
597 break;
598 case "fadeOut":
599 AddEvent(delegate
600 {
601 imageCover.color = ((p3 != null && p3 == "white") ? Color.white : Color.black);
602 cgCover.SetActive(enable: true);
603 cgCover.alpha = 0f;
604 cgCover.DOFade(1f, p0f).SetDelay(0.1f);
605 }, p0f, halt: true);
606 break;
607 case "fadeInOut":
608 AddEvent(delegate
609 {
610 imageCover.color = ((p4 != null && p4 == "white") ? Color.white : Color.black);
611 cgCover.SetActive(enable: true);
612 cgCover.alpha = 0f;
613 cgCover.DOFade(1f, p0f).SetDelay(0.1f);
614 }, p0f, halt: true);
615 AddEvent(new DramaEventWait((result == 0f) ? 0.1f : result));
616 AddEvent(delegate
617 {
618 imageCover.color = ((p4 != null && p4 == "white") ? Color.white : Color.black);
619 cgCover.SetActive(enable: true);
620 cgCover.alpha = 1f;
621 cgCover.DOFade(0f, p0f).SetDelay(0.1f);
622 }, p0f);
623 break;
624 case "hideUI":
625 AddEvent(delegate
626 {
627 EMono.ui.Hide(p0f);
628 });
629 break;
630 case "hideDialog":
631 AddEvent(delegate
632 {
633 dialog.SetActive(enable: false);
634 });
635 break;
636 case "fadeEnd":
637 if (p0f == 0f)
638 {
639 p0f = 1f;
640 }
641 AddEvent(delegate
642 {
643 imageCover.color = Color.black;
644 cgCover.SetActive(enable: true);
645 cgCover.alpha = 0f;
646 cgCover.DOFade(1f, p0f).SetDelay(0.1f);
647 }, p0f, halt: true);
648 AddEvent(delegate
649 {
650 dialog.SetActive(enable: false);
651 imageBG.enabled = false;
652 });
653 AddEvent(delegate
654 {
655 DOTween.Kill(cg);
656 cg.alpha = 1f;
657 cg.DOFade(0f, p0f).SetDelay(0.1f);
658 }, p0f, halt: true);
659 break;
660 case "endroll":
662 break;
663 case "showSkip":
664 goSkip.SetActive(value: true);
665 break;
666 case "canCancel":
667 AddEvent(delegate
668 {
669 sequence.canCancel = bool.Parse(p2);
670 });
671 break;
672 case "wait":
673 AddEvent(new DramaEventWait(p0f));
674 break;
675 case "end":
677 break;
678 case "acceptQuest":
680 {
681 break;
682 }
683 AddEvent(delegate
684 {
685 Quest quest = EMono.game.quests.globalList.Where((Quest a) => a.source.id == p2).First();
686 EMono.game.quests.globalList.Remove(quest);
687 EMono.game.quests.Start(quest);
688 });
689 break;
690 case "startQuest":
691 AddEvent(delegate
692 {
693 Quest quest2 = Quest.Create(p2);
694 if (!quest2.HasDLC)
695 {
696 Msg.Say("(Failed DLC check)");
697 }
698 else
699 {
700 EMono.game.quests.Start(quest2);
701 LayerDrama.currentQuest = quest2;
702 if (tg != null && tg.chara != null)
703 {
704 Debug.Log("Starting Quest:" + quest2?.ToString() + "/" + tg.chara.quest?.ToString() + "/" + (quest2 == tg.chara.quest));
705 }
706 }
707 });
708 break;
709 case "setQuestClient":
710 AddEvent(delegate
711 {
712 if (LayerDrama.currentQuest != null)
713 {
714 LayerDrama.currentQuest.SetClient(tg.chara, assignQuest: false);
715 }
716 });
717 break;
718 case "updateJournal":
719 AddEvent(delegate
720 {
722 });
723 break;
724 case "addKeyItem":
725 if (!LayerDrama.fromBook)
726 {
727 AddEvent(delegate
728 {
730 });
731 }
732 break;
733 case "drop":
734 if (!LayerDrama.fromBook)
735 {
736 AddEvent(delegate
737 {
738 Msg.Say("dropReward");
740 Thing t = ThingGen.Create(p2);
742 });
743 }
744 break;
745 case "completeQuest":
746 if (!LayerDrama.fromBook)
747 {
748 AddEvent(delegate
749 {
752 });
753 }
754 break;
755 case "nextPhase":
756 if (!LayerDrama.fromBook)
757 {
758 AddEvent(delegate
759 {
760 EMono.game.quests.Get(p2).NextPhase();
761 });
762 }
763 break;
764 case "changePhase":
765 if (!LayerDrama.fromBook)
766 {
767 AddEvent(delegate
768 {
769 EMono.game.quests.Get(p2).ChangePhase(p3.ToInt());
770 });
771 }
772 break;
773 case "addResource":
774 AddEvent(delegate
775 {
776 EMono.BranchOrHomeBranch.resources.Get(p2).Mod(p3.ToInt());
777 });
778 break;
779 case "shake":
780 AddEvent(delegate
781 {
783 });
784 break;
785 case "tutorial":
787 {
788 Tutorial.Play(p2);
789 });
790 break;
791 case "slap":
792 AddEvent(delegate
793 {
795 {
796 tg.chara.PlaySound("whip");
797 tg.chara.Say("slap", tg.chara, EMono.pc);
798 EMono.pc.PlayAnime(AnimeID.Shiver);
799 EMono.pc.DamageHP(5 + EClass.rndHalf(EMono.pc.MaxHP / 3), 919, 100, AttackSource.Condition);
801 });
802 });
803 break;
804 case "destroyItem":
805 AddEvent(delegate
806 {
807 EMono.pc.things.Find(p2).Destroy();
808 });
809 break;
810 case "focus":
811 AddEvent(delegate
812 {
814 EMono.scene.screenElin.focusOption = new BaseGameScreen.FocusOption
815 {
816 pos = pos
817 };
818 });
819 break;
820 case "focusChara":
821 AddEvent(delegate
822 {
823 Point pos2 = EMono._map.FindChara(p2).pos.Copy();
825 {
826 pos = pos2,
827 speed = p3.IsEmpty("2").ToFloat()
828 };
829 });
830 break;
831 case "focusPC":
832 AddEvent(delegate
833 {
834 EMono.scene.screenElin.focusOption = new BaseGameScreen.FocusOption
835 {
836 player = true,
837 speed = p2.IsEmpty("2").ToFloat()
838 };
839 });
840 break;
841 case "focusPos":
842 AddEvent(delegate
843 {
844 EMono.scene.screenElin.focusOption = new BaseGameScreen.FocusOption
845 {
846 pos = new Point(p2.ToInt(), p3.ToInt()),
847 speed = p4.IsEmpty("2").ToFloat()
848 };
849 });
850 break;
851 case "unfocus":
852 AddEvent(delegate
853 {
854 EMono.scene.screenElin.focusOption = null;
855 });
856 break;
857 case "setAlwaysVisible":
858 AddEvent(delegate
859 {
860 LayerDrama.alwaysVisible = EMono._map.FindChara(p2);
861 });
862 break;
863 case "effect":
864 AddEvent(delegate
865 {
866 Point from = new Point(p[1].ToInt(), p[2].ToInt());
867 Effect.Get(p2).Play(from);
868 });
869 break;
870 case "effectEmbarkIn":
871 AddEvent(delegate
872 {
874 Util.Instantiate("UI/Layer/LayerEmbark/EmbarkActor_crystal");
875 });
876 break;
877 case "effectEmbarkOut":
878 AddEvent(delegate
879 {
880 UnityEngine.Object.FindObjectOfType<EmbarkActor>().Hide();
881 });
882 break;
883 case "propEnter":
884 AddEvent(delegate
885 {
886 DramaProp component = Util.Instantiate("Media/Drama/Prop/" + p2).GetComponent<DramaProp>();
887 component.name = p2;
888 if (p3.IsEmpty())
889 {
890 component.transform.position = EMono.scene.cam.transform.position;
891 }
892 else
893 {
894 Point point = new Point(p[1].ToInt(), p[2].ToInt());
895 component.transform.position = point.PositionCenter();
896 }
897 component.Enter();
898 });
899 break;
900 case "propLeave":
901 AddEvent(delegate
902 {
903 GameObject.Find(p2).GetComponent<DramaProp>().Leave();
904 });
905 break;
906 case "destroy":
907 AddEvent(delegate
908 {
909 Chara chara2 = EMono._map.FindChara(p2);
910 if (chara2 != null)
911 {
912 chara2.Destroy();
913 }
914 else
915 {
916 Debug.Log("Drama.destroy chara not found:" + p2);
917 }
918 });
919 break;
920 case "bout_win":
921 case "bout_lose":
922 AddEvent(delegate
923 {
925 {
927 if (action == "bout_win")
928 {
930 {
931 target = tg.chara
932 });
933 }
934 EMono.pc.MoveZone(zone);
935 });
936 });
937 break;
938 case "save":
939 AddEvent(delegate
940 {
941 EMono.game.Save(isAutoSave: false, silent: true);
942 });
943 break;
944 case "setHour":
945 AddEvent(delegate
946 {
947 EMono.world.date.hour = (int)p0f;
948 EMono.world.date.min = 0;
952 });
953 break;
954 case "%worship":
955 AddEvent(delegate
956 {
958 Tutorial.Reserve("faith");
959 });
960 break;
961 case "replace":
962 AddEvent(delegate
963 {
964 textReplace = text;
965 });
966 break;
967 default:
968 if (!flag)
969 {
970 break;
971 }
972 lastTalk = AddEvent(new DramaEventTalk(actor, delegate
973 {
974 if (!textReplace.IsEmpty())
975 {
976 text = textReplace;
977 textReplace = null;
978 }
979 if (tg != null && (actor == "tg" || actor.IsEmpty()))
980 {
981 text = (enableTone ? tg.ApplyTone(text) : text);
982 }
983 return text;
984 })) as DramaEventTalk;
985 lastTalk.center = p2 == "center";
986 break;
987 case "new":
988 case "saveBGM":
989 case "addAffinity":
990 case "checkAffinity":
991 break;
992 }
993 if (!string.IsNullOrEmpty(jump) && !flag2)
995 AddEvent(new DramaEventGoto(jump));
996 }
997 }
998
999 public DramaActor GetActor(string id)
1000 {
1001 return sequence.GetActor(id);
1002 }
1003
1005 {
1006 return sequence.AddEvent(e);
1007 }
1008
1009 public DramaEventMethod AddEvent(Action func, float duration = 0f, bool halt = false)
1010 {
1011 return AddEvent(new DramaEventMethod(func, duration, halt)) as DramaEventMethod;
1012 }
1013
1014 public DramaEventMethod AddEvent(Action func, Func<string> funcJump)
1015 {
1016 return AddEvent(new DramaEventMethod(func)
1018 jumpFunc = funcJump
1019 }) as DramaEventMethod;
1020 }
1021
1022 public DramaEvent CustomEvent(Action func, string step = null, float duration = 0f, bool halt = false)
1023 {
1024 DramaEventMethod dramaEventMethod = new DramaEventMethod(func, duration, halt)
1025 {
1026 step = step
1028 customEvents.Add(dramaEventMethod);
1029 return dramaEventMethod;
1030 }
1031
1032 public void SetDialog(string id = "Default")
1033 {
1034 DialogDrama[] componentsInChildren = GetComponentsInChildren<DialogDrama>(includeInactive: true);
1035 foreach (DialogDrama dialogDrama in componentsInChildren)
1036 {
1037 if ((bool)dialogDrama.portrait)
1038 {
1039 dialogDrama.portrait.imageFull.SetActive(enable: false);
1040 }
1041 dialogDrama.SetActive(enable: false);
1042 if (dialogDrama.name == "Dialog" + id)
1043 {
1044 dialog = dialogDrama;
1045 }
1046 }
1047 }
1048
1049 public bool CheckIF(string IF)
1050 {
1051 if (IF == null || IF.IsEmpty())
1052 {
1053 return true;
1054 }
1055 string[] array = IF.Split(',');
1056 switch (array[0])
1057 {
1058 case "duponne_mino":
1059 return EMono.pc.things.Find("minohorn") != null;
1060 case "duponne_rescued":
1061 if (EMono.game.quests.GetPhase<QuestNegotiationDarkness>() == 4)
1062 {
1063 return EMono._map.FindChara("lurie_boss") != null;
1064 }
1065 return false;
1066 case "duponne_gone":
1067 if (EMono.game.quests.GetPhase<QuestNegotiationDarkness>() == 4 && !EMono.player.flags.killedDuponne && EMono._map.FindChara("lurie_boss") == null)
1068 {
1069 return EMono.pc.things.Find("duponneball") == null;
1070 }
1071 return false;
1072 case "duponne_killed":
1073 if (EMono.game.quests.GetPhase<QuestNegotiationDarkness>() == 4)
1074 {
1076 }
1077 return false;
1078 case "survival":
1079 return EMono.game.IsSurvival;
1080 case "!survival":
1081 return !EMono.game.IsSurvival;
1082 case "fromBook":
1083 return LayerDrama.fromBook;
1084 case "!fromBook":
1085 return !LayerDrama.fromBook;
1086 case "WindRest":
1087 return EMono._zone is Zone_WindRest;
1088 case "guild_promote":
1089 return Guild.CurrentDrama.relation.exp >= Guild.CurrentDrama.relation.ExpToNext;
1090 case "guild_maxpromote":
1091 return Guild.CurrentDrama.relation.rank >= Guild.CurrentDrama.relation.MaxRank;
1092 case "scratch_check":
1093 return EMono.game.dateScratch > EMono.game.world.date.GetRaw();
1094 case "sister_money":
1095 return EMono.pc.GetCurrency() >= 10000;
1096 case "fiamaPet":
1097 if (EMono.pc.homeBranch != null)
1098 {
1099 foreach (Chara member in EMono.pc.homeBranch.members)
1100 {
1101 if (member.isDead && member.CanRevive() && member.GetInt(100) != 0)
1102 {
1103 return true;
1104 }
1105 }
1106 }
1107 return false;
1108 case "hasMelilithCurse":
1109 return EMono.pc.HasElement(1206);
1110 case "merchant":
1111 return Guild.CurrentDrama == Guild.Merchant;
1112 case "fighter":
1113 return Guild.CurrentDrama == Guild.Fighter;
1114 case "thief":
1115 return Guild.CurrentDrama == Guild.Thief;
1116 case "mage":
1117 return Guild.CurrentDrama == Guild.Mage;
1118 case "hasDLC":
1119 return Steam.HasDLC(array[1].ToEnum<ID_DLC>());
1120 case "hasFlag":
1121 return EMono.player.dialogFlags.TryGetValue(array[1], 0) != 0;
1122 case "!hasFlag":
1123 return EMono.player.dialogFlags.TryGetValue(array[1], 0) == 0;
1124 case "hasItem":
1125 return EMono.pc.things.Find(array[1]) != null;
1126 case "nasuDeliver":
1127 if (EMono.game.quests.GetPhase<QuestNasu>() == 2)
1128 {
1129 return EMono.pc.things.Find("backpack_holding") != null;
1130 }
1131 return false;
1132 case "isCompleted":
1133 return EMono.game.quests.IsCompleted(array[1]);
1134 case "costRecruit":
1135 if (EMono.Branch != null && EMono.Branch.IsRecruit(tg.chara))
1136 {
1137 return EMono.pc.GetCurrency("money2") >= CalcGold.Hire(tg.chara);
1138 }
1139 return true;
1140 case "costRecruitTicket":
1141 if (EMono.Branch != null && EMono.Branch.IsRecruit(tg.chara))
1142 {
1143 return EMono.pc.things.Find("ticket_resident") != null;
1144 }
1145 return false;
1146 case "letterTrial":
1148 {
1149 return EMono.pc.things.Find("letter_trial") != null;
1150 }
1151 return false;
1152 default:
1153 if (array.Length > 2)
1154 {
1155 int value;
1156 bool flag = EMono.player.dialogFlags.TryGetValue(array[1], out value);
1157 int num = 0;
1158 if (array[1].StartsWith("*"))
1159 {
1160 string text = array[1].TrimStart('*');
1161 Quest quest = EMono.game.quests.Get(text);
1162 if (text == "guild")
1163 {
1164 quest = Guild.CurrentQuest;
1165 }
1166 flag = quest != null;
1167 if (!EMono.game.quests.completedIDs.Contains(text))
1168 {
1169 value = quest?.phase ?? (-1);
1170 }
1171 else
1172 {
1173 value = 999;
1174 flag = true;
1175 }
1176 num = ((!int.TryParse(array[2], out var result)) ? ((quest != null) ? array[2].ToInt(quest.GetType()) : 0) : result);
1177 }
1178 else
1179 {
1180 num = int.Parse(array[2]);
1181 }
1182 switch (array[0])
1183 {
1184 case "=":
1185 if (!flag && num == -1)
1186 {
1187 return true;
1188 }
1189 if (flag && value == num)
1190 {
1191 return true;
1192 }
1193 break;
1194 case "!":
1195 if (!flag || value != num)
1196 {
1197 return true;
1198 }
1199 break;
1200 case ">":
1201 if (flag && value > num)
1202 {
1203 return true;
1204 }
1205 break;
1206 case ">=":
1207 if (flag && value >= num)
1208 {
1209 return true;
1210 }
1211 break;
1212 case "<":
1213 if (!flag || value < num)
1214 {
1215 return true;
1216 }
1217 break;
1218 case "<=":
1219 if (!flag || value <= num)
1220 {
1221 return true;
1222 }
1223 break;
1224 }
1225 return false;
1227 return setup.tag == IF;
1228 }
1229 }
1230
1231 public void Show()
1232 {
1233 SE.PopDrama();
1234 layer.SetActive(enable: true);
1235 layer.cg.alpha = 0f;
1236 layer.cg.DOFade(1f, 0.3f);
1237 }
1238
1239 public void Hide()
1240 {
1241 layer.SetActive(enable: false);
1242 }
1243}
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
FocusOption focusOption
static int Hire(Chara c)
Definition: CalcGold.cs:8
static void SetNormalRarity(bool fixedMat=false)
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:3961
bool HasElement(int ele, int req=1)
Definition: Card.cs:5725
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5939
int GetCurrency(string id="money")
Definition: Card.cs:3873
void RecalculateFOV()
Definition: Card.cs:6151
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
Definition: Card.cs:6613
Point pos
Definition: Card.cs:57
void Destroy()
Definition: Card.cs:4931
ThingContainer things
Definition: Card.cs:36
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:5958
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6586
Definition: Chara.cs:10
void OnInsulted()
Definition: Chara.cs:7862
bool CanRevive()
Definition: Chara.cs:4955
override int MaxHP
Definition: Chara.cs:706
FactionBranch homeBranch
Definition: Chara.cs:1052
bool isDead
Definition: Chara.cs:387
void MoveZone(string alias)
Definition: Chara.cs:3265
Dictionary< int, BGMData > dictBGM
Definition: CoreRef.cs:385
CoreRef refs
Definition: Core.cs:51
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
Portrait portrait
Definition: DialogDrama.cs:41
void AddChoice(DramaChoice choice)
Dictionary< string, string > dictLocalize
Definition: DramaManager.cs:53
DramaSequence sequence
Definition: DramaManager.cs:27
DramaOutcome outcome
Definition: DramaManager.cs:29
bool customEventsAdded
Definition: DramaManager.cs:65
string lastIF2
Definition: DramaManager.cs:59
DramaEventMethod AddEvent(Action func, float duration=0f, bool halt=false)
string textReplace
Definition: DramaManager.cs:73
CanvasGroup cg
Definition: DramaManager.cs:15
DramaEvent CustomEvent(Action func, string step=null, float duration=0f, bool halt=false)
LayerDrama layer
Definition: DramaManager.cs:13
CanvasGroup cgCover
Definition: DramaManager.cs:17
DialogDrama dialog
Definition: DramaManager.cs:31
Font[] fonts
Definition: DramaManager.cs:41
static Dictionary< string, ExcelData > dictCache
Definition: DramaManager.cs:75
DramaSequence Load()
Transform actorPos
Definition: DramaManager.cs:21
bool CheckIF(string IF)
bool idDefaultPassed
Definition: DramaManager.cs:67
void ParseLine(Dictionary< string, string > item)
void AddCustomEvents(string idCustom="Resident")
DramaEventMethod AddEvent(Action func, Func< string > funcJump)
UIDynamicList listCredit
Definition: DramaManager.cs:19
void SetDialog(string id="Default")
List< DramaChoice > _choices
Definition: DramaManager.cs:49
Dictionary< string, string > customTalkTopics
Definition: DramaManager.cs:51
DramaActor moldActor
Definition: DramaManager.cs:25
Image imageCover
Definition: DramaManager.cs:39
string idDefault
Definition: DramaManager.cs:71
List< DramaEvent > customEvents
Definition: DramaManager.cs:47
DramaEventTalk lastTalk
Definition: DramaManager.cs:61
Transform endroll
Definition: DramaManager.cs:23
string lastIF
Definition: DramaManager.cs:57
DramaSequence Play(DramaSetup setup)
Definition: DramaManager.cs:87
float creditSpeed
Definition: DramaManager.cs:55
DramaEvent AddEvent(DramaEvent e)
static Chara TG
Definition: DramaManager.cs:11
void Update()
Definition: DramaManager.cs:79
GameObject goSkip
Definition: DramaManager.cs:35
DramaSetup setup
Definition: DramaManager.cs:33
DramaActor tgActor
Definition: DramaManager.cs:77
void Enter()
Definition: DramaProp.cs:11
DramaSetup setup
List< DramaEvent > events
DramaActor AddActor(string id, Person person)
DramaActor GetActor(string id)
DramaEvent AddEvent(DramaEvent e)
void Play(string id)
void AddStep(string id)
Dictionary< string, int > steps
string sheet
Definition: DramaSetup.cs:5
string step
Definition: DramaSetup.cs:7
Person person
Definition: DramaSetup.cs:19
string textData
Definition: DramaSetup.cs:11
string forceJump
Definition: DramaSetup.cs:13
Definition: EClass.cs:5
static int rndHalf(int a)
Definition: EClass.cs:87
Definition: EMono.cs:4
static Core core
Definition: EMono.cs:5
static Chara pc
Definition: EMono.cs:13
static Player player
Definition: EMono.cs:11
static Zone _zone
Definition: EMono.cs:19
static FactionBranch BranchOrHomeBranch
Definition: EMono.cs:23
static Game game
Definition: EMono.cs:7
static Scene scene
Definition: EMono.cs:27
static UI ui
Definition: EMono.cs:15
static SoundManager Sound
Definition: EMono.cs:39
static FactionBranch Branch
Definition: EMono.cs:21
static Map _map
Definition: EMono.cs:17
Definition: Effect.cs:7
static Effect Get(Effect original)
Definition: Effect.cs:85
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:100
bool IsModified()
Definition: ExcelData.cs:72
List< Dictionary< string, string > > BuildList(string sheetName="_default")
Definition: ExcelData.cs:92
bool IsRecruit(Chara c)
List< Chara > members
HomeResourceManager resources
FactionRelation relation
Definition: FACTION.cs:126
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:1016
SpatialManager spatials
Definition: Game.cs:152
CardManager cards
Definition: Game.cs:155
bool IsSurvival
Definition: Game.cs:272
new World world
Definition: Game.cs:173
QuestManager quests
Definition: Game.cs:179
Definition: Guild.cs:2
static Guild CurrentDrama
Definition: Guild.cs:24
static GuildMerchant Merchant
Definition: Guild.cs:62
static QuestGuild CurrentQuest
Definition: Guild.cs:64
static GuildMage Mage
Definition: Guild.cs:58
static GuildFighter Fighter
Definition: Guild.cs:56
static GuildThief Thief
Definition: Guild.cs:60
Definition: Hide.cs:4
BaseHomeResource Get(string id)
Definition: Lang.cs:6
static string langCode
Definition: Lang.cs:28
static bool isBuiltin
Definition: Lang.cs:42
CanvasGroup cg
Definition: LayerDrama.cs:30
static LayerDrama Instance
Definition: LayerDrama.cs:20
static bool fromBook
Definition: LayerDrama.cs:16
static Quest currentQuest
Definition: LayerDrama.cs:6
static Religion currentReligion
Definition: LayerDrama.cs:8
static Action refAction2
Definition: LayerDrama.cs:26
static Action refAction1
Definition: LayerDrama.cs:24
void ShowScreenLock(string id)
Definition: Layer.cs:207
Layer SetOnKill(Action action)
Definition: Layer.cs:579
Chara FindChara(string id)
Definition: Map.cs:2568
void RevealAll(bool reveal=true)
Definition: Map.cs:905
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Person.cs:6
bool hasChara
Definition: Person.cs:38
void SetChara(Chara c)
Definition: Person.cs:88
Chara chara
Definition: Person.cs:36
bool killedDuponne
Definition: Player.cs:554
Flags flags
Definition: Player.cs:1050
Dictionary< string, int > dialogFlags
Definition: Player.cs:996
void ModKeyItem(string alias, int num=1, bool msg=true)
Definition: Player.cs:2068
Definition: Point.cs:9
Point Copy()
Definition: Point.cs:479
Image imageFull
Definition: Portrait.cs:30
HashSet< string > completedIDs
Definition: QuestManager.cs:17
void Complete(Quest q)
Definition: QuestManager.cs:98
bool IsCompleted(string id)
void UpdateJournal()
Quest Start(string id, string idGlobalChara)
Definition: QuestManager.cs:41
List< Quest > globalList
Definition: QuestManager.cs:14
Quest Get(string id)
Definition: Quest.cs:7
virtual bool HasDLC
Definition: Quest.cs:147
int phase
Definition: Quest.cs:40
virtual SourceQuest.Row source
Definition: Quest.cs:107
static Quest Create(string _id, string _idPerson=null, Chara c=null)
Definition: Quest.cs:241
void JoinFaith(Chara c, ConvertType type=ConvertType.Default)
Definition: Religion.cs:386
GameScreen screenElin
Definition: Scene.cs:93
void OnChangeHour()
Definition: Scene.cs:776
Definition: Shaker.cs:5
static void ShakeCam(string id="default", float magnitude=1f)
Definition: Shaker.cs:25
Zone Find(string id)
Definition: Steam.cs:8
static bool HasDLC(ID_DLC id)
Definition: Steam.cs:39
Thing Find(int uid)
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
static void Reserve(string idStep, Action onBeforePlay=null)
Definition: Tutorial.cs:55
static void Play(string idStep)
Definition: Tutorial.cs:7
GameDate date
Definition: World.cs:6
void AddPreEnter(ZonePreEnterEvent e, bool executeIfActiveZone=true)
Definition: Zone.cs:12
void SetBGM(List< int > ids, bool refresh=true)
Definition: Zone.cs:2867
ZoneEventManager events
Definition: Zone.cs:40
ZoneInstance instance
Definition: Zone.cs:52
Card AddCard(Card t, Point point)
Definition: Zone.cs:1943