Skip to content

EA 23.353 Nightly โ€‹

October 9, 2026

13 files modified. 3 new files created.

Important Changes โ€‹

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

Chara (1) โ€‹

cs
public void SetSummon(int duration) 
public void SetSummon(int duration, bool dropCorpse = false) 

AI_Idle โ€‹

public override IEnumerable<Status> Run()

cs
		{
			yield return KeepRunning();
		}
		if (owner.hp < owner.MaxHP * 60 / 100) 
		{ 
			Action action = owner.things.Find((Thing thing10) => thing10.trait.GetHealAction(owner) != null)?.trait.GetHealAction(owner) ?? null; 
			if (action != null) 
			{ 
				action(); 
				yield return KeepRunning(); 
			} 
		} 
	}
}
if (owner.IsPCFaction && EClass._zone.IsPCFaction)

CINT โ€‹

public class CINT

cs
	public const int peakyAdded = 134;

	public const int isSleepLock = 135;
	public const int isSummonDropCorpse = 136; 
}

Card โ€‹

public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool selโ€ฆ)

cs
case "1386":
	return 13;
case "book_black":
	if (!(c_idRefName == "sorin")) 
	{ 
		return 20; 
	} 
	return 100;
case "scroll_random":
	if (refVal == 8288)

Chara โ€‹

public bool HasMinion(string id)

cs
	return false;
}

public void SetSummon(int duration) 
public void SetSummon(int duration, bool dropCorpse = false) 
{
	base.c_summonDuration = duration;
	base.isSummon = true;
	if (dropCorpse) 
	{ 
		SetBool(136, enable: true); 
	} 
}

public Chara FindMaster()

public override void Die(Element e = null, Card origin = null, AttackSource attaโ€ฆ)

cs
{
	EClass._zone.ResetHostility();
}
if (base.isSummon) 
if (base.isSummon && !GetBool(136)) 
{
	if (id == "tsunami")
	{

+HotItemActionBinocular โ€‹

File Created
cs
public class HotItemActionBinocular : HotAction
{
	public override string Id => "Binocular";

	public override bool CanName => false;

	public override void Perform()
	{
		if (!(EClass.pc.things.Find<TraitViewMap>()?.trait is TraitViewMap traitViewMap))
		{
			Msg.Say("noBinoFound");
			SE.Beep();
		}
		else
		{
			traitViewMap.OnUse(EClass.pc);
		}
	}
}

HotItemActionSleep โ€‹

public override void Perform()

cs
Thing thing = EClass.pc.things.Find<TraitBed>();
if (thing == null)
{
	Msg.Say("noBedFound".langGame()); 
	Msg.Say("noBedFound"); 
	SE.Beep();
	return;
}

QuestEscort โ€‹

public void ReleaseEscort()

cs
		}
		else
		{
			target.SetSummon(60); 
			target.SetSummon(60, dropCorpse: true); 
		}
	}
}

QuestMusic โ€‹

public override void OnInit()

cs
{
	if (EClass.rnd(100) < EClass.rnd(EClass.pc.elements.ValueWithoutLink(241)))
	{
		partyLv = Mathf.Min(1 + EClass.rnd(EClass.pc.elements.ValueWithoutLink(241) / 10), 1000000); 
		partyLv = Mathf.Min(1 + EClass.rnd(EClass.pc.elements.ValueWithoutLink(241) / 25), 1000000); 
	}
	destScore = difficulty * 150 * (100 + Mathf.Min(partyLv, 10) * 10) / 100;
	destScore += EClass.rnd(destScore / 5);

Trait โ€‹

public virtual void OnBarter(bool reroll = false)

cs
{
	break;
}
int num11 = 0; 
int num14 = 0; 
foreach (Thing thing11 in c_copyContainer.things)
{
	if (!owner.trait.CanCopy(thing11))

public virtual void OnBarter(bool reroll = false)

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

public virtual void OnBarter(bool reroll = false)

cs
	thing7.c_charges = thing11.c_charges;
	break;
}
if (num12 > 1 && thing7.trait.CanStack) 
if (num15 > 1 && thing7.trait.CanStack) 
{
	thing7.SetNum(num12); 
	thing7.SetNum(num15); 
}
AddThing(thing7);
num11++; 
if (num11 > owner.trait.NumCopyItem) 
num14++; 
if (num14 > owner.trait.NumCopyItem) 
{
	break;
}

public virtual void OnBarter(bool reroll = false)

cs
	break;
case ShopType.RedBook:
{
	for (int num5 = 0; num5 < 30; num5++) 
	for (int num7 = 0; num7 < 30; num7++) 
	{
		AddThing(ThingGen.CreateFromFilter("shop_seeker"));
	}

public virtual void OnBarter(bool reroll = false)

cs
}
case ShopType.KeeperOfGarden:
{
	string[] array2 = new string[11] 
	string[] array = new string[11] 
	{
		"stone_defense", "1325", "1326", "1327", "1328", "1330", "1331", "1332", "1333", "1283",
		"1268"
	};
	foreach (string id in array2) 
	foreach (string id in array) 
	{
		AddThing(ThingGen.Create(id, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(99));
	}

public virtual void OnBarter(bool reroll = false)

cs
AddThing(TraitSeed.MakeSeed("potato")).SetNum(4 + EClass.rnd(4));
AddThing(TraitSeed.MakeSeed("corn")).SetNum(4 + EClass.rnd(4));
AddThing(TraitSeed.MakeSeed("chanoki")).SetNum(4 + EClass.rnd(4));
for (int num14 = 0; num14 < EClass.rnd(3) + 1; num14++) 
for (int num5 = 0; num5 < EClass.rnd(3) + 1; num5++) 
{
	Add("462", 1, 0);
}
for (int num15 = 0; num15 < EClass.rnd(3) + 1; num15++) 
for (int num6 = 0; num6 < EClass.rnd(3) + 1; num6++) 
{
	Add("1167", 1, 0);
}

public virtual void OnBarter(bool reroll = false)

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

public virtual void OnBarter(bool reroll = false)

cs
}
if (!reroll)
{
	for (int num8 = 0; num8 < 20; num8++) 
	for (int num11 = 0; num11 < 20; num11++) 
	{
		owner.Chara.ModExp(287, 1000);
	}

public virtual void OnBarter(bool reroll = false)

cs
	AddThing(thing4);
	break;
}
for (int num9 = 0; num9 < 10; num9++) 
for (int num12 = 0; num12 < 10; num12++) 
{
	Thing thing5 = ThingGen.Create(EClass._zone.IsFestival ? "1123" : ((EClass.rnd(3) == 0) ? "1169" : "1160"));
	thing5.DyeRandom();

public virtual void OnBarter(bool reroll = false)

cs
}
if (EClass._zone is Zone_Exile)
{
	for (int num10 = 0; num10 < 30; num10++) 
	for (int num13 = 0; num13 < 30; num13++) 
	{
		Add("1235", 1, -1);
		Add("1236", 1, -1);

public virtual void OnBarter(bool reroll = false)

cs
AddThing(ThingGen.CreatePerfume(9501, 5));
AddThing(ThingGen.CreatePerfume(9502, 5));
AddThing(ThingGen.CreatePerfume(9503, 5));
for (int num6 = 0; num6 < 5; num6++) 
for (int num9 = 0; num9 < 5; num9++) 
{
	Thing thing3 = ThingGen.CreateFromCategory("seasoning").SetNum(10);
	thing3.elements.SetBase(2, 40);

public virtual void OnBarter(bool reroll = false)

cs
	NoRestock(ThingGen.CreateRecipe("1300"));
	NoRestock(ThingGen.CreateRecipe("1386"));
	Thing thing2 = ThingGen.Create("book_black");
	thing2.c_idRefName = "sorin"; 
	NoRestock(thing2); 
	if (IsNoRestockExist(thing2)) 
	{ 
		thing2.c_idRefName = "sorin"; 
		NoRestock(thing2); 
	} 
	else
	{ 
		thing2.c_idRefName = EClass.game.cards.globalCharas.Values.Where((Chara a) => a.IsUnique && a.id != "sorin").RandomItem().id; 
		AddThing(thing2); 
	} 
	Add("1386", 1, 0);
	break;
}

public virtual void OnBarter(bool reroll = false)

cs
{
	continue;
}
string[] array2 = item4.row.recipeKey; 
for (int num13 = 0; num13 < array2.Length; num13++) 
string[] array = item4.row.recipeKey; 
for (int num8 = 0; num8 < array.Length; num8++) 
{
	if (array2[num13] == text) 
	if (array[num8] == text) 
	{
		NoRestock(ThingGen.CreateRecipe(item4.id));
		break;

Thing AddThing(Thing _t)

cs
{
	return t.AddThing(_t);
}
bool IsNoRestockExist(Thing _t) 
{ 
	if (t.things.Find(_t.id) != null) 
	{ 
		return true; 
	} 
	HashSet<string> hashSet = EClass.player.noRestocks.TryGetValue(owner.id); 
	if (hashSet != null) 
	{ 
		return !hashSet.Contains(_t.trait.IdNoRestock); 
	} 
	return true; 
} 
void NoRestock(Thing _t)
{
	string text2 = owner.id;

+TraitHeightMeasure โ€‹

File Created
cs
public class TraitHeightMeasure : TraitWeightScale
{
}

TraitSorin โ€‹

public class TraitSorin : TraitUniqueMerchant

cs
public override CurrencyType CurrencyType => CurrencyType.Money3;

public override int CostRerollShop => 2; 
public override bool CanInvest => false;

public override int ShopLv => 1;

TraitStrangePainting โ€‹

public override void OnDie()

cs
	{
		Chara chara = EClass._zone.SpawnMob(owner.pos.GetNearestPoint(allowBlock: false, allowChara: false), new SpawnSetting
		{
			id = "paint_living", 
			id = ((EClass.rnd(2) == 0) ? "paint_living" : "paint_living2"), 
			filterLv = EClass._zone.DangerLv + 20
		});
		chara.SetHostility(Hostility.Enemy);
		chara.SetSummon(9999); 
		chara.SetSummon(9999, dropCorpse: true); 
		Msg.Say("statue_chara", chara, owner);
	}
}

TraitStrangeStatue โ€‹

public override void OnDie()

cs
			filterLv = EClass._zone.DangerLv + 20
		});
		chara.SetHostility((EClass.rnd(3) != 0 || chara.trait is TraitMerchant) ? Hostility.Enemy : Hostility.Neutral);
		chara.SetSummon(9999); 
		chara.SetSummon(9999, dropCorpse: true); 
		Msg.Say("statue_chara", chara, owner);
	}
}

TraitViewMap โ€‹

using UnityEngine;

cs
using UnityEngine; 
public class TraitViewMap : TraitItem
{
	public override bool IsLocalAct => false;

public class TraitViewMap : TraitItem

cs
public override bool OnUse(Chara c)
{
	Debug.Log("a"); 
	ActionMode.ViewMap.Activate();
	return false;
}

+TraitWeightScale โ€‹

File Created
cs
public class TraitWeightScale : Trait
{
	public override void OnStepped(Chara c)
	{
		c.PlaySound("trap");
		c.Say("trap", c, owner);
		if (this is TraitHeightMeasure)
		{
			owner.TalkRaw("weightScale".langGame(c.Name, c.bio.weight.ToFormat() ?? ""));
		}
		else
		{
			owner.TalkRaw("heightMeasure".langGame(c.Name, c.bio.height.ToFormat() ?? ""));
		}
	}
}

WidgetHotbar โ€‹

public void SetShortcutMenu(ButtonHotItem b, UIContextMenu m)

cs
	{
		SetItem(b, new HotItemActionSleep());
	});
	m.AddButton("hotActionBinocular".lang(), delegate
	{ 
		SetItem(b, new HotItemActionBinocular()); 
	}); 
}

public void SetItem(ButtonHotItem b, HotItem item)