Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
Religion.cs
Go to the documentation of this file.
1using System;
2using Newtonsoft.Json;
3using UnityEngine;
4
5public class Religion : EClass
6{
7 public enum ConvertType
8 {
11 }
12
13 [JsonProperty]
14 public int relation;
15
16 [JsonProperty]
17 public int giftRank;
18
19 [JsonProperty]
20 public int mood;
21
22 public static Religion recentWrath;
23
25
26 public virtual string id => "";
27
28 public virtual bool IsAvailable => false;
29
30 public string Name => source.GetName();
31
33
34 public string NameShort => source.GetTextArray("name2")[1];
35
36 public string NameDomain => source.GetTextArray("name2")[0];
37
38 public string TextType => ("sub_" + source.type).lang();
39
40 public string TextGodGender => source.GetText("textType");
41
42 public string TextMood => GetTextTemper();
43
44 public bool IsEyth => id == "eyth";
45
46 public bool IsEhekatl => id == "luck";
47
48 public bool IsOpatos => id == "earth";
49
50 public virtual bool IsMinorGod => false;
51
52 public virtual bool CanJoin => true;
53
54 public virtual SourceElement.Row GetFeat(int i)
55 {
56 return EClass.sources.elements.alias["featGod_" + id + i];
57 }
58
59 public void Init()
60 {
61 relation = source.relation;
62 }
63
64 public void OnLoad()
65 {
66 }
67
68 public void OnAdvanceDay()
69 {
70 }
71
72 public Sprite GetSprite()
73 {
74 return ResourceCache.Load<Sprite>("Media/Graphics/Image/Faction/" + source.id) ?? ResourceCache.Load<Sprite>("Media/Graphics/Image/Faction/eyth");
75 }
76
77 public void SetTextRelation(UIText text)
78 {
79 if (relation > 100)
80 {
81 text.SetText("reFriend".lang(), FontColor.Good);
82 }
83 else if (relation < -100)
84 {
85 text.SetText("reEnemy".lang(), FontColor.Bad);
86 }
87 else
88 {
89 text.SetText("reNone".lang(), FontColor.Passive);
90 }
91 }
92
93 public string GetTextBenefit()
94 {
95 string text = "";
96 for (int i = 0; i < source.elements.Length; i += 2)
97 {
98 if (i != 0)
99 {
100 text = text + Lang.words.comma + Lang.space;
101 }
102 text += EClass.sources.elements.map[source.elements[i]].GetName();
103 }
104 return source.GetText("textBenefit") + (IsEyth ? "" : "textBenefit".lang(text));
105 }
106
107 public string GetTextTemper(int _temper = -99999)
108 {
109 if (IsEyth)
110 {
111 return "-";
112 }
113 if (_temper == -99999)
114 {
115 _temper = mood;
116 }
117 string[] list = Lang.GetList("temper");
118 if (_temper <= -85)
119 {
120 return list[0].ToTitleCase().TagColor(FontColor.Bad);
121 }
122 if (_temper <= -45)
123 {
124 return list[1].ToTitleCase().TagColor(FontColor.Bad);
125 }
126 if (_temper <= -15)
127 {
128 return list[2].ToTitleCase();
129 }
130 if (_temper < 15)
131 {
132 return list[3].ToTitleCase();
133 }
134 if (_temper < 45)
135 {
136 return list[4].ToTitleCase();
137 }
138 if (_temper < 85)
139 {
140 return list[5].ToTitleCase().TagColor(FontColor.Great);
141 }
142 return list[6].ToTitleCase().TagColor(FontColor.Good);
143 }
144
145 public void Revelation(string idTalk, int chance = 100)
146 {
147 if (!IsEyth && EClass.rnd(100) <= chance)
148 {
149 Talk(idTalk, EClass.pc);
150 }
151 }
152
153 public void Talk(string idTalk, Card c = null, Card agent = null)
154 {
155 if (!IsEyth)
156 {
158 Msg.Say("<i>" + GetGodTalk(idTalk) + " </i>", c ?? EClass.pc);
159 }
160 }
161
162 public string GetGodTalk(string suffix)
163 {
164 return EClass.sources.dataGodTalk.GetText(id, suffix).Split(Environment.NewLine.ToCharArray()).RandomItem();
165 }
166
167 public virtual int GetOfferingMtp(Thing t)
168 {
169 return 0;
170 }
171
172 public int GetOfferingValue(Thing t, int num = -1)
173 {
174 t.CheckJustCooked();
175 if (num == -1)
176 {
177 num = t.Num;
178 }
179 int v = 0;
180 if (t.source._origin == "meat")
181 {
182 v = Mathf.Clamp(t.SelfWeight / 10, 1, 1000);
183 if (t.refCard == null)
184 {
185 v /= 10;
186 }
187 }
188 else if (GetOfferingMtp(t) > 0)
189 {
190 SetValue(t.category, GetOfferingMtp(t));
191 }
192 else
193 {
194 string[] cat_offer = source.cat_offer;
195 foreach (string key in cat_offer)
196 {
197 if (t.category.IsChildOf(key))
198 {
199 SetValue(EClass.sources.categories.map[key], 1);
200 break;
201 }
202 }
203 }
204 if (v == 0)
205 {
206 return 0;
207 }
208 if (t.IsDecayed)
209 {
210 v /= 10;
211 }
212 v = v * (100 + Mathf.Min(t.LV * 2, 100) + (t.HasElement(757) ? 50 : 0)) / 100;
213 v = Mathf.Max(v, 1) * num;
214 return v;
215 void SetValue(SourceCategory.Row cat, int mtp)
216 {
217 v = Mathf.Clamp(t.SelfWeight / 10, 50, 1000);
218 v *= cat.offer * mtp / 100;
219 }
220 }
221
222 public bool TryGetGift()
223 {
224 if (IsEyth || source.rewards.Length == 0)
225 {
226 return false;
227 }
228 Point point = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? EClass.pc.pos;
229 int num = EClass.pc.Evalue(85);
230 if (giftRank == 0 && (num >= 15 || EClass.debug.enable))
231 {
232 Talk("pet");
233 Chara chara = CharaGen.Create(source.rewards[0]);
234 EClass._zone.AddCard(chara, point);
235 chara.MakeAlly();
236 chara.PlayEffect("aura_heaven");
237 giftRank = 1;
238 return true;
239 }
240 if (source.rewards.Length >= 2 && giftRank == 1 && (num >= 30 || EClass.debug.enable))
241 {
242 Talk("gift");
243 string[] array = source.rewards[1].Split('|');
244 string[] array2 = array;
245 foreach (string text in array2)
246 {
247 Reforge(text, point, text == array[0]);
248 }
249 giftRank = 2;
250 return true;
251 }
252 return false;
253 }
254
255 public bool IsValidArtifact(string id)
256 {
257 if (giftRank < 2)
258 {
259 return false;
260 }
261 return id switch
262 {
263 "gun_mani" => this == EClass.game.religions.Machine,
264 "cloak_mani" => this == EClass.game.religions.Machine,
265 "scythe_kumi" => this == EClass.game.religions.Harvest,
266 "blunt_earth" => this == EClass.game.religions.Earth,
267 "luckydagger" => this == EClass.game.religions.Luck,
268 "staff_element" => this == EClass.game.religions.Element,
269 "windbow" => this == EClass.game.religions.Wind,
270 "shirt_wind" => this == EClass.game.religions.Wind,
271 "pole_holy" => this == EClass.game.religions.Healing,
272 "sword_muramasa2" => this == EClass.game.religions.MoonShadow,
273 "kogitsunemaru" => this == EClass.game.religions.Trickery,
274 "warmonger" => this == EClass.game.religions.Strife,
275 _ => false,
276 };
277 }
278
279 public static Thing Reforge(string id, Point pos = null, bool first = true)
280 {
281 if (pos == null)
282 {
283 pos = EClass.pc.pos.Copy();
284 }
285 pos.Set(pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos);
286 Thing thing = ThingGen.Create(id);
287 foreach (Element value in thing.elements.dict.Values)
288 {
289 if (value.id == 66 || value.id == 67 || value.id == 64 || value.id == 65 || value.id == 92)
290 {
291 continue;
292 }
293 switch (id)
294 {
295 case "gun_mani":
296 thing.c_idDeity = EClass.game.religions.Machine.id;
297 break;
298 case "cloak_mani":
299 if (value.id == 427 || value.id == 957 || value.id == 105 || value.id == 466 || value.id == 664)
300 {
301 value.vExp = -1;
302 }
303 thing.c_idDeity = EClass.game.religions.Machine.id;
304 break;
305 case "scythe_kumi":
306 if (value.id == 6650 || value.id == 480 || value.id == 959 || value.id == 428 || value.id == 640 || value.id == 665)
307 {
308 value.vExp = -1;
309 }
310 thing.c_idDeity = EClass.game.religions.Harvest.id;
311 break;
312 case "blunt_earth":
313 if (value.id == 70 || value.id == 55 || value.id == 56 || value.id == 954 || value.id == 423 || value.id == 421)
314 {
315 value.vExp = -1;
316 }
317 thing.c_idDeity = EClass.game.religions.Earth.id;
318 break;
319 case "luckydagger":
320 if (value.id != 426)
321 {
322 value.vExp = -1;
323 }
324 thing.c_idDeity = EClass.game.religions.Luck.id;
325 break;
326 case "staff_element":
327 if (value.id == 411 || (value is Resistance && value.id != 959))
328 {
329 value.vExp = -1;
330 }
331 thing.c_idDeity = EClass.game.religions.Element.id;
332 break;
333 case "windbow":
334 thing.c_idDeity = EClass.game.religions.Wind.id;
335 break;
336 case "shirt_wind":
337 if (!(value is Resistance) && value.id != 226 && value.id != 152 && value.id != 77)
338 {
339 value.vExp = -1;
340 }
341 thing.c_idDeity = EClass.game.religions.Wind.id;
342 break;
343 case "pole_holy":
344 if (value.id == 60 || value.id == 461 || value.id == 423)
345 {
346 value.vExp = -1;
347 }
348 thing.c_idDeity = EClass.game.religions.Healing.id;
349 break;
350 case "sword_muramasa2":
351 if (value.id == 401 || value.id == 916 || value.id == 661)
352 {
353 value.vExp = -1;
354 }
355 thing.c_idDeity = EClass.game.religions.MoonShadow.id;
356 break;
357 case "kogitsunemaru":
358 if (value.id != 656)
359 {
360 value.vExp = -1;
361 }
362 thing.c_idDeity = EClass.game.religions.Trickery.id;
363 break;
364 case "warmonger":
365 if (value.id == 468 || value.id == 423 || value.id == 463 || value.id == 460 || value.id == 464 || value.id == 465)
366 {
367 value.vExp = -1;
368 }
369 thing.c_idDeity = EClass.game.religions.Strife.id;
370 break;
371 }
372 }
373 EClass._zone.AddCard(thing, pos);
374 pos.PlayEffect("aura_heaven");
375 if (first)
376 {
377 pos.PlaySound("godbless");
378 }
379 return thing;
380 }
381
382 public virtual void OnBecomeBranchFaith()
383 {
384 }
385
386 public void JoinFaith(Chara c, ConvertType type = ConvertType.Default)
387 {
388 if (!c.IsPC)
389 {
390 c.faith = this;
392 EClass.Sound.Play("worship");
393 Msg.Say("changeFaith", c, Name);
394 return;
395 }
396 if (c.faith != this)
397 {
398 c.faith.LeaveFaith(c, this, type);
399 }
400 if (type != ConvertType.Campaign)
401 {
402 EClass.pc.c_daysWithGod = 0;
403 }
404 Msg.Say("worship", Name);
405 Talk("worship", c);
406 EClass.Sound.Play("worship");
407 c.PlayEffect("aura_heaven");
408 c.faith = this;
409 OnJoinFaith();
410 if (IsEyth)
411 {
412 mood = 0;
413 }
414 else
415 {
416 mood = 50;
417 }
419 if (!c.HasElement(306))
420 {
421 c.elements.Learn(306);
422 }
423 if (c.IsPC)
424 {
426 }
427 }
428
429 public void LeaveFaith(Chara c, Religion newFaith, ConvertType type)
430 {
431 if (IsEyth)
432 {
433 return;
434 }
435 bool flag = (newFaith == EClass.game.religions.Trickery && this == EClass.game.religions.MoonShadow) || (newFaith == EClass.game.religions.MoonShadow && this == EClass.game.religions.Trickery);
436 if (c.IsPC)
437 {
438 Msg.Say("worship2");
439 if (!flag && type != ConvertType.Campaign)
440 {
441 Punish(c);
442 }
443 }
444 if (flag)
445 {
446 Talk("regards");
447 c.elements.SetBase(85, c.Evalue(85) / 2);
448 }
449 else
450 {
451 c.elements.SetBase(85, 0);
452 }
453 if (c.IsPC)
454 {
456 }
457 OnLeaveFaith();
459 }
460
461 public void Punish(Chara c)
462 {
463 Talk("wrath");
464 if (c.Evalue(1228) > 0)
465 {
467 return;
468 }
469 c.hp = 1;
470 c.mana.value = 1;
471 c.stamina.value = 1;
472 if (c.HasCondition<ConWrath>())
473 {
474 recentWrath = this;
475 c.DamageHP(999999, AttackSource.Wrath);
476 recentWrath = null;
477 return;
478 }
479 Thing thing = ThingGen.Create("punish_ball");
480 int num = 0;
482 {
483 if (item.giftRank > 0)
484 {
485 num++;
486 }
487 }
488 if (num >= 4)
489 {
490 thing.idSkin = 1;
491 }
492 thing.ChangeWeight(EClass.pc.WeightLimit / 4 + 1000);
493 c.AddThing(thing);
494 c.AddCondition<ConWrath>(2000 + (c.IsPC ? (EClass.pc.c_daysWithGod * 20) : 0));
495 }
496
497 public void PunishTakeOver(Chara c)
498 {
499 Talk("takeoverFail");
500 if (c.Evalue(1228) > 0)
501 {
503 return;
504 }
505 c.hp /= 2;
506 if (c.mana.value > 0)
507 {
508 c.mana.value = c.mana.value / 2;
509 }
510 if (c.stamina.value > 0)
511 {
512 c.stamina.value = c.stamina.value / 2;
513 }
514 if (c.HasCondition<ConWrath>())
515 {
516 recentWrath = this;
517 c.DamageHP(999999, AttackSource.Wrath);
518 recentWrath = null;
519 return;
520 }
521 Thing thing = ThingGen.Create("punish_ball");
522 thing.c_weight = EClass.pc.WeightLimit / 4 + 1000;
523 thing.isWeightChanged = true;
524 thing.SetDirtyWeight();
525 c.AddThing(thing);
526 c.AddCondition<ConWrath>(200);
527 }
528
529 public virtual void OnJoinFaith()
530 {
531 }
532
533 public virtual void OnLeaveFaith()
534 {
535 }
536
537 public void OnChangeHour()
538 {
539 if (IsEyth)
540 {
541 mood = 0;
542 }
543 else
544 {
545 mood = EClass.rnd(200) - 100;
546 }
547 }
548}
AttackSource
Definition: AttackSource.cs:2
FontColor
Definition: FontColor.cs:2
Definition: Card.cs:11
bool IsDecayed
Definition: Card.cs:2147
ElementContainerCard elements
Definition: Card.cs:37
CardRow refCard
Definition: Card.cs:1843
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:3735
bool HasElement(int ele, int req=1)
Definition: Card.cs:5214
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:2901
Point pos
Definition: Card.cs:55
void SetDirtyWeight()
Definition: Card.cs:2414
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:5438
void ChangeWeight(int a)
Definition: Card.cs:2424
void SayNothingHappans()
Definition: Card.cs:6041
int Evalue(int ele)
Definition: Card.cs:2431
void CheckJustCooked()
Definition: Card.cs:5857
int Num
Definition: Card.cs:154
SourceCategory.Row category
Definition: Card.cs:1925
int LV
Definition: Card.cs:370
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Definition: Chara.cs:10
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8415
Faction faction
Definition: Chara.cs:412
override bool IsPC
Definition: Chara.cs:597
bool HasCondition(string alias)
Definition: Chara.cs:8568
override int WeightLimit
Definition: Chara.cs:695
void MakeAlly(bool msg=true)
Definition: Chara.cs:2004
Stats mana
Definition: Chara.cs:963
Stats stamina
Definition: Chara.cs:955
void RefreshFaithElement()
Definition: Chara.cs:9166
Religion faith
Definition: Chara.cs:424
bool enable
Definition: CoreDebug.cs:285
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static int rnd(int a)
Definition: EClass.cs:50
static Zone _zone
Definition: EClass.cs:20
static SourceManager sources
Definition: EClass.cs:42
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static SoundManager Sound
Definition: EClass.cs:46
void Learn(int ele, int v=1)
Element SetBase(string alias, int v, int potential=0)
int id
Definition: ELEMENT.cs:240
string GetText(string id, string topic="text")
Definition: ExcelData.cs:209
ElementContainerFaction charaElements
Definition: FACTION.cs:144
ReligionManager religions
Definition: Game.cs:158
Definition: Lang.cs:6
static string[] GetList(string id)
Definition: Lang.cs:114
static string space
Definition: Lang.cs:32
Color TalkGod
Definition: MsgColors.cs:9
Definition: Msg.cs:5
static MsgColors colors
Definition: Msg.cs:20
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
static void SetColor()
Definition: Msg.cs:22
Definition: Point.cs:9
Point Copy()
Definition: Point.cs:467
Point Set(int _x, int _z)
Definition: Point.cs:479
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false)
Definition: Point.cs:595
override string id
Definition: ReligionEarth.cs:3
override string id
override string id
override string id
override string id
Definition: ReligionLuck.cs:3
override string id
ReligionWind Wind
ReligionHarvest Harvest
ReligionMachine Machine
ReligionLuck Luck
ReligionStrife Strife
ReligionMoonShadow MoonShadow
ReligionTrickery Trickery
ReligionElement Element
List< Religion > list
ReligionEarth Earth
ReligionHealing Healing
override string id
override string id
override string id
override string id
Definition: ReligionWind.cs:3
string NameDomain
Definition: Religion.cs:36
string Name
Definition: Religion.cs:30
bool IsEyth
Definition: Religion.cs:44
string TextType
Definition: Religion.cs:38
int GetOfferingValue(Thing t, int num=-1)
Definition: Religion.cs:172
bool IsEhekatl
Definition: Religion.cs:46
static Religion recentWrath
Definition: Religion.cs:22
virtual void OnJoinFaith()
Definition: Religion.cs:529
string GetTextBenefit()
Definition: Religion.cs:93
virtual int GetOfferingMtp(Thing t)
Definition: Religion.cs:167
string GetGodTalk(string suffix)
Definition: Religion.cs:162
string GetTextTemper(int _temper=-99999)
Definition: Religion.cs:107
void OnChangeHour()
Definition: Religion.cs:537
ConvertType
Definition: Religion.cs:8
SourceReligion.Row source
Definition: Religion.cs:32
virtual SourceElement.Row GetFeat(int i)
Definition: Religion.cs:54
void Punish(Chara c)
Definition: Religion.cs:461
string TextGodGender
Definition: Religion.cs:40
int giftRank
Definition: Religion.cs:17
string TextMood
Definition: Religion.cs:42
void Revelation(string idTalk, int chance=100)
Definition: Religion.cs:145
bool IsOpatos
Definition: Religion.cs:48
virtual bool IsMinorGod
Definition: Religion.cs:50
int relation
Definition: Religion.cs:14
virtual void OnLeaveFaith()
Definition: Religion.cs:533
virtual bool IsAvailable
Definition: Religion.cs:28
void JoinFaith(Chara c, ConvertType type=ConvertType.Default)
Definition: Religion.cs:386
void LeaveFaith(Chara c, Religion newFaith, ConvertType type)
Definition: Religion.cs:429
Sprite GetSprite()
Definition: Religion.cs:72
int mood
Definition: Religion.cs:20
virtual void OnBecomeBranchFaith()
Definition: Religion.cs:382
void Init()
Definition: Religion.cs:59
static Thing Reforge(string id, Point pos=null, bool first=true)
Definition: Religion.cs:279
void SetTextRelation(UIText text)
Definition: Religion.cs:77
bool TryGetGift()
Definition: Religion.cs:222
virtual string id
Definition: Religion.cs:26
void PunishTakeOver(Chara c)
Definition: Religion.cs:497
void Talk(string idTalk, Card c=null, Card agent=null)
Definition: Religion.cs:153
void OnLoad()
Definition: Religion.cs:64
virtual bool CanJoin
Definition: Religion.cs:52
SourceReligion.Row _source
Definition: Religion.cs:24
string NameShort
Definition: Religion.cs:34
bool IsValidArtifact(string id)
Definition: Religion.cs:255
void OnAdvanceDay()
Definition: Religion.cs:68
ExcelData dataGodTalk
SourceCategory categories
SourceElement elements
SourceReligion religions
virtual int value
Definition: Stats.cs:56
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
SourceThing.Row source
Definition: Thing.cs:11
override int SelfWeight
Definition: Thing.cs:62
Definition: UIText.cs:6
void SetText(string s)
Definition: UIText.cs:159
Card AddCard(Card t, Point point)
Definition: Zone.cs:1893