Skip to content

EA 23.205 Nightly

September 25, 2025

9 files modified.

Important Changes

None.

AI_Idle

public override IEnumerable<Status> Run()

cs
					{
						continue;
					}
					for (int i = 0; i < 5; i++) 
					for (int j = 0; j < 5; j++) 
					{
						if (thing8.encLV >= 0)
						{

public override IEnumerable<Status> Run()

cs
	{
		owner.TryAssignBed();
	}
	if (owner.id == "geist" && EClass.rnd(20) == 0) 
	string text; 
	if (!EClass._zone.IsRegion) 
	{
		Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false); 
		if (nearestPoint != null) 
		text = owner.id; 
		if (!(text == "geist")) 
		{
			foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion)) 
			if (text == "mech_scarab" && EClass.rnd(20) == 0) 
			{
				item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint); 
				int i = 0; 
				owner.pos.ForeachNeighbor(delegate(Point p) 
				{ 
					if (p.HasChara && p.FirstChara.id == "mech_scarab") 
					{ 
						i++; 
					} 
				}); 
				if (i <= 2) 
				{ 
					EClass._zone.AddCard(owner.Duplicate(), owner.pos.GetNearestPoint(allowBlock: false, allowChara: false)); 
				} 
			}
			if (owner != null) 
		} 
		else if (EClass.rnd(20) == 0) 
		{ 
			Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false); 
			if (nearestPoint != null) 
			{
				if (!owner.IsPCFactionOrMinion) 
				foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion)) 
				{ 
					item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint); 
				} 
				if (owner != null) 
				{
					EClass.pc.ai.Cancel(); 
					if (!owner.IsPCFactionOrMinion) 
					{ 
						EClass.pc.ai.Cancel(); 
					} 
					owner.Teleport(nearestPoint); 
				}
				owner.Teleport(nearestPoint); 
				yield return Success(); 
			}
			yield return Success(); 
		}
	}
	if (EClass._zone.IsPCFaction)

public override IEnumerable<Status> Run()

cs
			else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
			{
				bool flag4 = EClass._zone is Zone_Derphy;
				string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad")); 
				if (!text.IsEmpty()) 
				string text2 = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad")); 
				if (!text2.IsEmpty()) 
				{
					owner.Talk(text); 
					owner.Talk(text2); 
				}
				if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
				{

public override IEnumerable<Status> Run()

cs
	}
	if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
	{
		for (int j = 0; j < 100; j++) 
		for (int k = 0; k < 100; k++) 
		{
			Point randomPoint = EClass._map.GetRandomPoint();
			if (randomPoint.IsDeepWater && !randomPoint.IsBlocked)

public override IEnumerable<Status> Run()

cs
			}
		}
	}
	string aiIdle = owner.source.aiIdle; 
	if (!(aiIdle == "stand") && !(aiIdle == "root")) 
	text = owner.source.aiIdle; 
	if (!(text == "stand") && !(text == "root")) 
	{
		if (EClass.rnd(15) == 0)
		{

public override IEnumerable<Status> Run()

cs
	yield return Restart();
	Point FindMovePoint(BaseArea.AccessType type)
	{
		for (int k = 0; k < 20; k++) 
		for (int l = 0; l < 20; l++) 
		{
			Point randomPoint2 = owner.pos.GetRandomPoint(5 + k, requireLos: false); 
			Point randomPoint2 = owner.pos.GetRandomPoint(5 + l, requireLos: false); 
			if (randomPoint2 != null && randomPoint2.IsInBounds && (randomPoint2.cell.room == null || randomPoint2.cell.room.data.accessType == type))
			{
				return randomPoint2;

ActMelee

public bool Attack(float dmgMulti = 1f)

cs
	{
		Act.CC.RemoveCondition<ConInvisibility>();
	}
	if (orgTC.isChara && orgTC.ExistsOnMap && orgTC != cC && !orgTC.IsRestrainedResident && !orgTC.IsDisabled && ACT.Melee.CanPerform(orgTC.Chara, cC)) 
	if (orgTC.isChara && orgTC.ExistsOnMap && orgTC != cC && !orgTC.IsRestrainedResident && !orgTC.IsDisabled && ACT.Melee.CanPerform(orgTC.Chara, cC) && (!orgTC.IsPCFactionOrMinion || !EClass._zone.isPeace)) 
	{
		if (parried)
		{

ActRush

public override bool CanPerform()

cs
		return false;
	}
	Act.TP.Set(flag ? EClass.scene.mouseTarget.pos : Act.TC.pos);
	if (Act.CC.isRestrained) 
	if (Act.CC.isRestrained || Act.CC.HasCondition<ConEntangle>()) 
	{
		return false;
	}

Biography

public int GetAge(Chara c)

cs
			return int.Parse(array[1]);
		}
	}
	if (!c.IsPC && EClass.game.principal.noAging) 
	if (!c.IsPC && EClass.game.principal.noAging && EClass.world.date.year - birthYear >= 13) 
	{
		return EClass.game.Prologue.year - birthYear; 
		return (int)MathF.Max(EClass.game.Prologue.year - birthYear, 13f); 
	}
	return EClass.world.date.year - birthYear;
}

Card

public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
		switch (currency)
		{
		case CurrencyType.Influence:
			if (id == "lunch_love") 
			switch (id) 
			{
			case "ticket_fortune": 
				return 5; 
			case "medal": 
				return 5; 
			case "lunch_love": 
				return 10;
			}
			break;

Player

public void OnEnterZone()

cs
				PlayStory(availableStories[0]);
				availableStories.RemoveAt(0);
			}
			if (!LayerDrama.Instance && !EClass.game.isLoading && EClass.debug.enable && EClass._zone.IsPCFaction && EClass.game.quests.GetPhase<QuestIntoDarkness>() == 0 && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 5) 
			if (!LayerDrama.Instance && !EClass.game.isLoading && EClass._zone.IsPCFaction) 
			{
				EClass.game.cards.globalCharas.Find("kettle"); 
				EClass.game.quests.Get<QuestNegotiationDarkness>().Complete(); 
				EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk(); 
				if (EClass.game.quests.GetPhase<QuestIntoDarkness>() == 0 && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 5) 
				{ 
					EClass.game.quests.Get<QuestNegotiationDarkness>().Complete(); 
					EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk(); 
				} 
				else if (EClass.game.quests.GetPhase<QuestIntoDarkness>() == 1) 
				{ 
					EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk(); 
				} 
				else
				{ 
					EClass.game.quests.GetPhase<QuestIntoDarkness>(); 
					_ = 2; 
				} 
			}
		}

Thing

public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
					return s;
				}
				int num4 = e.Value;
				if (e.source.IsWeaponEnc && !e.source.tag.Contains("modRanged") && isEquipped && root.isChara) 
				if (e.source.IsWeaponEnc && (!e.source.tag.Contains("modRanged") || e.id == 609) && isEquipped && root.isChara) 
				{
					num4 = num4 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara)) / 100;
				}

Trait

public void OnBarter()

cs
		{
			break;
		}
		int num4 = 0; 
		int num5 = 0; 
		foreach (Thing thing10 in c_copyContainer.things)
		{
			if (!owner.trait.CanCopy(thing10))

public void OnBarter()

cs
			{
				thing5.elements.Remove(item.id);
			}
			int num5 = 1; 
			int num6 = 1; 
			switch (owner.trait.CopyShop)
			{
			case CopyShopType.Item:
			{
				num5 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50); 
				num6 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50); 
				int[] array = new int[4] { 701, 704, 703, 702 };
				foreach (int ele in array)
				{
					if (thing5.HasElement(ele))
					{
						num5 = 1; 
						num6 = 1; 
					}
				}
				break;

public void OnBarter()

cs
				thing5.c_charges = thing10.c_charges;
				break;
			}
			if (num5 > 1 && thing5.trait.CanStack) 
			if (num6 > 1 && thing5.trait.CanStack) 
			{
				thing5.SetNum(num5); 
				thing5.SetNum(num6); 
			}
			AddThing(thing5);
			num4++; 
			if (num4 > owner.trait.NumCopyItem) 
			num5++; 
			if (num5 > owner.trait.NumCopyItem) 
			{
				break;
			}

public void OnBarter()

cs
		break;
	case ShopType.RedBook:
	{
		for (int num3 = 0; num3 < 30; num3++) 
		for (int num4 = 0; num4 < 30; num4++) 
		{
			AddThing(ThingGen.CreateFromCategory((EClass.rnd(2) == 0) ? "_book" : "book"));
		}

public void OnBarter()

cs
		AddThing(TraitSeed.MakeSeed("carrot")).SetNum(4 + EClass.rnd(4));
		AddThing(TraitSeed.MakeSeed("potato")).SetNum(4 + EClass.rnd(4));
		AddThing(TraitSeed.MakeSeed("corn")).SetNum(4 + EClass.rnd(4));
		for (int num7 = 0; num7 < EClass.rnd(3) + 1; num7++) 
		for (int num8 = 0; num8 < EClass.rnd(3) + 1; num8++) 
		{
			Add("462", 1, 0);
		}
		for (int num8 = 0; num8 < EClass.rnd(3) + 1; num8++) 
		for (int num9 = 0; num9 < EClass.rnd(3) + 1; num9++) 
		{
			Add("1167", 1, 0);
		}

public void OnBarter()

cs
				break;
			case ShopType.Influence:
			{
				bool num2 = owner.id == "big_sister"; 
				TraitTicketFurniture.SetZone(num2 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99)); 
				if (num2) 
				bool num3 = owner.id == "big_sister"; 
				TraitTicketFurniture.SetZone(num3 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99)); 
				if (num3) 
				{
					Add("littleball", 10, 0);
					if (owner.Chara.affinity.CanGiveCard())

public void OnBarter()

cs
				break;
			}
			case ShopType.Medal:
				NoRestock(ThingGen.Create("sword_dragon")); 
				NoRestockId("sword_dragon"); 
				Add("sword_dragon", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("blunt_bonehammer")); 
				NoRestockId("blunt_bonehammer"); 
				Add("blunt_bonehammer", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("pole_gunlance")); 
				NoRestockId("pole_gunlance"); 
				Add("pole_gunlance", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("sword_muramasa")); 
				NoRestockId("sword_muramasa"); 
				Add("sword_muramasa", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("sword_forgetmenot")); 
				NoRestockId("sword_forgetmenot"); 
				Add("sword_forgetmenot", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("dagger_fish")); 
				NoRestockId("dagger_fish"); 
				Add("dagger_fish", 1, 0).SetReplica(on: true);
				NoRestock(ThingGen.Create("sword_zephir")); 
				NoRestockId("sword_zephir"); 
				Add("sword_zephir", 1, 0).SetReplica(on: true);
				Add("ribbon", 1, 0); 
				Add("helm_sage", 1, 0); 
				NoRestockId("ribbon"); 
				NoRestockId("helm_sage"); 
				Add("diary_sister", 1, 0);
				Add("diary_catsister", 1, 0);
				Add("diary_lady", 1, 0);

public void OnBarter()

cs
			default:
			{
				float num = (float)(3 + Mathf.Min(ShopLv / 5, 10)) + Mathf.Sqrt(ShopLv);
				int num2 = 300; 
				if (ShopType == ShopType.Ecopo) 
				{ 
					num2 = 30; 
				} 
				num = num * (float)(100 + EClass.pc.Evalue(1406) * 5) / 100f;
				num = Mathf.Min(num, 300f); 
				num = Mathf.Min(num, num2); 
				for (int j = 0; (float)j < num; j++)
				{
					Thing thing = CreateStock();

public void OnBarter()

cs
					continue;
				}
				string[] recipeKey = item3.row.recipeKey;
				for (int num6 = 0; num6 < recipeKey.Length; num6++) 
				for (int num7 = 0; num7 < recipeKey.Length; num7++) 
				{
					if (recipeKey[num6] == ShopType.ToString()) 
					if (recipeKey[num7] == ShopType.ToString()) 
					{
						NoRestock(ThingGen.CreateRecipe(item3.id));
						break;

public void OnBarter()

cs
			{
			case ShopType.Moyer:
			{
				for (int num11 = 1; num11 <= 12; num11++) 
				for (int num12 = 1; num12 <= 12; num12++) 
				{
					AddAdvWeek(num11); 
					AddAdvWeek(num12); 
				}
				break;
			}
			case ShopType.StrangeGirl:
			{
				int num12 = (EClass.debug.enable ? 20 : (EClass._zone.development / 10)); 
				if (num12 > 0) 
				int num13 = (EClass.debug.enable ? 20 : (EClass._zone.development / 10)); 
				if (num13 > 0) 
				{
					Add("syringe_gene", num12, 0); 
					Add("syringe_gene", num13, 0); 
					Add("diary_little", 1, 0);
				}
				if (num12 > 10) 
				if (num13 > 10) 
				{
					Add("syringe_heaven", num12 / 5, 0); 
					Add("syringe_heaven", num13 / 5, 0); 
					Add("1276", 1, 0);
				}
				Add("medal", 10, 0); 
				Add("ticket_fortune", 10, 0); 
				break;
			}
			case ShopType.GeneralExotic:

public void OnBarter()

cs
					Add("ticket_armpillow", 1, 0);
					Add("ticket_champagne", 1, 0);
				}
				for (int num9 = 0; num9 < 3; num9++) 
				for (int num10 = 0; num10 < 3; num10++) 
				{
					if (EClass.rnd(5) == 0)
					{
						TreasureType treasureType = ((EClass.rnd(10) == 0) ? TreasureType.BossNefia : ((EClass.rnd(10) == 0) ? TreasureType.Map : TreasureType.RandomChest));
						int num10 = EClass.rnd(EClass.rnd(ShopLv + (EClass.debug.enable ? 200 : 50)) + 1) + 1; 
						int num11 = EClass.rnd(EClass.rnd(ShopLv + (EClass.debug.enable ? 200 : 50)) + 1) + 1; 
						Thing thing6 = ThingGen.Create(treasureType switch
						{
							TreasureType.Map => "chest_treasure",

public void OnBarter()

cs
							_ => "chest3", 
						});
						thing6.c_lockedHard = true;
						thing6.c_lockLv = num10; 
						thing6.c_priceAdd = 2000 + num10 * 250 * ((treasureType == TreasureType.RandomChest) ? 1 : 5); 
						thing6.c_lockLv = num11; 
						thing6.c_priceAdd = 2000 + num11 * 250 * ((treasureType == TreasureType.RandomChest) ? 1 : 5); 
						thing6.c_revealLock = true;
						ThingGen.CreateTreasureContent(thing6, num10, treasureType, clearContent: true); 
						ThingGen.CreateTreasureContent(thing6, num11, treasureType, clearContent: true); 
						AddThing(thing6);
					}
				}

public void OnBarter()

cs
			ShopType shopType = ShopType;
			if (shopType == ShopType.General || shopType == ShopType.Food)
			{
				for (int num13 = 0; num13 < (EClass.debug.enable ? 3 : 3); num13++) 
				for (int num14 = 0; num14 < (EClass.debug.enable ? 3 : 3); num14++) 
				{
					if (EClass.rnd(3) == 0)
					{

public void OnBarter()

cs
			{
				return;
			}
			int num14 = t.things.width * 10; 
			if (t.things.Count > num14) 
			int num15 = t.things.width * 10; 
			if (t.things.Count > num15) 
			{
				int num15 = t.things.Count - num14; 
				for (int num16 = 0; num16 < num15; num16++) 
				int num16 = t.things.Count - num15; 
				for (int num17 = 0; num17 < num16; num17++) 
				{
					t.things.LastItem().Destroy();
				}

void NoRestock(Thing _t)

cs
						AddThing(_t);
					}
				}
				void NoRestockId(string _id) 
				{ 
					NoRestock(ThingGen.Create(_id)); 
				} 
			}

			public Thing CreateStock()

Zone

public bool CanDestroy()

cs
		return true;
	}
	bool flag = false;
	string text = id; 
	if (!(text == "cave_yeek")) 
	switch (id) 
	{
		if (text == "cave_mino" && !(this is Zone_DungeonMino)) 
	case "cave_dragon":
		if (!(this is Zone_DungeonDragon)) 
		{
			flag = true;
		}
	} 
	else if (!(this is Zone_DungeonYeek)) 
	{ 
		flag = true; 
		break; 
	case "cave_yeek":
		if (!(this is Zone_DungeonYeek)) 
		{ 
			flag = true; 
		} 
		break; 
	case "cave_mino":
		if (!(this is Zone_DungeonMino)) 
		{ 
			flag = true; 
		} 
		break; 
	}
	Zone topZone = GetTopZone();
	if (!flag)