Skip to content

EA 23.330 Nightly

July 26, 2026

19 files modified. 1 new file created.

Important Changes

Possible breaking changes. Click the filename to view the chunk.

ActEffect (1)

cs
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Point> points, ActRef actref, string lang = null) 
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Point> points, ActRef actref, string lang = null, Point center = null) 

AI_Craft_Snowman

public override IEnumerable<Status> Run()

cs
			owner.PlaySound(MATERIAL.sourceSnow.GetSoundDead());
			owner.PlayAnime(AnimeID.Jump);
			pos.TalkWitnesses(EClass.pc, (EClass.rnd(2) == 0) ? "nice_statue" : "ding_other", 5);
			EClass.pc.ModExp(258, 50); 
			owner.ModExp(258, 50); 
			if (EClass.rnd(3) != 0)
			{
				EClass.pc.stamina.Mod(-1); 
				owner.stamina.Mod(-1); 
			}
		}
	}.SetDuration(25, 5);

AI_Fish

public override void OnProgressComplete()

cs
				Steam.GetAchievement(ID_Achievement.EHE_FISH);
				if (EClass.rnd(777) == 0)
				{
					EClass.pc.AddCondition<ConInvulnerable>(); 
					ActEffect.Proc(EffectId.Wish, EClass.pc, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 50); 
					owner.AddCondition<ConInvulnerable>(); 
					ActEffect.Proc(EffectId.Wish, owner, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 50); 
				}
			}
			thing.Destroy();

public override void OnProgressComplete()

cs
		{
			if (EClass.game.config.preference.pickFish)
			{
				if (StatsBurden.GetPhase((EClass.pc.ChildrenWeight + thing.ChildrenAndSelfWeight) * 100 / EClass.pc.WeightLimit) >= 3) 
				if (StatsBurden.GetPhase((owner.ChildrenWeight + thing.ChildrenAndSelfWeight) * 100 / owner.WeightLimit) >= 3) 
				{
					EClass.pc.Say("tooHeavy", thing); 
					owner.Say("tooHeavy", thing); 
					shouldCancel = true;
				}
				else

AI_UseCrafter

public void OnEnd()

cs
		if (ing != null && ing.ExistsOnMap)
		{
			ing.isHidden = false;
			EClass.pc.Pick(ing); 
			owner.Pick(ing); 
		}
	}
	if (crafter.AutoTurnOff && crafter.owner.isOn)

public override IEnumerable<Status> Run()

cs
							thing2.SetBlessedState(blessed);
						}
						thing2.PlaySoundDrop(spatial: false);
						EClass._zone.AddCard(thing2, EClass.pc.pos); 
						EClass._zone.AddCard(thing2, owner.pos); 
						thing2.Identify(show: false);
						owner.Pick(thing2);
					}

public override IEnumerable<Status> Run()

cs
				Rand.SetSeed();
				if (crafter is TraitCookerMicrowave && recipe.id == "onsentamago" && EClass.rnd(3) != 0)
				{
					int power = EClass.curve((200 + ings[0].Quality * 5) * (100 + EClass.pc.Evalue(287) * 10) / 100, 400, 100); 
					ActEffect.ProcAt(EffectId.Explosive, power, BlessedState.Normal, crafter.owner.ExistsOnMap ? crafter.owner : EClass.pc, EClass.pc, EClass.pc.pos, isNeg: true, new ActRef
					int power = EClass.curve((200 + ings[0].Quality * 5) * (100 + owner.Evalue(287) * 10) / 100, 400, 100); 
					ActEffect.ProcAt(EffectId.Explosive, power, BlessedState.Normal, crafter.owner.ExistsOnMap ? crafter.owner : owner, owner, owner.pos, isNeg: true, new ActRef
					{
						aliasEle = "eleImpact"
					});

+ActComet

File Created
cs
public class ActComet : Spell
{
	public override bool CanAutofire => true;

	public override bool CanPressRepeat => true;

	public override bool CanRapidFire => true;

	public override float RapidDelay => 0.3f;
}

ActEffect

public static void TryDelay(Action a)

cs
		});
	}

	public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Point> points, ActRef actref, string lang = null) 
	public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Point> points, ActRef actref, string lang = null, Point center = null) 
	{
		if (points.Count == 0)
		{

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
	ElementRef elementRef = EClass.setting.elements[e.source.alias];
	int num = actref.act?.ElementPowerMod ?? 50;
	int num2 = 0;
	Point point = CC.pos.Copy(); 
	List<Card> list = new List<Card>();
	bool flag = false;
	if (center == null) 
	{ 
		center = CC.pos.Copy(); 
	} 
	if ((id == EffectId.Explosive || id == EffectId.Rocket || id == EffectId.GravityGun) && actref.refThing != null)
	{
		power = power * actref.refThing.material.hardness / 10;

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			{
				effect = Effect.Get("Element/ball_Fire");
			}
			float startDelay = ((id == EffectId.Meteor) ? 0.1f : 0.04f) * (float)CC.pos.Distance(p); 
			float startDelay = ((id == EffectId.Meteor || id == EffectId.Comet) ? 0.1f : 0.04f) * (float)center.Distance(p); 
			effect.SetStartDelay(startDelay);
			effect2.SetStartDelay(startDelay);
			if (id == EffectId.GravityGun)
			{
				float duration = 0.06f * (float)CC.pos.Distance(p); 
				float duration = 0.06f * (float)center.Distance(p); 
				Point pos2 = p.Copy();
				TweenUtil.Tween(duration, null, delegate
				{

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			{
				TryDelay(delegate
				{
					effect.Play(p).Flip(p.x > CC.pos.x); 
					effect.Play(p).Flip(p.x > center.x); 
				});
			}
			if (id == EffectId.Flare)

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			if (id == EffectId.Suicide)
			{
				num4 = CC.MaxHP * 2;
				num4 = num4 * 100 / (50 + point.Distance(p) * 75); 
				num4 = num4 * 100 / (50 + center.Distance(p) * 75); 
				if ((c.HasCondition<ConBrightnessOfLife>() || c.HasTag(CTAG.suicide)) && !c.HasCondition<ConWet>() && !c.IsPowerful)
				{
					list.Add(c);

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
				}
				if (id == EffectId.Ball || id == EffectId.BallBubble || id == EffectId.Explosive || id == EffectId.Rocket || id == EffectId.GravityGun)
				{
					num4 = num4 * 100 / (90 + point.Distance(p) * 10); 
					num4 = num4 * 100 / (90 + center.Distance(p) * 10); 
				}
			}
			if (id == EffectId.Sword)

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
				case EffectId.Rocket:
				case EffectId.Flare:
				case EffectId.GravityGun:
				case EffectId.Comet:
					num4 /= 2;
					break;
				}

void AddCon<T>(int rate, int power) where T : Condition

cs
		}
		if ((id == EffectId.Explosive || id == EffectId.Suicide || id == EffectId.Rocket) && (!EClass._zone.IsPCFaction || !EClass.Branch.HasItemProtection))
		{
			int num7 = id switch
			int num7; 
			switch (id) 
			{
				EffectId.Suicide => CC.LV / 3 + 40,  
				EffectId.Meteor => 50 + power / 20,  
				_ => (actref.refThing != null) ? actref.refThing.material.hardness : (30 + power / 20),  
			}; 
			default: 
				num7 = ((actref.refThing != null) ? actref.refThing.material.hardness : (30 + power / 20)); 
				break; 
			case EffectId.Suicide:
				num7 = CC.LV / 3 + 40; 
				break; 
			case EffectId.Meteor:
			case EffectId.Comet:
				num7 = 50 + power / 20; 
				break; 
			} 
			int num8 = num7; 
			bool flag3 = EClass._zone.HasLaw && !EClass._zone.IsPCFaction && (CC.IsPC || (id == EffectId.Explosive && actref.refThing == null)) && !(EClass._zone is Zone_Vernis);
			if (p.HasObj && p.cell.matObj.hardness <= num7) 
			if (p.HasObj && p.cell.matObj.hardness <= num8) 
			{
				EClass._map.MineObj(p);
				if (flag3)

void AddCon<T>(int rate, int power) where T : Condition

cs
					EClass.player.ModKarma(-1);
				}
			}
			if (!p.HasObj && p.HasBlock && p.matBlock.hardness <= num7) 
			if (!p.HasObj && p.HasBlock && p.matBlock.hardness <= num8) 
			{
				EClass._map.MineBlock(p);
				if (flag3)

void AddCon<T>(int rate, int power) where T : Condition

cs
		}
		if (e.id == 910)
		{
			int num8 = 0; 
			int num9 = 0; 
			if (id == EffectId.Meteor)
			{
				num8 = 2; 
				num9 = 2; 
			}
			if (EClass._zone.IsPCFaction && EClass._zone.branch.HasItemProtection)
			{
				num8 = 0; 
				num9 = 0; 
			}
			if (num8 > EClass.rnd(10)) 
			if (num9 > EClass.rnd(10)) 
			{
				p.ModFire(4 + EClass.rnd(10));
			}

void AddCon<T>(int rate, int power) where T : Condition

cs
	bool flag = state <= BlessedState.Cursed;
	bool flag2 = isNeg || flag;
	Element element = Element.Create(actRef.aliasEle.IsEmpty("eleFire"), power / 10);
	Color matColor = EClass.Colors.elementColors.TryGetValue(element.source.alias); 
	if (EClass.debug.enable && EInput.isShiftDown)
	{
		angle += 5;

void AddCon<T>(int rate, int power) where T : Condition

cs
	{
	case EffectId.Earthquake:
	{
		List<Point> list = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false); 
		if (list.Count == 0) 
		List<Point> list6 = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false); 
		if (list6.Count == 0) 
		{
			list.Add(CC.pos.Copy()); 
			list6.Add(CC.pos.Copy()); 
		}
		CC.Say("spell_earthquake", CC, element.Name.ToLower());
		TryDelay(delegate

void AddCon<T>(int rate, int power) where T : Condition

cs
			Shaker.ShakeCam("ball");
		}
		EClass.Wait(1f, CC);
		DamageEle(CC, id, power, element, list, actRef, "spell_earthquake"); 
		DamageEle(CC, id, power, element, list6, actRef, "spell_earthquake"); 
		break;
	}
	case EffectId.Meteor:
	{
		EffectMeteor.Create(cc.pos, 6, 10, delegate
		EffectMeteor.Create(cc.pos, 10, 10, delegate 
		{
		});
		List<Point> list3 = EClass._map.ListPointsInCircle(CC.pos, 10f); 
		if (list3.Count == 0) 
		List<Point> list = EClass._map.ListPointsInCircle(CC.pos, 10f); 
		if (list.Count == 0) 
		{
			list3.Add(CC.pos.Copy()); 
			list.Add(CC.pos.Copy()); 
		} 
		CC.Say("spell_ball", CC, element.Name.ToLower()); 
		TryDelay(delegate
		{ 
			CC.PlaySound("spell_ball"); 
		}); 
		if (CC.IsInMutterDistance()) 
		{ 
			Shaker.ShakeCam("ball"); 
		} 
		EClass.Wait(1f, CC); 
		DamageEle(CC, id, power, element, list, actRef, "spell_ball"); 
		return; 
	} 
	case EffectId.Comet:
	{ 
		EffectMeteor.CreateComet(tp, delegate
		{ 
		}, matColor * 2f); 
		List<Point> list7 = EClass._map.ListPointsInCircle(tp, 7f); 
		if (list7.Count == 0) 
		{ 
			list7.Add(tp.Copy()); 
		}
		CC.Say("spell_ball", CC, element.Name.ToLower());
		TryDelay(delegate

void AddCon<T>(int rate, int power) where T : Condition

cs
			Shaker.ShakeCam("ball");
		}
		EClass.Wait(1f, CC);
		DamageEle(CC, id, power, element, list3, actRef, "spell_ball"); 
		DamageEle(CC, id, power, element, list7, actRef, "spell_ball", tp); 
		return;
	}
	case EffectId.Hand:

void AddCon<T>(int rate, int power) where T : Condition

cs
	case EffectId.DrainMana:
	case EffectId.Sword:
	{
		List<Point> list6 = new List<Point>(); 
		list6.Add(tp.Copy()); 
		List<Point> list2 = new List<Point>(); 
		list2.Add(tp.Copy()); 
		EClass.Wait(0.3f, CC);
		TryDelay(delegate
		{
			CC.PlaySound("spell_hand");
		});
		if (!DamageEle(CC, id, power, element, list6, actRef, (id == EffectId.DrainBlood || id == EffectId.DrainMana) ? "" : ((id == EffectId.Sword) ? "spell_sword" : "spell_hand"))) 
		if (!DamageEle(CC, id, power, element, list2, actRef, (id == EffectId.DrainBlood || id == EffectId.DrainMana) ? "" : ((id == EffectId.Sword) ? "spell_sword" : "spell_hand"))) 
		{
			CC.Say("spell_hand_miss", CC, element.Name.ToLower());
		}

void AddCon<T>(int rate, int power) where T : Condition

cs
	case EffectId.MoonSpear:
	case EffectId.MoonArrow:
	{
		List<Point> list7 = new List<Point>(); 
		list7.Add(tp.Copy()); 
		List<Point> list4 = new List<Point>(); 
		list4.Add(tp.Copy()); 
		CC.Say((id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow", CC, element.Name.ToLower());
		EClass.Wait(0.5f, CC);
		TryDelay(delegate
		{
			CC.PlaySound((id == EffectId.MoonSpear) ? "spell_moonspear" : "spell_arrow");
		});
		DamageEle(CC, id, power, element, list7, actRef, (id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow"); 
		DamageEle(CC, id, power, element, list4, actRef, (id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow"); 
		return;
	}
	case EffectId.Summon:

void AddCon<T>(int rate, int power) where T : Condition

cs
	}
	case EffectId.Breathe:
	{
		List<Point> list2 = EClass._map.ListPointsInArc(CC.pos, tp, 7, 35f); 
		if (list2.Count == 0) 
		List<Point> list5 = EClass._map.ListPointsInArc(CC.pos, tp, 7, 35f); 
		if (list5.Count == 0) 
		{
			list2.Add(CC.pos.Copy()); 
			list5.Add(CC.pos.Copy()); 
		}
		CC.Say("spell_breathe", CC, element.Name.ToLower());
		EClass.Wait(0.8f, CC);

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			Shaker.ShakeCam("breathe");
		}
		DamageEle(CC, id, power, element, list2, actRef, "spell_breathe"); 
		DamageEle(CC, id, power, element, list5, actRef, "spell_breathe"); 
		return;
	}
	case EffectId.Scream:

void AddCon<T>(int rate, int power) where T : Condition

cs
			}
		}
		bool flag5 = id == EffectId.Explosive || id == EffectId.Suicide || id == EffectId.Rocket;
		List<Point> list5 = EClass._map.ListPointsInCircle((id == EffectId.GravityGun || id == EffectId.Rocket || id == EffectId.Flare) ? tp : cc.pos, radius2, !flag5, !flag5); 
		if (list5.Count == 0) 
		List<Point> list8 = EClass._map.ListPointsInCircle((id == EffectId.GravityGun || id == EffectId.Rocket || id == EffectId.Flare) ? tp : cc.pos, radius2, !flag5, !flag5); 
		if (list8.Count == 0) 
		{
			list5.Add(cc.pos.Copy()); 
			list8.Add(cc.pos.Copy()); 
		}
		cc.Say((id == EffectId.Suicide) ? "abSuicide" : "spell_ball", cc, element.Name.ToLower());
		EClass.Wait(0.8f, cc);

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			Shaker.ShakeCam("ball");
		}
		DamageEle(actRef.origin ?? cc, id, power, element, list5, actRef, (id == EffectId.Suicide) ? "suicide" : "spell_ball"); 
		DamageEle(actRef.origin ?? cc, id, power, element, list8, actRef, (id == EffectId.Suicide) ? "suicide" : "spell_ball"); 
		if (id == EffectId.Suicide && CC.IsAliveInCurrentZone)
		{
			CC.Die();

void AddCon<T>(int rate, int power) where T : Condition

cs
	}
	case EffectId.Bolt:
	{
		List<Point> list4 = EClass._map.ListPointsInLine(CC.pos, tp, 10); 
		if (list4.Count == 0) 
		List<Point> list3 = EClass._map.ListPointsInLine(CC.pos, tp, 10); 
		if (list3.Count == 0) 
		{
			list4.Add(CC.pos.Copy()); 
			list3.Add(CC.pos.Copy()); 
		}
		CC.Say("spell_bolt", CC, element.Name.ToLower());
		EClass.Wait(0.8f, CC);

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			Shaker.ShakeCam("bolt");
		}
		DamageEle(CC, id, power, element, list4, actRef, "spell_bolt"); 
		DamageEle(CC, id, power, element, list3, actRef, "spell_bolt"); 
		return;
	}
	case EffectId.Bubble:

void AddCon<T>(int rate, int power) where T : Condition

cs
		int num = 2 + EClass.rnd(3);
		int id2 = ((id == EffectId.Puddle) ? 4 : ((id == EffectId.Bubble) ? 5 : ((id == EffectId.MistOfDarkness) ? 6 : 7)));
		EffectId idEffect = ((id == EffectId.Bubble) ? EffectId.BallBubble : EffectId.PuddleEffect);
		Color matColor = EClass.Colors.elementColors.TryGetValue(element.source.alias); 
		if (id == EffectId.Bubble && CC.id == "cancer")
		{
			idEffect = EffectId.Nothing;

void AddCon<T>(int rate, int power) where T : Condition

cs
		return;
	}
	}
	List<Card> list8 = tp.ListCards().ToList(); 
	list8.Reverse(); 
	if (list8.Contains(CC)) 
	List<Card> list9 = tp.ListCards().ToList(); 
	list9.Reverse(); 
	if (list9.Contains(CC)) 
	{
		list8.Remove(CC); 
		list8.Insert(0, CC); 
		list9.Remove(CC); 
		list9.Insert(0, CC); 
	}
	bool flag6 = true;
	foreach (Card item3 in list8) 
	foreach (Card item3 in list9) 
	{
		if (tc == null || item3 == tc)
		{

AttackProcess

public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
	{
		return true;
	}
	if (CC.HasElement(1253)) 
	if (CC.HasElement(1253) && (!CC.HasElement(486) || !CC.IsPCFactionOrMinion)) 
	{
		TC.DamageHP(num7 / 10, 916, 100, AttackSource.None, CC);
	}

Card

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
		{
			Chara.TrySetEnemy(origin.Chara);
		}
		if ((weapon == null || !weapon.HasElement(486)) && origin.Evalue(428) > 0 && !IsPCFactionOrMinion && EClass.rnd(dmg) >= EClass.rnd(MaxHP / 10) + MaxHP / 100 + 1) 
		if ((weapon == null || !weapon.HasElement(486) || !origin.IsPCFactionOrMinion) && origin.Evalue(428) > 0 && !IsPCFactionOrMinion && EClass.rnd(dmg) >= EClass.rnd(MaxHP / 10) + MaxHP / 100 + 1) 
		{
			origin.Chara.TryNeckHunt(Chara, origin.Evalue(428) * 20, harvest: true);
		}

void Heal()

cs
	}
	void ProcAbsorb()
	{
		if (origin != null && origin.isChara && isChara && (weapon == null || !weapon.HasElement(486))) 
		if (origin != null && origin.isChara && isChara && (weapon == null || !weapon.HasElement(486) || !origin.IsPCFactionOrMinion)) 
		{
			int num19 = origin.Evalue(660) + (weapon?.Evalue(660, ignoreGlobalElement: true) ?? 0);
			int num20 = origin.Evalue(662) + (weapon?.Evalue(662, ignoreGlobalElement: true) ?? 0);

Chara

public bool CanAcceptGift(Chara c, Card t)

cs
	{
		return false;
	}
	if (t.category.id == "currency" && !IsPCFaction) 
	{ 
		return false; 
	} 
	if (base.IsPowerful && t.trait is TraitScroll { source: not null } traitScroll && traitScroll.source.abilityType.Contains("summon"))
	{
		return false;

CustomDramaExpansion

public static bool if_has_item(DramaManager dm, Dictionary<string, string> line,

cs
			expr = ">=1";
		}
		Chara chara = dm.GetChara(line["actor"]);
		return expr.Compare(chara.things.List((Thing t) => t.id == itemId).Count); 
		return expr.Compare(chara.things.List((Thing t) => t.id == itemId).Sum((Thing t) => t.Num)); 
	}

	[ElinDramaActionInvoke("nodiscard")]

EffectId

public enum EffectId

cs
	Degenerate = 318,
	MassFear = 319,
	Fuse = 320,
	BlueDrag = 321
	BlueDrag = 321, 
	Comet = 322
}

EffectMeteor

public class EffectMeteor : Effect

cs

	public Vector3 startPos;

	public SoundData soundExplode; 
	public SpriteRenderer sr2; 
	public float time;

	public override void OnPlay()

public override void OnPlay()

cs
			aniExplosion.SetActive(enable: true);
			destPos.Animate(AnimeID.Dig, animeBlock: true);
			onComplete?.Invoke();
			EMono.Sound.Play("explode", destV); 
			EMono.Sound.Play(soundExplode, destV); 
			Shaker.ShakeCam("meteor");
		});
}

public static void Create(Point center, int radius, int count, Action<int, Point

cs
			effect.Play(p);
		}
	}
	public static void CreateComet(Point center, Action<int, Point> onComplete, Color color) 
	{ 
		Point p = center.Copy(); 
		EffectMeteor obj = Effect.Get("meteor_comet") as EffectMeteor; 
		obj.onComplete = delegate
		{ 
			onComplete(0, p); 
		}; 
		obj.sr.color = color; 
		obj.Play(p); 
	} 
}

GameLang

public static string Parse(string text, bool thirdPerson, string val1, string va

cs
	if (val3 != null)
	{
		stringBuilder.Replace("#3", val3);
		int num = val3.ToInt(); 
		stringBuilder.Replace("(s3)", (num > 1) ? "s" : ""); 
	}
	if (val4 != null)
	{
		stringBuilder.Replace("#4", val4);
		int num2 = val4.ToInt(); 
		stringBuilder.Replace("(s4)", (num2 > 1) ? "s" : ""); 
	}
	if (int.TryParse(val1, out var result))
	{

GameScreenElona

public override void OnActivate()

cs
	actor.transMap.SetActive(enable: true);
	actor.selector.hasTargetChanged = true;
	EMono.scene.skyBG.SetActive(enable: false);
	EMono.scene.skyPlane.SetActive(enable: false); 
	EMono.scene.cam.clearFlags = CameraClearFlags.Color;
	Tutorial.Play("region");
	actor.OnActivate();

GoalCombat

public virtual void BuildAbilityList()

cs
	abilities.Clear();
	foreach (ActList.Item item in owner.ability.list.items)
	{
		AddAbility(item.act, 0, item.chance, item.pt); 
		if (!owner.IsPC || (EClass.game.config.autoCombat.bUseInventory && (!EClass.game.config.autoCombat.bUseFav || EClass.player.favAbility.Contains(item.act.id)))) 
		{ 
			AddAbility(item.act, 0, item.chance, item.pt); 
		} 
	}
	if (owner.mimicry != null && owner.mimicry.IsChara)
	{

InvOwnerDeliver

public static void PayBill(Thing t, bool fromBank = false)

cs
	}
	else if (flag)
	{
		if (EClass.player.stats.taxBillsPaid < 0) 
		{ 
			EClass.player.stats.taxBillsPaid = 2147483647L; 
		} 
		EClass.player.stats.taxBillsPaid += t.c_bill;
		EClass.player.taxBills--;
		if (EClass.player.taxBills < 0)

Player

public class Stats : EClass

cs
		[JsonProperty]
		public int taxBills;

		[JsonProperty] 
		public int taxBillsPaid; 
		[JsonProperty]
		public int digs;

public class Stats : EClass

cs
		[JsonProperty]
		public long shipMoney;

		[JsonProperty] 
		public long taxBillsPaid; 
		public int lastShippingExp;

		public int lastShippingExpMax;

SourceElement

public override void OnAfterImportData()

cs
		AddRow(ele, num + num2 + 1000, "sword_");
		AddRow(ele, num + num2 + 1100, "bit_");
		AddRow(ele, num + num2 + 1200, "flare_");
		AddRow(ele, num + num2 + 1300, "comet_"); 
		num2++;
	}
	initialized = false;

StanceSongValor

public override void TickSong()

cs
		}
		else
		{
			item.GetCondition<ConSongValor>()?.SetValue(3); 
			item.GetCondition<ConSongValor>()?.SetValue(10); 
		}
	}
}

TraitMapBoard

public override void TrySetAct(ActPlan p)

cs
		List<FogType> list = Util.EnumToList<FogType>();
		for (int i = 0; i < list.Count; i++)
		{
			layerList.Add(list[i].ToString(), delegate(int a) 
			layerList.Add((list[i].ToString() == "Blizard") ? "Blizzard" : list[i].ToString(), delegate(int a) 
			{
				EClass._map.config.fog = list[a];
				EClass.screen.RefreshAll();

TraitParchmentBottle

public override void SetName(ref string s)

cs
		base.SetName(ref s);
		if (owner.c_lockLv != 0)
		{
			s += "_sealed".lang(); 
			s = s + Lang.space + "_sealed".lang(); 
		}
	}
}