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 โ
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);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 โ
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 โ
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)
{