EA 23.224 Nightly
October 24, 2025
22 files modified. 1 new file created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
ABILITY (1)
public override int GetSourceValue(int v, int lv, SourceValueType type)
public override long GetSourceValue(long v, int lv, SourceValueType type) ELEMENT (1)
public virtual int GetSourceValue(int v, int lv, SourceValueType type)
public virtual long GetSourceValue(long v, int lv, SourceValueType type) Trait (1)
public void OnBarter()
public void OnBarter(bool reroll = false) ABILITY
public override bool CanLink(ElementContainer owner)
return false;
}
public override int GetSourceValue(int v, int lv, SourceValueType type)
public override long GetSourceValue(long v, int lv, SourceValueType type)
{
if (type != 0)
{
return base.GetSourceValue(v, lv, type);
}
return 10 * (100 + (lv - 1) * base.source.lvFactor / 10) / 100;
return 10L * (long)(100 + (lv - 1) * base.source.lvFactor / 10) / 100;
}
public override int GetPower(Card c)ActEffect
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
}
case EffectId.LittleSisterMigration:
{
if (!(EClass._zone is Zone_LittleGarden))
if (!(EClass._zone is Zone_LittleGarden) && !EClass.game.IsSurvival)
{
Msg.SayNothingHappen();
return;ActThrow
public static EffectIRenderer Throw(Card c, Point p, Card target, Thing t, Throw
}
else if (traitMonsterBall.IsLittleBall)
{
if (chara3.id != "littleOne" || chara3.IsPCFactionOrMinion || EClass._zone is Zone_LittleGarden || EClass._zone.IsUserZone)
if (chara3.id != "littleOne" || chara3.IsPCFactionOrMinion || EClass._zone is Zone_LittleGarden || EClass._zone.IsUserZone || chara3.GetBool(132))
{
Msg.Say("monsterball_invalid");
break;
}
chara3.SetBool(132, enable: true);
}
else
{CINT
public const int dateDeathLock = 130;
public const int fixedValue = 131;
public const int isAlreadyCaptured = 132;
}CardBlueprint
public bool fixedQuality;
public bool isCraft;
public static CardBlueprint current;
public static CardBlueprint _Default = new CardBlueprint();Chara
public bool IsHostile(Chara c)
}
if (OriginalHostility >= Hostility.Friend)
{
if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
{
return true;
}
if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
{
return true;CoreDebug
}
if (Input.GetKeyDown(KeyCode.F4))
{
for (int j = 0; j < 100; j++)
for (int j = 0; j < 10; j++)
{
Chara chara2 = EClass._zone.SpawnMob(null, SpawnSetting.HomeEnemy(10));
if (chara2.IsAnimal)
EClass._zone.SpawnMob(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), new SpawnSetting
{
chara2.Destroy();
}
id = "gagu",
isBoss = true,
fixedLv = EClass._zone.DangerLv
});
}
return;
}public static string ModFame(int amount)
return "Done.";
}
[ConsoleCommand("")]
public static string MaxFame()
{
if (!CheatEnabled())
{
return EnableCheat;
}
if (EClass.player.CountKeyItem("license_adv") == 0)
{
EClass.player.ModKeyItem("license_adv");
}
EClass.player.ModFame(int.MaxValue);
return "Done.";
}
[ConsoleCommand("")]
public static string ModKarma(int amount)
{ELEMENT
public int GetMaterialSourceValue(Thing t, int v)
return v * (100 + t.encLV * 10) / 100;
}
public virtual int GetSourceValue(int v, int lv, SourceValueType type)
public virtual long GetSourceValue(long v, int lv, SourceValueType type)
{
return type switch
{ElementContainer
public void ApplyElementMap(int uid, SourceValueType type, Dictionary<int, int>
{
orCreateElement.vSourcePotential += orCreateElement.GetSourcePotential(value) * num;
}
int num2 = orCreateElement.GetSourceValue(value, lv, type) * num;
orCreateElement.vSource += num2;
if (lv > 10000000)
{
lv = 10000000;
}
long num2 = orCreateElement.GetSourceValue(value, lv, type) * num;
if (num2 >= 99999999)
{
num2 = 99999999L;
}
orCreateElement.vSource += (int)num2;
if (applyFeat && orCreateElement is Feat)
{
(orCreateElement as Feat).Apply(num2, this);
(orCreateElement as Feat).Apply((int)num2, this);
}
}
}FactionRelation
public int ExpToNext => 100 + rank * rank * 100;
public int MaxRank => 5;
public int MaxRank => 6;
public string TextTitle => Lang.GetList("guild_title")[Mathf.Min(rank / 2, 5)];GuildFighter
public bool HasBounty(Chara c)
{
return false;
}
if (c.uid % 2 != 0)
if (c.uid % ((relation.rank >= 6) ? 3 : 2) == 0)
{
return false;
}GuildMage
public int BuySpellbookPrice(int a)
}
return a * 100 / (120 + relation.rank / 2);
}
public int DomainBonus()
{
if (relation.rank < 6)
{
return 0;
}
return 1;
}
}GuildMerchant
public long InvestPrice(long a)
}
return a * 100 / (110 + relation.rank / 2);
}
public int InvestBonus()
{
if (relation.rank < 6)
{
return 0;
}
return 10;
}
}GuildThief
public int SellStolenPrice(int a)
}
return a * 100 / (190 - relation.rank * 2);
}
public int FurnitureBonus()
{
if (relation.rank < 6)
{
return 1;
}
return 2;
}
}Player
public Layer SelectDomain(Action onKill = null)
}
}, delegate(List<UIList.ButtonPair> list)
{
bool flag = EClass.player.domains.Count >= 3 + EClass.pc.Evalue(1402);
bool flag = EClass.player.domains.Count >= 3 + EClass.pc.Evalue(1402) + Guild.Mage.DomainBonus();
foreach (UIList.ButtonPair item in list)
{
UIButton button = (item.component as ItemGeneral).button1;QuestGuild
public override string GetDetailText(bool onJournal = false)
{
text = text + (guild.id + "_benefit2").lang() + "\n";
}
if (num >= 3)
{
text = text + (guild.id + "_benefit3").lang() + "\n";
}
if (num >= 4)
{
text = text + "guild_benefit_feat".lang() + "\n";RecipeCard
public override Thing Craft(BlessedState blessed, bool sound = false, List<Thing
CardBlueprint.Set(new CardBlueprint
{
qualityBonus = num3,
rarity = (flag ? Rarity.Crude : Rarity.Normal)
rarity = (flag ? Rarity.Crude : Rarity.Normal),
isCraft = true
});
Thing thing = (flag3 ? ThingGen.Create(key) : ThingGen.Create(key, num, num4));
thing.idSkin = idSkin;Thing
public override void OnCreate(int genLv)
{
num4 = 0;
}
if (num4 > 0)
{
num4 += EClass.rnd(Guild.Thief.FurnitureBonus());
}
}
else if (bp.qualityBonus < 0)
{Trait
public virtual string IdSoundToggleOff
}
}
public virtual int ShopLv => Mathf.Max(1, EClass._zone.development / 10 + owner.c_invest + 1);
public virtual int ShopLv => Mathf.Max(1, EClass._zone.development / 10 + owner.c_invest * (100 + Guild.Merchant.InvestBonus()) / 100 + 1);
public virtual CopyShopType CopyShop => CopyShopType.None;public Emo2 GetRestockedIcon()
return Emo2.none;
}
public void OnBarter()
public void OnBarter(bool reroll = false)
{
Thing t = owner.things.Find("chest_merchant");
if (t == null) {
break;
}
int num5 = 0;
int num7 = 0;
foreach (Thing thing10 in c_copyContainer.things)
{
if (!owner.trait.CanCopy(thing10)) {
thing5.elements.Remove(item.id);
}
int num6 = 1;
int num8 = 1;
switch (owner.trait.CopyShop)
{
case CopyShopType.Item:
{
num6 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50);
num8 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50);
int[] array = new int[3] { 704, 703, 702 };
foreach (int ele in array)
{
if (thing5.HasElement(ele))
{
num6 = 1;
num8 = 1;
}
}
break; thing5.c_charges = thing10.c_charges;
break;
}
if (num6 > 1 && thing5.trait.CanStack)
if (num8 > 1 && thing5.trait.CanStack)
{
thing5.SetNum(num6);
thing5.SetNum(num8);
}
AddThing(thing5);
num5++;
if (num5 > owner.trait.NumCopyItem)
num7++;
if (num7 > owner.trait.NumCopyItem)
{
break;
} break;
case ShopType.RedBook:
{
for (int num4 = 0; num4 < 30; num4++)
for (int num6 = 0; num6 < 30; num6++)
{
AddThing(ThingGen.CreateFromCategory((EClass.rnd(2) == 0) ? "_book" : "book"));
} 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 num8 = 0; num8 < EClass.rnd(3) + 1; num8++)
for (int l = 0; l < EClass.rnd(3) + 1; l++)
{
Add("462", 1, 0);
}
for (int num9 = 0; num9 < EClass.rnd(3) + 1; num9++)
for (int m = 0; m < EClass.rnd(3) + 1; m++)
{
Add("1167", 1, 0);
} if (num3)
{
Add("littleball", 10, 0);
if (owner.Chara.affinity.CanGiveCard())
if (!owner.Chara.affinity.CanGiveCard())
{
if (!owner.Chara.HasElement(287))
{
owner.Chara.elements.SetBase(287, (!EClass.debug.enable) ? 1 : 50);
}
for (int l = 0; l < 20; l++)
break;
}
if (!owner.Chara.HasElement(287))
{
owner.Chara.elements.SetBase(287, (!EClass.debug.enable) ? 1 : 50);
}
if (!reroll)
{
for (int n = 0; n < 20; n++)
{
owner.Chara.ModExp(287, 1000);
}
Thing thing3 = CraftUtil.MakeLoveLunch(owner.Chara);
thing3.elements.SetBase(1229, 1);
AddThing(thing3);
}
Thing thing3 = CraftUtil.MakeLoveLunch(owner.Chara);
thing3.elements.SetBase(1229, 1);
AddThing(thing3);
break;
}
for (int m = 0; m < 10; m++)
for (int num4 = 0; num4 < 10; num4++)
{
Thing thing4 = ThingGen.Create(EClass._zone.IsFestival ? "1123" : ((EClass.rnd(3) == 0) ? "1169" : "1160"));
thing4.DyeRandom(); }
if (EClass._zone is Zone_Exile)
{
for (int n = 0; n < 30; n++)
for (int num5 = 0; num5 < 30; num5++)
{
Add("1235", 1, -1);
Add("1236", 1, -1); continue;
}
string[] recipeKey = item3.row.recipeKey;
for (int num7 = 0; num7 < recipeKey.Length; num7++)
for (int num9 = 0; num9 < recipeKey.Length; num9++)
{
if (recipeKey[num7] == ShopType.ToString())
if (recipeKey[num9] == ShopType.ToString())
{
NoRestock(ThingGen.CreateRecipe(item3.id));
break;TraitRadio
public class TraitRadio : TraitItem
public List<string> ids = new List<string>
{
"none", "amb_fire", "amb_bbq", "amb_crowd", "amb_seagull", "amb_horror", "amb_pub", "amb_smelter", "amb_clockwork", "amb_dead",
"amb_magic", "amb_fountain", "amb_clock", "amb_boat", "amb_waterfall", "amb_rag1", "amb_squeak1"
"amb_magic", "amb_fountain", "amb_clock", "amb_boat", "amb_waterfall", "amb_rag1", "amb_squeak1", "amb_river", "amb_summer"
};
public override string IDActorEx => owner.GetStr(52);+TraitUniqueCharaNoJoin
File Created
public class TraitUniqueCharaNoJoin : TraitChara
{
public override bool CanInvite => false;
}UIInventory
SE.Dice();
EMono._zone.influence -= cost;
_owner.c_dateStockExpire = 0;
_owner.trait.OnBarter();
_owner.trait.OnBarter(reroll: true);
RefreshGrid();
Sort();
SE.Play("shop_open");Zone
public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)
cardRow = EClass.sources.cards.map["santa"];
EClass.player.flags.santa++;
}
int num3 = ((setting.fixedLv == -1) ? cardRow.LV : setting.fixedLv);
long num3 = ((setting.fixedLv == -1) ? cardRow.LV : setting.fixedLv);
if (ScaleType == ZoneScaleType.Void)
{
num3 = (50 + cardRow.LV) * Mathf.Max(1, (num - 1) / 50);public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)
}
if (num3 != cardRow.LV)
{
cardBlueprint.lv = num3;
cardBlueprint.lv = (int)Mathf.Min(num3, 100000000f);
}
CardBlueprint.Set(cardBlueprint);
Chara chara = CharaGen.Create(cardRow.id, num2);