26 if ((result = this._source) ==
null)
28 result = (this._source =
EClass.sources.factions.map[this.id]);
36 public virtual string TextType
40 return "sub_faction".lang();
56 EClass.game.factions.AssignUID(
this);
57 this.relation.faction =
this;
58 this.relation.affinity = this.source.relation;
59 this.name = this.source.GetText(
"name",
false);
65 this.relation.faction =
this;
69 public float GetHappiness()
75 public Sprite GetSprite()
77 return ResourceCache.Load<Sprite>(
"Media/Graphics/Image/Faction/" + this.source.id);
83 return (
int)((float)this.CountWealth() * 0.1f);
87 public List<FactionBranch> GetChildren()
89 List<FactionBranch> list =
new List<FactionBranch>();
92 if (spatial.mainFaction ==
this)
94 list.Add((spatial as
Zone).branch);
101 public int CountWealth()
103 if (
EClass._zone.IsPCFaction)
105 EClass._zone.branch.resources.Refresh();
110 num += factionBranch.Worth;
116 public int CountTerritories()
119 using (Dictionary<int, Spatial>.ValueCollection.Enumerator enumerator =
EClass.game.spatials.map.Values.GetEnumerator())
121 while (enumerator.MoveNext())
123 if (enumerator.Current.mainFaction ==
this)
133 public int CountMembers()
136 using (Dictionary<int, Chara>.ValueCollection.Enumerator enumerator =
EClass.game.cards.globalCharas.Values.GetEnumerator())
138 while (enumerator.MoveNext())
140 if (enumerator.Current.Chara.faction ==
this)
150 public Hostility GetHostility()
152 if (
this ==
EClass.Home ||
this.relation.affinity >= 200)
154 return Hostility.Ally;
156 if (this.relation.affinity >= 100)
158 return Hostility.Friend;
160 if (this.relation.affinity <= -100)
162 return Hostility.Enemy;
164 return Hostility.Neutral;
168 public void ModRelation(
int a)
170 this.relation.affinity += a;
174 public bool HasMember(
string id,
bool includeReserve =
true)
176 foreach (
Chara chara
in EClass.game.cards.globalCharas.Values)
178 if (chara.id ==
id && chara.IsHomeMember())
185 using (List<HireInfo>.Enumerator enumerator2 = this.listReserve.GetEnumerator())
187 while (enumerator2.MoveNext())
189 if (enumerator2.Current.chara.id ==
id)
200 public void AddContribution(
int a)
202 if (a == 0 || this.relation.type !=
FactionRelation.RelationType.Member)
206 this.relation.exp += a;
207 Msg.Say(
"contribute", a.ToString() ??
"",
this.Name,
null,
null);
211 public void AddReserve(
Chara c)
213 if (c.memberType == FactionMemberType.Livestock)
215 c.SetInt(36,
EClass.world.date.GetRaw(0) + 14400);
217 if (c.IsHomeMember())
219 c.homeBranch.RemoveMemeber(c);
221 if (c.currentZone !=
null)
223 c.currentZone.RemoveCard(c);
225 if (
EClass.Branch.uidMaid == c.uid)
227 EClass.Branch.uidMaid = 0;
234 this.listReserve.Add(item);
238 public void RemoveReserve(
Chara c)
240 this.listReserve.ForeachReverse(delegate(
HireInfo i)
242 if (i.chara == c || i.chara.uid == c.uid)
244 this.listReserve.Remove(i);
250 public void OnAdvanceDay()
254 factionBranch.OnAdvanceDay();
259 public void OnAdvanceMonth()
261 if (this.GetChildren().Count == 0)
266 num += this.GetResidentTax();
267 num += this.GetRankIncome();
268 num += this.GetFactionSalary();
276 EClass.world.SendPackage(p);
278 num = this.GetTotalTax(
true);
280 thing2.SetInt(35,
EClass.player.extraTax);
281 Msg.Say(
"getBill", Lang._currency(num,
"money"),
null,
null,
null);
282 this.TryPayBill(thing2);
283 Msg.Say(
"bills",
EClass.player.taxBills.ToString() ??
"",
null,
null,
null);
284 if (
EClass.player.taxBills >= 4)
286 EClass.player.ModKarma(-50);
291 public void TryPayBill(
Thing bill)
293 if (this.IsGlobalPolicyActive(2705) &&
EClass.game.cards.container_deposit.GetCurrency(
"money") > bill.c_bill)
298 EClass.world.SendPackage(bill);
306 if (factionBranch.members.Contains(c))
308 return factionBranch;
315 public void AddGlobalPolicy(
int id)
317 this.globalPolicies.Add(
id);
321 public bool IsGlobalPolicyActive(
int id)
324 using (List<FactionBranch>.Enumerator enumerator =
EClass.pc.faction.GetChildren().GetEnumerator())
326 while (enumerator.MoveNext())
328 if (enumerator.Current.policies.IsActive(
id, -1))
338 public void SetGlobalPolicyActive(
int id,
bool active)
342 factionBranch.policies.SetActive(
id, active);
347 public int GetResidentTax()
352 num += factionBranch.GetResidentTax();
356 Msg.Say(
"getResidentTax", Lang._currency(num,
"money"),
null,
null,
null);
362 public int GetRankIncome()
367 num +=
EClass.game.spatials.ranks.GetIncome(factionBranch.owner);
371 Msg.Say(
"getRankIncome", Lang._currency(num,
"money"),
null,
null,
null);
377 public int GetFactionSalary()
380 foreach (
Faction faction
in EClass.game.factions.dictAll.Values)
382 num += faction.relation.GetSalary();
386 Msg.Say(
"getFactionSalary", Lang._currency(num,
"money"),
null,
null,
null);
392 public int GetTotalTax(
bool evasion)
394 return this.GetBaseTax(evasion) + this.GetFameTax(evasion) +
EClass.player.extraTax;
398 public int GetBaseTax(
bool evasion)
400 int a = EClass.world.date.year -
EClass.game.Prologue.year;
401 int v = 500 + Mathf.Min(a, 10) * 500;
402 return this.EvadeTax(v, evasion);
406 public int GetFameTax(
bool evasion)
408 int v =
EClass.curve(
EClass.player.fame * 2, 10000, 2000, 80);
409 return this.EvadeTax(v, evasion);
413 public int EvadeTax(
int v,
bool evasion)
422 num += factionBranch.Evalue(2119);
424 return (
int)((float)(v * 100) / (100f + Mathf.Sqrt((
float)(num * 5))));
428 public void SetTaxTooltip(UINote n)
430 n.AddHeader(
"tax",
null);
431 n.AddTopic(
"tax_base", Lang._currency(
this.GetBaseTax(
true),
true, 14) +
" (" + Lang._currency(
this.GetBaseTax(
false),
false, 14) +
")");
432 n.AddTopic(
"tax_fame", Lang._currency(
this.GetFameTax(
true),
true, 14) +
" (" + Lang._currency(
this.GetFameTax(
false),
false, 14) +
")");
433 n.AddTopic(
"tax_extra", Lang._currency(
EClass.player.extraTax,
true, 14));
437 public int CountTaxFreeLand()
440 using (List<FactionBranch>.Enumerator enumerator =
EClass.pc.faction.GetChildren().GetEnumerator())
442 while (enumerator.MoveNext())
444 if (enumerator.Current.policies.IsActive(2514, -1))
459 public int maxReserve = 3;
475 public List<HireInfo> listReserve =
new List<HireInfo>();
483 public HashSet<int> globalPolicies =
new HashSet<int>();