Skip to content

EA 23.269 Nightly Patch 2

February 11, 2026

17 files modified. 1 new file created.

Important Changes

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

CharaGenes (1)

cs
public void Remove(Chara c, DNA item) 
public static void Remove(Chara c, DNA item) 

AI_Eat

public override bool IsHostileAct

cs

	public bool IsValidTarget(Card c)
	{
		return c?.trait.CanEat(owner) ?? false; 
		if (c != null) 
		{ 
			if (!c.trait.CanEat(owner)) 
			{ 
				if (c.trait is TraitGene && owner.IsPC) 
				{ 
					return owner.HasElement(1274); 
				} 
				return false; 
			} 
			return true; 
		} 
		return false; 
	}

	public override bool CanManualCancel()

Card

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

cs
					{
						ele2 = 922;
					}
					Say("reflect_thorne", this, origin); 
					Say("reflect_thorne", origin, this); 
					origin.DamageHP((int)Mathf.Clamp(dmg / 10, 1f, MaxHP / (origin.IsPowerful ? 200 : 20)), ele2, Power, AttackSource.Condition, this);
				}
				if (HasElement(1223) && num14 <= Evalue(1223))

Chara

public bool IsWealthy

cs

	public int MaxGeneSlot => race.geneCap - (HasElement(1237) ? 2 : 0) + Evalue(1242) + Evalue(1273);

	public int GeneCostMTP 
	{ 
		get 
		{ 
			if (!IsPC) 
			{ 
				return 100; 
			} 
			return 20; 
		} 
	} 
	public int CurrentGeneSlot
	{
		get

public void Cuddle(Chara c, bool headpat = false)

cs
		{
			ele = 922;
		}
		Say("reflect_thorne", c, this); 
		Say("reflect_thorne", this, c); 
		DamageHP(10L, ele, Power, AttackSource.Condition);
	}
}

CharaGenes

public class CharaGenes : EClass

cs
	[JsonProperty]
	public int inferior;

	public void Remove(Chara c, DNA item) 
	public static void Remove(Chara c, DNA item) 
	{
		items.Remove(item); 
		c.feat += item.cost; 
		item.Apply(c, reverse: true); 
		c.Refresh(); 
		if (c.c_genes != null) 
		{ 
			c.c_genes.items.Remove(item); 
			c.feat += item.cost * c.GeneCostMTP / 100; 
			item.Apply(c, reverse: true); 
			c.Refresh(); 
			c.RemoveAllStances(); 
			Msg.Say("dna_loss", c, item.GetText()); 
		} 
	}

	public int GetTotalCost()

CoreDebug

public void UpdateInput()

cs
	}
	if (Input.GetKeyDown(KeyCode.F2))
	{
		if (Input.GetKey(KeyCode.LeftShift)) 
		{ 
			Net.SendBook("test", "msg", BookCategory.Bottle, Lang.langCode, "msg2", "msg3", "msg4"); 
		} 
		else
		{ 
			RefreshChat(); 
		EClass._zone.development += 10; 
		EClass._zone.development *= EClass._zone.development; 
		Chara targetChara = EClass.scene.mouseTarget.TargetChara; 
		if (targetChara != null) 
		{ 
			EClass.pc.Pick(targetChara.MakeEgg(effect: true, 10)); 
			EClass.pc.Pick(targetChara.MakeGene()); 
			TraitFoodEggFertilized.Incubate(targetChara.MakeEgg(effect: false, 1, addToZone: false, 100), targetChara.pos.GetNearestPoint(allowBlock: false, allowChara: false)); 
			targetChara.ScaleByPrincipal(); 
		} 
		if (EClass.game.quests.Get<QuestDebt>() == null) 
		{ 
			Chara chara = CharaGen.Create("loytel"); 
			EClass._zone.AddCard(chara, EClass.pc.pos); 
			chara.SetGlobal(); 
			Quest q = EClass.game.quests.Add("debt", "loytel"); 
			EClass.game.quests.Start(q); 
			EClass.pc.party.RemoveMember(chara); 
			Hostility hostility2 = (chara.c_originalHostility = Hostility.Ally); 
			chara.hostility = hostility2; 
		}
		return;
	}

public void UpdateInput()

cs
		{
			card.renderer.PlayAnime(AnimeID.Attack, animeDest);
		}
		static async void RefreshChat() 
		{ 
			List<Net.BookData> list2 = await Net.GetBook(BookCategory.Bottle, Lang.langCode); 
			Debug.Log(list2[0].name + "/" + list2[0].msg + "/" + list2[0].msg2 + "/" + list2[0].msg3 + "/" + list2[0].msg4); 
		} 
	}

	public void InitDebugCommands()

DNA

public void Apply(Chara c)

cs
		c.c_genes.inferior++;
		return;
	}
	c.feat -= cost; 
	c.feat -= cost * c.GeneCostMTP / 100; 
	Apply(c, reverse: false);
	c_genes.items.Add(this);
}

public void Apply(Chara c, bool reverse)

cs
				c.body.AddBodyPart(row.id);
			}
			c.body.RefreshBodyParts();
			if (c.IsPC && (bool)WidgetEquip.Instance) 
			{ 
				WidgetEquip.Instance.Rebuild(); 
			} 
			break;
		case "feat":
			c.SetFeat(num, c.elements.ValueWithoutLink(num) + ((!reverse) ? 1 : (-1)), !reverse);

public void WriteNote(UINote n)

cs
		}
	}

	public void WriteNoteExtra(UINote n, Chara tg) 
	{ 
		n.AddHeader("HeaderAdditionalTrait", "gene_hint"); 
		_ = tg.c_genes; 
		int num = slot; 
		if (num > 1 && tg.HasElement(1237)) 
		{ 
			num--; 
		} 
		int num2 = tg.MaxGeneSlot - tg.CurrentGeneSlot; 
		int num3 = num2 - num; 
		int maxGeneSlot = tg.MaxGeneSlot; 
		n.AddText("gene_hint_slot".lang(num2.ToString() ?? "", num3.ToString() ?? "", maxGeneSlot.ToString() ?? ""), (num3 >= 0) ? FontColor.Good : FontColor.Bad); 
		int num4 = cost * tg.GeneCostMTP / 100; 
		int num5 = tg.feat - num4; 
		n.AddText("gene_hint_cost".lang(tg.feat.ToString() ?? "", num4 + ((num4 == cost) ? "" : ("(" + cost + ")")), num5.ToString() ?? ""), (num5 >= 0) ? FontColor.Good : FontColor.Bad); 
	} 
	public Element GetInvalidFeat(Chara c)
	{
		for (int i = 0; i < vals.Count; i += 2)
		{
			Element element = Element.Create(vals[i], vals[i + 1]);
			if (c.IsPC && element.id == 1415) 
			{ 
				return element; 
			} 
			if (!(element.source.category == "feat"))
			{
				continue;

ELEMENT

public void AddEncNote(UINote n, Card Card, ElementContainer.NoteMode mode = Ele

cs
		{
			color = FontColor.FoodQuality;
		}
		if (id == 484 && owner != null && owner.Card != null && owner.Card.CountRune(countFree: false) >= owner.Card.MaxRune()) 
		{ 
			color = FontColor.Gray; 
		} 
		if (funcText != null)
		{
			text = funcText(this, text);

FEAT

public class FEAT

cs
{
	public const int featUnderground = 1226;

	public const int featRapidArrow = 1652; 
	public const int featFaith = 1636; 

	public const int featMagicManner = 1651; 
	public const int featAnimalLover = 1640; 

	public const int featGourmet = 1650; 
	public const int featResCurse = 1641; 

	public const int featDefender = 1649; 
	public const int featSleeper = 1642; 

	public const int featRapidMagic = 1648; 
	public const int featSorter = 1643; 

	public const int featSummoner = 1647; 
	public const int featBodyParts = 1644; 

	public const int featLonelySoul = 1646; 
	public const int featMartial = 1635; 

	public const int featParty = 1645;

	public const int featBodyParts = 1644; 
	public const int featSummoner = 1647; 

	public const int featSorter = 1643; 
	public const int featRapidMagic = 1648; 

	public const int featSleeper = 1642; 
	public const int featDefender = 1649; 

	public const int featResCurse = 1641; 
	public const int featGourmet = 1650; 

	public const int featAnimalLover = 1640; 
	public const int featMagicManner = 1651; 

	public const int featFaith = 1636; 
	public const int featRapidArrow = 1652; 

	public const int featMartial = 1635; 
	public const int featLonelySoul = 1646; 
	public const int featDreamWaker = 1653; 

	public const int featNegotiate = 1634;

	public const int featSpotting = 1633; 
	public const int featEvade = 1632; 
	public const int featMana = 1611; 

	public const int featStamina = 1612;

public class FEAT

cs

	public const int featPER = 1623;

	public const int featLER = 1624; 
	public const int featSpotting = 1633; 

	public const int featDreamWaker = 1653; 
	public const int featLER = 1624; 

	public const int featMAG = 1625; 
	public const int featWIL = 1626; 

	public const int featCHA = 1627;

public class FEAT

cs

	public const int featDefense = 1631;

	public const int featEvade = 1632; 
	public const int featMAG = 1625; 

	public const int featWIL = 1626; 
	public const int featLife = 1610; 

	public const int featHeavyCasting = 1654;

	public const int featModelBeliever = 1655; 
	public const int featScavenger = 1656;

	public const int featFairyResist = 1212;

public class FEAT

cs

	public const int featCannibalism = 1205;

	public const int featMana = 1611; 
	public const int featModelBeliever = 1655; 

	public const int featManaPrecision = 1214;

public class FEAT

cs

	public const int featAcidBody = 1223;

	public const int featLife = 1610; 
	public const int featNeckHunter = 1426; 

	public const int featShiva = 1224;

	public const int featGod_trickery1 = 1345; 
	public const int featGod_oblivion1 = 1340; 
	public const int featPianist = 1405; 

	public const int featTourist = 1406;

public class FEAT

cs

	public const int featManaMeat = 1421;

	public const int featHealer = 1422; 
	public const int featPianist = 1405; 
	public const int featArcher = 1404; 

	public const int featPeaky = 1423; 
	public const int featHealer = 1422; 

	public const int featArcher = 1404; 
	public const int featFarmer = 1403; 

	public const int featWizard = 1402; 
	public const int featThief = 1401; 

	public const int featBadKarma = 1271;

public class FEAT

cs

	public const int featBloom = 1273;

	public const int featSlimeEvolution = 1274; 
	public const int featGoddess = 1290;

	public const int featGod_element1 = 1300;

public class FEAT

cs

	public const int featGod_harmony1 = 1335;

	public const int featGod_oblivion1 = 1340; 
	public const int featGod_trickery1 = 1345; 

	public const int featGod_moonshadow1 = 1350;

public class FEAT

cs

	public const int featWarrior = 1400;

	public const int featThief = 1401; 
	public const int featFarmer = 1403; 
	public const int featWizard = 1402; 

	public const int featGoodKarma = 1270;

	public const int featElite = 1424; 
	public const int featPeaky = 1423; 

	public const int featAshborn = 1251;

public class FEAT

cs

	public const int featNorland = 1236;

	public const int featNeckHunter = 1426; 
	public const int featMimic = 1425; 

	public const int featLightEater = 1235;

public class FEAT

cs

	public const int featServant = 1227;

	public const int featMimic = 1425; 
	public const int featElite = 1424; 

	public const int featAquatic = 1252;

public class FEAT

cs

	public const int featMassSummoner = 1240;

	public static readonly int[] IDS = new int[141] 
	public static readonly int[] IDS = new int[142] 
	{
		1226, 1652, 1651, 1650, 1649, 1648, 1647, 1646, 1645, 1644, 
		1643, 1642, 1641, 1640, 1636, 1635, 1634, 1633, 1612, 1620, 
		1621, 1622, 1623, 1624, 1653, 1625, 1627, 1628, 1629, 1630, 
		1631, 1632, 1626, 1654, 1655, 1656, 1212, 1211, 1210, 1209, 
		1208, 1207, 1213, 1206, 1204, 1203, 1202, 1201, 1200, 1225, 
		1205, 1611, 1214, 1216, 1657, 1658, 1659, 1660, 1661, 1662, 
		1215, 1750, 1222, 1221, 1220, 1219, 1218, 1217, 1223, 1610, 
		1224, 1345, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 
		1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1405, 
		1423, 1404, 1402, 1271, 1272, 1273, 1290, 1300, 1305, 1310, 
		1315, 1320, 1325, 1330, 1335, 1340, 1350, 1355, 1400, 1401, 
		1403, 1270, 1424, 1251, 1238, 1237, 1236, 1426, 1235, 1234, 
		1233, 1232, 1231, 1230, 1229, 1228, 1227, 1425, 1252, 1239, 
		1250, 1249, 1248, 1247, 1246, 1245, 1244, 1243, 1242, 1241, 
		1240
		1226, 1636, 1640, 1641, 1642, 1643, 1644, 1635, 1645, 1647, 
		1648, 1649, 1650, 1651, 1652, 1646, 1653, 1634, 1632, 1611, 
		1612, 1620, 1621, 1622, 1623, 1633, 1624, 1626, 1627, 1628, 
		1629, 1630, 1631, 1625, 1610, 1654, 1656, 1212, 1211, 1210, 
		1209, 1208, 1207, 1213, 1206, 1204, 1203, 1202, 1201, 1200, 
		1225, 1205, 1655, 1214, 1216, 1657, 1658, 1659, 1660, 1661, 
		1662, 1215, 1750, 1222, 1221, 1220, 1219, 1218, 1217, 1223, 
		1426, 1224, 1340, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 
		1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 
		1404, 1422, 1403, 1401, 1271, 1272, 1273, 1274, 1290, 1300, 
		1305, 1310, 1315, 1320, 1325, 1330, 1335, 1345, 1350, 1355, 
		1400, 1402, 1270, 1423, 1251, 1238, 1237, 1236, 1425, 1235, 
		1234, 1233, 1232, 1231, 1230, 1229, 1228, 1227, 1424, 1252, 
		1239, 1250, 1249, 1248, 1247, 1246, 1245, 1244, 1243, 1242, 
		1241, 1240
	};
}
public class Feat : Element

FoodEffect

public static void Proc(Chara c, Thing food, bool consume = true)

cs
				food.ModNum(-1);
			}
		}
		if (c2.IsCat || !(food.trait is TraitFoodChuryu)) 
		if (!c2.IsCat && food.trait is TraitFoodChuryu) 
		{ 
			foreach (Chara item in c2.pos.ListCharasInRadius(c2, 5, (Chara c) => c.IsCat)) 
			{ 
				item.Say("angry", item); 
				item.ShowEmo(Emo.angry); 
				item.PlaySound("Animal/Cat/cat_angry"); 
				if (c2.IsPC) 
				{ 
					EClass.player.ModKarma(-3); 
				} 
			} 
		} 
		if (!(food.trait is TraitGene) || !c2.IsPC || !c2.HasElement(1274)) 
		{
			return;
		}
		foreach (Chara item in c2.pos.ListCharasInRadius(c2, 5, (Chara c) => c.IsCat)) 
		DNA c_DNA = food.c_DNA; 
		int slot = c_DNA.slot; 
		CharaGenes genes = c2.c_genes; 
		int excess = c2.CurrentGeneSlot + slot - c2.MaxGeneSlot; 
		switch (c_DNA.type) 
		{
			item.Say("angry", item); 
			item.ShowEmo(Emo.angry); 
			item.PlaySound("Animal/Cat/cat_angry"); 
			if (c2.IsPC) 
		case DNA.Type.Inferior:
			if (genes != null) 
			{
				EClass.player.ModKarma(-3); 
				RemoveOldestDNA(); 
			}
			return; 
		case DNA.Type.Brain: 
			return; 
		} 
		if (excess > 0) 
		{ 
			while (excess > 0 && genes != null && genes.items.Count != 0) 
			{ 
				RemoveOldestDNA(); 
			} 
		} 
		c_DNA.Apply(c2); 
		c2.Say("little_eat", c2); 
		c2.PlaySound("ding_potential"); 
		SE.Play("mutation"); 
		c2.PlayEffect("identify"); 
		void RemoveOldestDNA() 
		{ 
			DNA dNA = genes.items[0]; 
			CharaGenes.Remove(c2, dNA); 
			excess -= dNA.slot; 
		}
	}

InvOwnerGene

public override void OnWriteNote(Thing t, UINote n)

cs
	{
		if (ShouldShowGuide(t))
		{
			n.AddHeader("HeaderAdditionalTrait", "gene_hint"); 
			_ = tg.c_genes; 
			int num = t.c_DNA.slot; 
			if (num > 1 && tg.HasElement(1237)) 
			{ 
				num--; 
			} 
			int num2 = tg.MaxGeneSlot - tg.CurrentGeneSlot; 
			int num3 = num2 - num; 
			int maxGeneSlot = tg.MaxGeneSlot; 
			n.AddText("gene_hint_slot".lang(num2.ToString() ?? "", num3.ToString() ?? "", maxGeneSlot.ToString() ?? ""), (num3 >= 0) ? FontColor.Good : FontColor.Bad); 
			int cost = t.c_DNA.cost; 
			int num4 = tg.feat - cost; 
			n.AddText("gene_hint_cost".lang(tg.feat.ToString() ?? "", cost + ((cost == t.c_DNA.cost) ? "" : ("(" + t.c_DNA.cost + ")")), num4.ToString() ?? ""), (num4 >= 0) ? FontColor.Good : FontColor.Bad); 
			t.c_DNA.WriteNoteExtra(n, tg); 
		}
	}
}

POLICY

public class POLICY

cs

	public const int food_for_people = 2502;

	public const int resident_tax = 2512; 
	public const int prohibition = 2503;

	public const int resident_tax = 2512; 
	public const int self_sufficient = 2511;

	public const int ban_radio = 2510;

public class POLICY

cs
{
	2818, 2819, 2820, 2821, 2822, 2826, 2824, 2825, 2827, 2828,
	2817, 2823, 2816, 2704, 2814, 2514, 2513, 2505, 2815, 2500,
	2501, 2502, 2512, 2503, 2511, 2510, 2509, 2508, 2507, 2506, 
	2501, 2502, 2503, 2512, 2511, 2510, 2509, 2508, 2507, 2506, 
	2515, 2516, 2504, 2701, 2700, 2707, 2708, 2706, 2709, 2711,
	2712, 2715, 2710, 2810, 2811, 2812, 2813, 2705, 2703, 2702,
	2800

SKILL

public class SKILL

cs

	public const int vigor = 62;

	public const int weaponDagger = 107; 
	public const int weaponPolearm = 106; 

	public const int PER = 73;

public class SKILL

cs

	public const int fishing = 245;

	public const int weaponPolearm = 106; 
	public const int weaponDagger = 107; 

	public const int carpentry = 255;

public class SKILL

cs
	241, 240, 237, 235, 230, 227, 226, 225, 123, 220,
	200, 152, 151, 150, 135, 134, 133, 132, 210, 207,
	100, 105, 71, 70, 68, 67, 66, 65, 72, 64,
	61, 60, 57, 56, 55, 51, 62, 107, 73, 75, 
	61, 60, 57, 56, 55, 51, 62, 106, 73, 75, 
	104, 103, 102, 101, 94, 93, 74, 92, 90, 80,
	79, 78, 77, 76, 91, 245, 106, 255, 916, 917, 
	79, 78, 77, 76, 91, 245, 107, 255, 916, 917, 
	918, 919, 921, 922, 923, 924, 925, 926, 950, 951,
	952, 953, 915, 954, 956, 957, 958, 959, 960, 961,
	962, 963, 964, 965, 250, 972, 971, 970, 955, 914,

TraitBook

public override void SetName(ref string s)

cs

	public override void OnRead(Chara c)
	{
		if (owner.c_lockLv > 0) 
		{ 
			owner.c_lockLv = 0; 
			c.Say("unseal", c, owner); 
			c.PlaySound("open_bottle"); 
			if (owner.things.Count == 0) 
			{ 
				c.Say("empty"); 
			} 
			else
			{ 
				EClass.pc.PickOrDrop(EClass.pc.pos, owner.things[0]); 
			} 
		} 
		BookList.Item item = Item;
		EClass.ui.AddLayer<LayerHelp>(IsParchment ? "LayerParchment" : "LayerBook").book.Show((IsParchment ? "Scroll/" : "Book/") + item.id, null, item.title, item);
	}

+TraitCoreUser

File Created
cs
public class TraitCoreUser : Trait
{
}

TraitGene

public override void WriteNote(UINote n, bool identified)

cs
	{
		if (owner.c_DNA != null)
		{
			bool flag = EClass.pc.HasElement(1274) && !LayerDragGrid.Instance; 
			if (owner.c_DNA.cost > 0)
			{
				n.AddText("isCostFeatPoint".lang(owner.c_DNA.cost.ToString() ?? "")); 
				n.AddText("isCostFeatPoint".lang((flag ? (owner.c_DNA.cost * EClass.pc.GeneCostMTP / 100 + " (" + owner.c_DNA.cost + ")") : ((object)owner.c_DNA.cost))?.ToString() ?? "")); 
			}
			if (EClass.debug.showExtra)
			{
				n.AddText("duration:" + owner.c_DNA.GetDurationHour());
			}
			owner.c_DNA.WriteNote(n);
			if (flag) 
			{ 
				owner.c_DNA.WriteNoteExtra(n, EClass.pc); 
			} 
		} 
	} 
	public override void TrySetHeldAct(ActPlan p) 
	{ 
		if (!p.pos.Equals(EClass.pc.pos) || !EClass.pc.HasElement(1274)) 
		{ 
			return; 
		} 
		Element invalidFeat = owner.c_DNA.GetInvalidFeat(EClass.pc); 
		Element invalidAction = owner.c_DNA.GetInvalidAction(EClass.pc); 
		if (owner.c_DNA.cost * EClass.pc.GeneCostMTP / 100 > EClass.pc.feat) 
		{ 
			p.TrySetAct("invFood", delegate
			{ 
				SE.Beep(); 
				Msg.Say("notEnoughFeatPoint"); 
				return false; 
			}); 
		} 
		else if (invalidFeat != null) 
		{ 
			p.TrySetAct("invFood", delegate
			{ 
				SE.Beep(); 
				Msg.Say("invalidGeneFeat", EClass.pc, invalidFeat.Name.ToTitleCase()); 
				return false; 
			}); 
		} 
		else if (invalidAction != null) 
		{ 
			p.TrySetAct("invFood", delegate
			{ 
				SE.Beep(); 
				Msg.Say("invalidGeneAction", EClass.pc, invalidAction.Name.ToTitleCase()); 
				return false; 
			}); 
		} 
		else
		{ 
			p.TrySetAct(new AI_Eat
			{ 
				target = owner 
			}); 
		}
	}

TraitParchmentBottle

public class TraitParchmentBottle : TraitParchment

cs
public class TraitParchmentBottle : TraitParchment
{
	public override bool CanBeSmashedToDeath => true; 
	public override bool CanBeAttacked => !EClass._zone.IsPCFactionOrTent; 
	public override ThrowType ThrowType => ThrowType.Vase; 
	public override BookList.Item Item => BottleMessageList.GetItem(base.IdItem);

	public override void OnCreate(int lv)
	{
		owner.SetStr(53, BottleMessageList.GetRandomItem().id);
		owner.c_lockLv = 1; 
		string id; 
		int num; 
		if (!EClass._zone.IsUserZone && EClass.rnd(4) != 0) 
		{ 
			id = "money"; 
			num = EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(500)))) + 1; 
			Rand.SetSeed(owner.uid); 
			if (EClass.rnd(5) == 0) 
			{ 
				SetId("scratchcard", 1); 
			} 
			if (EClass.rnd(10) == 0) 
			{ 
				SetId("234", 1); 
			} 
			if (EClass.rnd(20) == 0) 
			{ 
				SetId("medal", 1); 
			} 
			if (EClass.rnd(30) == 0) 
			{ 
				SetId("map_treasure", 1); 
			} 
			if (EClass.rnd(50) == 0) 
			{ 
				SetId("ticket_fortune", 1); 
			} 
			if (EClass.rnd(100) == 0) 
			{ 
				SetId("1084", 1); 
			} 
			if (EClass.rnd(500) == 9) 
			{ 
				SetId("book_exp", 1); 
			} 
			Rand.SetSeed(); 
			owner.AddCard(ThingGen.Create(id, -1, EClass.pc.FameLv).SetNum(num)); 
		} 
		void SetId(string _id, int _num) 
		{ 
			id = _id; 
			num = _num; 
		} 
	} 
	public override void SetName(ref string s) 
	{ 
		base.SetName(ref s); 
		if (owner.c_lockLv != 0) 
		{ 
			s += "_sealed".lang(); 
		} 
	}
}

WindowChara

public void RefreshSkill(int idTab)

cs
			List("availableFeats_attribute", "attribute");
			return;
		}
		if (chara.IsPC && chara.HasElement(1274) && chara.c_genes != null && chara.c_genes.items.Count > 0) 
		{ 
			Header("genes", null); 
			ListFeat(); 
			list.callbacks = new UIList.Callback<DNA, ButtonElement> 
			{ 
				onClick = delegate
				{ 
					SE.Beep(); 
				}, 
				onInstantiate = delegate(DNA a, ButtonElement b) 
				{ 
					b.mainText.SetText(a.GetText()); 
					b.SetTooltip(delegate(UITooltip t) 
					{ 
						UINote uINote = t.note; 
						uINote.Clear(); 
						uINote.AddHeader(a.GetText()); 
						a.WriteNote(uINote); 
						t.note.Build(); 
					}); 
					b.subText.text = "(+" + a.slot + ")"; 
					b.subText.SetActive(enable: true); 
					b.imagePotential.SetActive(enable: false); 
				}, 
				onList = delegate
				{ 
					foreach (DNA item in chara.c_genes.items) 
					{ 
						list.Add(item); 
					} 
				} 
			}; 
			list.List(); 
		} 
		Header("mutation", null);
		ListFeat();
		list.callbacks = new UIList.Callback<Feat, ButtonElement>

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item in chara.elements.ListElements((Element a) => a.source.category == "mutation" && a.Value != 0)) 
				foreach (Element item2 in chara.elements.ListElements((Element a) => a.source.category == "mutation" && a.Value != 0)) 
				{
					list.Add(item); 
					list.Add(item2); 
				}
			}
		};

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item2 in chara.elements.ListElements((Element a) => a.source.category == "ether" && a.Value != 0)) 
				foreach (Element item3 in chara.elements.ListElements((Element a) => a.source.category == "ether" && a.Value != 0)) 
				{
					list.Add(item2); 
					list.Add(item3); 
				}
			}
		};

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item3 in chara.elements.ListElements((Element a) => a.source.category == "feat" && a.HasTag("innate") && a.Value != 0)) 
				foreach (Element item4 in chara.elements.ListElements((Element a) => a.source.category == "feat" && a.HasTag("innate") && a.Value != 0)) 
				{
					list.Add(item3); 
					list.Add(item4); 
				}
			}
		};

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item4 in chara.elements.ListElements((Element a) => a.source.category == "feat" && !a.HasTag("innate") && a.Value != 0)) 
				foreach (Element item5 in chara.elements.ListElements((Element a) => a.source.category == "feat" && !a.HasTag("innate") && a.Value != 0)) 
				{
					list.Add(item4); 
					list.Add(item5); 
				}
			},
			onSort = (Feat a, UIList.SortMode m) => a.GetSortVal(m)

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (SourceElement.Row item5 in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == "resist" && ((!a.tag.Contains("hidden") && !a.tag.Contains("high")) || chara.Evalue(a.id) != 0))) 
				foreach (SourceElement.Row item6 in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == "resist" && ((!a.tag.Contains("hidden") && !a.tag.Contains("high")) || chara.Evalue(a.id) != 0))) 
				{
					list.Add(chara.elements.GetOrCreateElement(item5.id)); 
					list.Add(chara.elements.GetOrCreateElement(item6.id)); 
				}
			}
		};

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item6 in eles) 
				foreach (Element item7 in eles) 
				{
					if (!skillCats.Contains(item6.source.categorySub)) 
					if (!skillCats.Contains(item7.source.categorySub)) 
					{
						list.Add(item6); 
						list.Add(item7); 
					}
				}
			}

public void RefreshSkill(int idTab)

cs
			},
			onList = delegate
			{
				foreach (Element item7 in eles) 
				foreach (Element item8 in eles) 
				{
					if (skillCats.Contains(item7.source.categorySub)) 
					if (skillCats.Contains(item8.source.categorySub)) 
					{
						list.Add(item7); 
						list.Add(item8); 
					}
				}
			}

void List(string lang, string idSubCat)

cs
			},
			onList = delegate
			{
				foreach (Element item8 in chara.elements.ListElements((Element a) => (a.Value != 0 || a.ValueWithoutLink != 0 || a.vSource > 0) && a.source.category == "skill" && cats.Contains(a.source.categorySub))) 
				foreach (Element item9 in chara.elements.ListElements((Element a) => (a.Value != 0 || a.ValueWithoutLink != 0 || a.vSource > 0) && a.source.category == "skill" && cats.Contains(a.source.categorySub))) 
				{
					list.Add(item8); 
					list.Add(item9); 
				}
			},
			onSort = (Element c, UIList.SortMode m) => EClass.sources.elements.alias[c.source.aliasParent].id * -10000 - c.id

void List(string lang, string idSubCat)

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

WindowCharaMini

public void Refresh(int idTab)

cs
						{
							genes.inferior--;
							SE.Trash();
							genes.Remove(chara, g); 
							CharaGenes.Remove(chara, g); 
							Refresh(idTab);
							chara.RemoveAllStances(); 
						});
					}
				});