EA 23.289 Nightly
March 30, 2026
16 files modified. 2 new files created.
Important Changes
None.
AI_Idle
public override IEnumerable<Status> Run()
cs
{
case "azzrasizzle":
case "geist":
case "machine_speller":
{
if (EClass.rnd(20) != 0)
{Card
cs
string str = c_idTrait;
if (str.IsEmpty())
{
if (sourceCard.trait.IsEmpty())
{
trait = (isChara ? new TraitChara() : new Trait());
}
else
if (!sourceCard.trait.IsEmpty())
{
trait = ClassCache.Create<Trait>("Trait" + sourceCard.trait[0], "Elin");
}cs
{
trait = ClassCache.Create<Trait>(str, "Elin");
}
if (trait == null)
{
trait = (isChara ? new TraitChara() : new Trait());
}
trait.SetOwner(this);
}Chara
public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
cs
{
if (!Dialog.warned && cost.type == Act.CostType.MP && cost.cost > 0 && mana.value < num6 && !EClass.debug.godMode)
{
Card cardBk = EClass.scene.mouseTarget.card;
ActPlan.warning = true;
Dialog.TryWarnMana(delegate
{
EClass.scene.mouseTarget.card = cardBk;
if (UseAbility(a, tc, pos, pt))
{
EClass.player.EndTurn();FoodEffect
public static void Proc(Chara c, Thing food, bool consume = true)
cs
return;
}
food.CheckJustCooked();
bool flag = EClass._zone.IsPCFaction && c2.IsInSpot<TraitSpotDining>();
bool flag = EClass._zone.IsPCFactionOrTent && c2.IsInSpot<TraitSpotDining>();
int num = (food.isCrafted ? ((EClass.pc.Evalue(1650) >= 3) ? 5 : 0) : 0);
float num2 = (float)(100 + (food.HasElement(757) ? 10 : 0) + (flag ? 10 : 0) + num + Mathf.Min(food.QualityLv * 10, 100)) / 200f;
if (num2 < 0.1f)Region
public override void OnAdvanceHour()
cs
{
ShouldPass = (SourceChara.Row s) => s.biome == biome.name || s.biome.IsEmpty()
}) : SpawnList.Get(biome.spawn.GetRandomCharaId()));
Chara chara = CharaGen.CreateFromFilter(list, regionPoint.dangerLv);
Chara chara = null;
chara = ((EClass.rnd(EClass.debug.enable ? 2 : 50) != 0) ? CharaGen.CreateFromFilter(list, regionPoint.dangerLv) : CharaGen.Create("merchant_travel"));
if (chara != null && !(chara.trait is TraitUniqueMonster))
{
AddCard(chara, randomPoint);ShopType
cs
Sweet,
Moyer,
Curry,
KeeperOfGarden
KeeperOfGarden,
TravelMerchant
}SourceMaterial
cs
}
}
}
Core.Instance.Colors.matColors[alias] = matColors;
}
matColor = matColors.main;
altColor = matColors.alt;SpawnSetting
public static SpawnSetting Mob(string id, string idEle = null, int fixedLv = -1)
cs
};
}
public static SpawnSetting TravelMerchant(string id, int fixedLv = -1)
{
return new SpawnSetting
{
id = id,
rarity = Rarity.Legendary,
fixedLv = fixedLv
};
}
public static SpawnSetting HomeWild(int lv)
{
return new SpawnSettingTrait
public void OnBarter(bool reroll = false)
cs
};
foreach (string id2 in array)
{
AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(10));
AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(99));
}
Add("scroll_alias", 10, 0);
Add("scroll_biography", 10, 0);
Add("cloud", 99, 0);
Add("scroll_alias", 99, 0);
Add("scroll_biography", 99, 0);
Add("1329", 1, 0);
break;
}public void OnBarter(bool reroll = false)
cs
case ShopType.StrangeGirl:
num3 = 50;
break;
case ShopType.TravelMerchant:
num2 /= 3f;
num3 = 30;
break;
}
num2 = num2 * (float)(100 + EClass.pc.Evalue(1406) * 5) / 100f;
num2 = Mathf.Min(num2, num3);public void OnBarter(bool reroll = false)
cs
{
thing11.c_priceFix = -70;
}
if (ShopType == ShopType.TravelMerchant)
{
thing11.c_priceFix = 200;
}
if (thing11.trait is TraitErohon)
{
thing11.c_IDTState = 5;Thing Add(string id, int a, int idSkin)
cs
}
void AddAdvWeek(int i)
{
if (i != 18)
{
Thing thing7 = ThingGen.CreateRedBook("advweek_" + i);
thing7.c_priceFix = -90;
AddThing(thing7);
}
Thing thing7 = ThingGen.CreateRedBook("advweek_" + i);
thing7.c_priceFix = -90;
AddThing(thing7);
}
void AddCassette(int idCas, string idQuest, int phase)
{cs
return FromFilter("shop_gun");
case ShopType.Blackmarket:
case ShopType.Exotic:
case ShopType.TravelMerchant:
{
int num = 30;
if (ShopType == ShopType.TravelMerchant)
{
num = 5;
}
if (Guild.Thief.IsCurrentZone)
{
num = 25;cs
{
num = 15;
}
if (EClass.debug.enable)
{
num = 1;
}
CardBlueprint.SetRarity((EClass.rnd(num * 5) == 0) ? Rarity.Mythical : ((EClass.rnd(num) == 0) ? Rarity.Legendary : ((EClass.rnd(5) == 0) ? Rarity.Superior : Rarity.Normal)));
return FromFilter("shop_blackmarket");
}TraitBuildBoard
public class TraitBuildBoard : TraitBoard
cs
public override void TrySetAct(ActPlan p)
{
if (EClass.debug.godBuild || EClass._zone.IsPCFaction || EClass._zone is Zone_Tent)
if (EClass.debug.godBuild || EClass._zone.IsPCFactionOrTent)
{
p.TrySetAct("actBuildMode", delegate
{TraitCrafter
public override void TrySetAct(ActPlan p)
cs
return false;
}, _t, CursorSystem.Craft);
}
else
else if (!(this is TraitIncubator) || EClass._zone.IsPCFactionOrTent)
{
p.TrySetAct(CrafterTitle, delegate
{+TraitDoorCurtain3
File Created
cs
public class TraitDoorCurtain3 : TraitDoorAuto
{
public override string idSound => "Material/meat_drop";
}TraitIncubator
public class TraitIncubator : TraitCrafter
cs
public override bool AutoToggle => false;
public override bool CanUseFromInventory => false;
public override bool IsHomeItem => true;
}TraitMapBoard
public class TraitMapBoard : TraitBoard
cs
public override void TrySetAct(ActPlan p)
{
if (!EClass.debug.enable && !EClass._zone.IsPCFaction && !(EClass._zone is Zone_Tent))
if (!EClass.debug.enable && !EClass._zone.IsPCFactionOrTent)
{
return;
}+TraitMerchantTravel
File Created
cs
public class TraitMerchantTravel : TraitMerchant
{
public override int ShopLv
{
get
{
if (!base.owner.IsPCFactionOrMinion)
{
return base.owner.LV;
}
return base.ShopLv;
}
}
public override ShopType ShopType => ShopType.TravelMerchant;
public override bool AllowCriminal => true;
public override int CostRerollShop => 10;
public override int RestockDay => 360;
}TraitPaintBoard
public override bool RenderExtra
cs
public override void TrySetAct(ActPlan p)
{
if (!EClass.debug.enable && (!EClass._zone.IsPCFaction || !p.altAction))
if (!EClass.debug.enable && (!EClass._zone.IsPCFactionOrTent || !p.altAction))
{
return;
}Zone
cs
}
}
}
base.isPeace = false;
if (!EClass.player.simulatingZone)
{
base.isPeace = false;
}
OnBeforeDeactivate();
if (IsPCFaction)
{ZonePreEnterEncounter
public override void Execute()
cs
{
List<Chara> list = new List<Chara>();
Chara leader = null;
float num = Mathf.Clamp(EClass.pc.FameLv + 8, 8f, 24f + Mathf.Sqrt(EClass.pc.FameLv));
for (int i = 0; i < EClass.rndHalf((int)num); i++)
if (mob.id == "merchant_travel")
{
lv = Mathf.Max(20, EClass.pc.FameLv * 5);
Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(2, 5, requireLos: false, allowChara: false);
if (randomPointInRadius != null)
for (int i = 0; i < EClass.rndHalf(12); i++)
{
Chara chara = EClass._zone.SpawnMob(randomPointInRadius, SpawnSetting.Mob(mob.id, (mob.MainElement == Element.Void) ? null : mob.MainElement.source.alias.Substring(3)));
Hostility hostility2 = (chara.c_originalHostility = Hostility.Enemy);
chara.hostility = hostility2;
chara.enemy = EClass.pc.party.members.RandomItem();
leader = chara;
if (EClass.rnd(5) == 0)
Point randomPointInRadius2 = randomPointInRadius.GetRandomPointInRadius(1, 4, requireLos: false, allowChara: false);
if (randomPointInRadius2 != null)
{
TraitFoodEggFertilized.MakeBaby(chara, 1);
Chara chara = null;
if (i == 0)
{
chara = (leader = EClass._zone.SpawnMob(randomPointInRadius2, SpawnSetting.TravelMerchant(mob.id, lv)));
}
else
{
string[] source = new string[5] { "merc", "merc_archer", "merc_mage", "merc_warrior", "dog_hound" };
chara = EClass._zone.SpawnMob(randomPointInRadius2, SpawnSetting.Mob(source.RandomItem(), null, lv));
Chara chara2 = chara;
Hostility hostility2 = (chara.c_originalHostility = Hostility.Neutral);
chara2.hostility = hostility2;
chara.MakeMinion(leader);
}
list.Add(chara);
}
list.Add(chara);
}
leader.ShowDialog();
}
if (leader != null)
else
{
List<Thing> list2 = EClass.pc.things.List(delegate(Thing t)
float num = Mathf.Clamp(EClass.pc.FameLv + 8, 8f, 24f + Mathf.Sqrt(EClass.pc.FameLv));
for (int j = 0; j < EClass.rndHalf((int)num); j++)
{
if (t.Num >= 10)
Point randomPointInRadius3 = EClass.pc.pos.GetRandomPointInRadius(2, 5, requireLos: false, allowChara: false);
if (randomPointInRadius3 != null)
{
return false;
Chara chara3 = EClass._zone.SpawnMob(randomPointInRadius3, SpawnSetting.Mob(mob.id, (mob.MainElement == Element.Void) ? null : mob.MainElement.source.alias.Substring(3)));
Hostility hostility2 = (chara3.c_originalHostility = Hostility.Enemy);
chara3.hostility = hostility2;
chara3.enemy = EClass.pc.party.members.RandomItem();
leader = chara3;
if (EClass.rnd(5) == 0)
{
TraitFoodEggFertilized.MakeBaby(chara3, 1);
}
list.Add(chara3);
}
return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped;
}, onlyAccessible: true);
Thing t2 = ((list2.Count > 0) ? list2.RandomItem() : null);
if (t2 == null)
{
GameLang.refDrama1 = (GameLang.refDrama2 = "mobPity".lang());
}
else
{
GameLang.refDrama1 = t2.NameSimple;
GameLang.refDrama2 = t2.Name;
}
LayerDrama.refAction1 = delegate
if (leader != null)
{
foreach (Chara item in list)
List<Thing> list2 = EClass.pc.things.List(delegate(Thing t)
{
item.ShowEmo(Emo.angry);
if (EClass.rnd(6) == 0)
if (t.Num >= 10)
{
item.Talk((EClass.rnd(5) == 0) ? "rumor_bad" : ((EClass.rnd(5) == 0) ? "callGuards" : "disgust"));
return false;
}
return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped;
}, onlyAccessible: true);
Thing t2 = ((list2.Count > 0) ? list2.RandomItem() : null);
if (t2 == null)
{
GameLang.refDrama1 = (GameLang.refDrama2 = "mobPity".lang());
}
};
LayerDrama.refAction2 = delegate
{
if (t2 != null)
else
{
leader.AddCard(t2);
GameLang.refDrama1 = t2.NameSimple;
GameLang.refDrama2 = t2.Name;
}
foreach (Chara item2 in list)
LayerDrama.refAction1 = delegate
{
if (EClass.rnd(6) == 0)
foreach (Chara item in list)
{
item2.Talk((EClass.rnd(5) == 0) ? "rumor_good" : ((EClass.rnd(3) == 0) ? "thanks3" : "thanks"));
item.ShowEmo(Emo.angry);
if (EClass.rnd(6) == 0)
{
item.Talk((EClass.rnd(5) == 0) ? "rumor_bad" : ((EClass.rnd(5) == 0) ? "callGuards" : "disgust"));
}
}
item2.ShowEmo(Emo.happy);
Hostility hostility5 = (item2.c_originalHostility = Hostility.Neutral);
item2.hostility = hostility5;
item2.enemy = null;
}
EClass.player.ModKarma(1);
};
leader.ShowDialog("_chara", "encounter_mob");
};
LayerDrama.refAction2 = delegate
{
if (t2 != null)
{
leader.AddCard(t2);
}
foreach (Chara item2 in list)
{
if (EClass.rnd(6) == 0)
{
item2.Talk((EClass.rnd(5) == 0) ? "rumor_good" : ((EClass.rnd(3) == 0) ? "thanks3" : "thanks"));
}
item2.ShowEmo(Emo.happy);
Hostility hostility6 = (item2.c_originalHostility = Hostility.Neutral);
item2.hostility = hostility6;
item2.enemy = null;
}
EClass.player.ModKarma(1);
};
leader.ShowDialog("_chara", "encounter_mob");
}
}
}
else
{
for (int j = 0; j < enemies; j++)
for (int k = 0; k < enemies; k++)
{
Point nearestPoint = (EClass.pc.pos.GetRandomPoint(4) ?? EClass.pc.pos).GetNearestPoint(allowBlock: false, allowChara: false);
Chara chara2 = EClass._zone.SpawnMob(nearestPoint, SpawnSetting.Encounter(lv));
Hostility hostility2 = (chara2.c_originalHostility = Hostility.Enemy);
chara2.hostility = hostility2;
chara2.enemy = EClass.pc.party.members.RandomItem();
Chara chara4 = EClass._zone.SpawnMob(nearestPoint, SpawnSetting.Encounter(lv));
Hostility hostility2 = (chara4.c_originalHostility = Hostility.Enemy);
chara4.hostility = hostility2;
chara4.enemy = EClass.pc.party.members.RandomItem();
}
}
if (flag && EClass.rnd(EClass.debug.enable ? 1 : 3) == 0)