Skip to content

EA 23.342.1 Nightly โ€‹

September 4, 2026

9 files modified.

Important Changes โ€‹

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

Chara (1) โ€‹

cs
public List<Element> ListAvailabeFeats(bool pet = false, bool showAll = false) 
public List<Element> ListAvailabeFeats(bool pet = false, bool showAll = false, bool purchaseFeat = false) 

AI_Shear โ€‹

public static Thing GetFur(Chara c, int mod = 100)

cs
int furLv = GetFurLv(c);
string text = "fiber";
string idMat = "wool";
string text2 = c.id; 
if (!(text2 == "putty_snow")) 
switch (c.id) 
{
	if (text2 == "putty_snow_gold") 
	{ 
		idMat = "gold"; 
	} 
	else if (!c.Chara.race.fur.IsEmpty()) 
case "putty_snow":
	idMat = "cashmere"; 
	break; 
case "putty_snow_gold": 
	idMat = "gold"; 
	break; 
case "putty_forest": 
	text = "leaf_palulu"; 
	idMat = "grass"; 
	break; 
default: 
	if (!c.Chara.race.fur.IsEmpty()) 
	{
		string[] array = c.Chara.race.fur.Split('/');
		text = array[0];
		idMat = array[1];
	}
} 
else
{ 
	idMat = "cashmere"; 
	break; 
}
Thing thing = ThingGen.Create(text, idMat);
int num = mod * furLv + furLv * furLv * 10;

ActEffect โ€‹

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

cs
int num10 = 0;
foreach (Element item8 in list3)
{
	for (int num11 = 0; num11 < item8.vBase; num11++) 
	int dNABonus = item8.GetDNABonus(EClass.pc); 
	if (dNABonus < item8.vBase) 
	{
		num10 += item8.source.cost.TryGet(num11); 
		for (int num11 = 0; num11 < item8.vBase - dNABonus; num11++) 
		{ 
			num10 += item8.source.cost.TryGet(num11); 
		} 
		EClass.pc.SetFeat(item8.id, dNABonus); 
	}
	item8.vBase = 0; 
	EClass.pc.SetFeat(item8.Value, 0); 
}
EClass.pc.feat += num10;
EClass.pc.Refresh();

Card โ€‹

public Card SetLv(int a)

cs
{
	return this;
}
isScaled = true; 
if (!isScaled && flag && LV >= 50) 
{ 
	isScaled = true; 
} 
Rand.SetSeed(uid);
ElementContainer elementContainer = new ElementContainer();
elementContainer.ApplyElementMap(uid, SourceValueType.Chara, Chara.job.elementMap, LV);

public bool HaveFur()

cs
	{
		return false;
	}
	string text = id; 
	if (text == "putty_snow" || text == "putty_snow_gold") 
	switch (id) 
	{
	case "putty_snow": 
	case "putty_snow_gold": 
	case "putty_forest": 
		return true;
	default: 
		return !Chara.race.fur.IsEmpty(); 
	}
	return !Chara.race.fur.IsEmpty(); 
}

public bool CanBeSheared()

Chara โ€‹

public void GetRevived()

cs
		MoveZone(homeZone);
	}
}
else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty) 
else if ((!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty) && EClass._zone.events.GetEvent<ZoneEventWedding>() == null) 
{
	EClass.pc.party.AddMemeber(this, showMsg: true);
}

public void ModCorruption(int a)

cs
	corruption = num4 * 100 + corruption % 100;
}

public List<Element> ListAvailabeFeats(bool pet = false, bool showAll = false) 
public List<Element> ListAvailabeFeats(bool pet = false, bool showAll = false, bool purchaseFeat = false) 
{
	List<Element> list = new List<Element>();
	foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
	{
		Feat feat = elements.GetOrCreateElement(item.id) as Feat;
		int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
		if (purchaseFeat) 
		{ 
			num -= feat.GetDNABonus(this); 
		} 
		if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
		{
			list.Add(Element.Create(feat.id, num) as Feat);

public void SetFeat(int id, int value = 1, bool msg = false)

cs
{
	Feat feat = elements.GetElement(id) as Feat;
	int num = 0;
	if (feat == null) 
	{ 
		Debug.Log("1: null/" + EClass.sources.elements.map[id].id); 
	} 
	else
	{ 
		Debug.Log("1:" + feat.Name + "/" + feat.Value); 
	} 
	if (feat != null && feat.Value > 0)
	{
		if (value == feat.Value)

public void SetFeat(int id, int value = 1, bool msg = false)

cs
	feat.Apply(-feat.Value, elements);
}
feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
if (feat == null) 
{ 
	Debug.Log("1: null" + EClass.sources.elements.map[id].id); 
} 
else
{ 
	Debug.Log("1:" + feat.Name + "/" + feat.Value); 
} 
if (feat != null && feat.Value != 0)
{
	feat.Apply(feat.Value, elements);

CharaBody โ€‹

public bool Equip(Thing thing, BodySlot slot = null, bool msg = true)

cs
	thing.c_DNA.Apply(owner, reverse: false);
	Msg.Say("equip_relic");
	owner.feat -= thing.c_DNA.cost;
	thing.SetBool(135, enable: true); 
	if (!EClass.debug.enable) 
	{ 
		thing.SetBool(135, enable: true); 
	} 
}
if (owner.IsPC)
{

DNA โ€‹

public int GetBodySlot()

cs
	return -1;
}

public Element GetElement(int id) 
{ 
	for (int i = 0; i < vals.Count; i += 2) 
	{ 
		if (vals[i] == id) 
		{ 
			return Element.Create(vals[i], vals[i + 1]); 
		} 
	} 
	return null; 
} 
public void ReplaceBodySlot(int slot)
{
	for (int i = 0; i < vals.Count; i += 2)

ELEMENT โ€‹

public bool IsFactionElement(Chara c)

cs
	return false;
}

public int GetDNABonus(Chara c) 
{ 
	int num = 0; 
	foreach (BodySlot slot in c.body.slots) 
	{ 
		if (slot.thing != null && slot.thing.c_DNA != null) 
		{ 
			Element element = slot.thing.c_DNA.GetElement(id); 
			if (element != null) 
			{ 
				num += element.Value; 
			} 
		} 
	} 
	if (c.c_genes != null) 
	{ 
		foreach (DNA item in c.c_genes.items) 
		{ 
			Element element2 = item.GetElement(id); 
			if (element2 != null) 
			{ 
				num += element2.Value; 
			} 
		} 
	} 
	return num; 
} 
public Element GetParent(Card c)
{
	if (!source.aliasParent.IsEmpty())

TraitFoodEggFertilized โ€‹

public static Chara Incubate(Thing egg, Point pos, Card incubator = null)

cs
public static void MakeBaby(Chara c, int baby)
{
	c.SetFeat(1232, baby, msg: true);
	c.isScaled = true; 
	switch (c.id)
	{
	case "putty_snow":

WindowChara โ€‹

void List2(string lang, string idSubCat)

cs
Dialog.YesNo("dialogBuyFeat".lang(a.CostLearn.ToString() ?? "", a.FullName), delegate
{
	EClass.pc.feat -= a.CostLearn;
	EClass.pc.SetFeat(a.id, a.Value, msg: true); 
	EClass.pc.SetFeat(a.id, a.Value + a.GetDNABonus(EClass.pc), msg: true); 
	RefreshSkill(idTab);
	RefreshFeatMode();
	RefreshStatic();

void List2(string lang, string idSubCat)

cs
},
onList = delegate
{
	foreach (Element item10 in chara.ListAvailabeFeats(pet: false, EClass.game.config.showAllFeat)) 
	foreach (Element item10 in chara.ListAvailabeFeats(pet: false, EClass.game.config.showAllFeat, purchaseFeat: true)) 
	{
		if (item10.source.categorySub == idSubCat)
		{