Skip to content

EA 23.290 Nightly

April 2, 2026

15 files modified. 1 new file created.

Important Changes

None.

AI_Fuck

public override IEnumerable<Status> Run()

cs
	{
		yield return DoGoto(target.pos, destDist, ignoreConnection: true);
	}
	cc.Say((variation == Variation.Slime) ? "slime_start" : ((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc); 
	cc.Say((this.variation == Variation.Slime) ? "slime_start" : ((this.variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc); 
	isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;
	if (Type == FuckType.tame)
	{
		cc.SetTempHand(1104, -1);
	}
	maxProgress = ((variation == Variation.NTR || variation == Variation.Bloodsuck) ? 10 : 25); 
	switch (variation) 
	maxProgress = ((this.variation == Variation.NTR || this.variation == Variation.Bloodsuck) ? 10 : 25); 
	Variation variation = this.variation; 
	if ((uint)(variation - 3) <= 2u) 
	{ 
		maxProgress = maxProgress * 100 / (100 + owner.Evalue(1664) * 50); 
	} 
	switch (this.variation) 
	{
	case Variation.Succubus:
		cc.Talk("seduce");

public override IEnumerable<Status> Run()

cs
		switch (Type)
		{
		case FuckType.fuck:
			if (variation == Variation.NTR) 
			if (this.variation == Variation.NTR) 
			{
				cc.Say("ntr", cc, tc);
			}

public override IEnumerable<Status> Run()

cs
			{
				((EClass.rnd(2) == 0) ? cc : tc).PlayEffect("love2");
			}
			if (variation == Variation.Slime) 
			if (this.variation == Variation.Slime) 
			{
				owner.DoHostileAction(target);
			}
			if (EClass.rnd(3) == 0 || sell)
			{
				if (variation == Variation.Slime) 
				if (this.variation == Variation.Slime) 
				{
					target.AddCondition<ConSupress>(200, force: true);
				}

public override IEnumerable<Status> Run()

cs
					target.AddCondition<ConWait>(50, force: true);
				}
			}
			if (variation == Variation.Bloodsuck || variation == Variation.Slime) 
			if (this.variation == Variation.Bloodsuck || this.variation == Variation.Slime) 
			{
				owner.pos.TryWitnessCrime(cc, tc, 4, (Chara c) => EClass.rnd(cc.HasCondition<ConTransmuteBat>() ? 50 : 20) == 0);
			}

Card

public void SpawnLoot(Card origin)

cs
				num5 = Mathf.Max(1, num5 * (50 + EClass.game.principal.dropRateMtp * 50) / 100);
			}
			List<Thing> list2 = new List<Thing>();
			foreach (Thing thing4 in things) 
			foreach (Thing thing6 in things) 
			{
				if (thing4.HasTag(CTAG.gift) || thing4.trait is TraitChestMerchant) 
				if (thing6.HasTag(CTAG.gift) || thing6.trait is TraitChestMerchant) 
				{
					continue;
				}
				if (thing4.isGifted || thing4.rarity >= Rarity.Artifact || thing4.trait.DropChance > EClass.rndf(1f)) 
				if (thing6.isGifted || thing6.rarity >= Rarity.Artifact || thing6.trait.DropChance > EClass.rndf(1f)) 
				{
					list.Add(thing4); 
					list.Add(thing6); 
				}
				else if (thing4.IsEquipmentOrRanged) 
				else if (thing6.IsEquipmentOrRanged) 
				{
					if (thing4.rarity >= Rarity.Legendary) 
					if (thing6.rarity >= Rarity.Legendary) 
					{
						list2.Add(thing4); 
						list2.Add(thing6); 
					}
					else if (EClass.rnd(100) == 0)
					{
						list.Add(thing4); 
						list.Add(thing6); 
					}
				}
				else if (EClass.rnd(5) == 0)
				{
					list.Add(thing4); 
					list.Add(thing6); 
				}
			}
			if (num5 > 0 && list2.Count > 0)

public void SpawnLoot(Card origin)

cs
					}
				}
			}
			if (trait is TraitMerchantTravel) 
			{ 
				trait.OnBarter(); 
				Thing thing4 = things.Find<TraitChestMerchant>(); 
				if (thing4 != null) 
				{ 
					Rand.SetSeed(uid); 
					int num8 = 1 + EClass.rnd(3); 
					List<Thing> list3 = thing4.things.ToList(); 
					if (trait is TraitMerchantTravel2) 
					{ 
						list3.Shuffle(); 
					} 
					else
					{ 
						list3.Sort((Thing a, Thing b) => b.GetValue() - a.GetValue()); 
					} 
					Rand.SetSeed(); 
					while (num8 > 0 && list3.Count != 0) 
					{ 
						Thing thing5 = list3.First(); 
						list3.Remove(thing5); 
						if (!thing5.IsUnique) 
						{ 
							list.Add(thing5); 
							num8--; 
						} 
					} 
				} 
			} 
		}
	}
	foreach (Thing thing5 in things) 
	foreach (Thing thing7 in things) 
	{
		if (thing5.GetInt(116) != 0) 
		if (thing7.GetInt(116) != 0) 
		{
			list.Add(thing5); 
			list.Add(thing7); 
		}
	}
	Point nearestPoint = GetRootCard().pos;

public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
				return 8;
			case "1329":
				return 20;
			case "statue_lulu":
			case "statue_jure":
			case "statue_ehe":
				return 100; 
			} 
			break; 
		case CurrencyType.Money2:
			if (id == "water_jure") 
			{ 
				return 1000; 
			}
			break;
		case CurrencyType.Ecopo:

DOMAIN

public class DOMAIN

cs

	public const int domWind = 807;

	public const int domEyth = 814; 
	public const int domHarmony = 815; 

	public const int domMachine = 809;

public class DOMAIN

cs

	public const int domOblivion = 813;

	public const int domHarmony = 815; 
	public const int domEyth = 814; 

	public const int domHarvest = 808;

	public static readonly int[] IDS = new int[16]
	{
		800, 806, 801, 802, 803, 804, 805, 807, 814, 809, 
		810, 811, 812, 813, 815, 808
		800, 806, 801, 802, 803, 804, 805, 807, 815, 809, 
		810, 811, 812, 813, 814, 808
	};
}
public class Domain : EClass

DramaCustomSequence

public void Build(Chara c)

cs
					Choice2("daGuide", "_Guide");
				}
			}
			if (c.trait is TraitGM_Mage && Guild.Mage.relation.rank >= 4) 
			{ 
				Choice2("daChangeDomain", "_changeDomain").DisableSound(); 
			} 
			if (c.trait.ShopType != 0) 
			{ 
				Choice2(c.trait.TextNextRestock, "_buy").DisableSound(); 
			} 
			if (!EClass._zone.IsUserZone)
			{
				if (c.trait is TraitGM_Mage && Guild.Mage.relation.rank >= 4) 
				{ 
					Choice2("daChangeDomain", "_changeDomain").DisableSound(); 
				} 
				if (c.trait.ShopType != 0) 
				{ 
					Choice2(c.trait.TextNextRestock, "_buy").DisableSound(); 
					if (c.trait is TraitMerchantTravel && !c.IsPCFactionOrMinion) 
					{ 
						Choice2("daRob", "_rob"); 
					} 
				} 
				if (c.trait.SlaverType != 0)
				{
					Choice2(c.trait.TextNextRestockPet, "_buySlave").DisableSound();

void Invest(bool quick)

cs
		});
		Choice("no", StepDefault, cancel: true).SetOnClick(RumorChill);
	}, null, StepDefault);
	Step("_rob"); 
	Method(delegate
	{ 
		TempTalkTopic("rob1", StepDefault); 
		Choice("yes_rob", delegate
		{ 
			sequence.Exit(); 
			c.Talk("callGuards"); 
			foreach (Chara chara in EClass._map.charas) 
			{ 
				if (chara == c || chara.master == c) 
				{ 
					chara.SetHostility(Hostility.Enemy); 
					chara.DoHostileAction(EClass.pc.party.members.RandomItem()); 
				} 
			} 
			if (!EClass._zone.IsPCFaction && EClass._zone is Zone_Field) 
			{ 
				EClass._zone.SetBGM(102); 
			} 
			EClass.player.ModKarma(1); 
		}); 
		Choice("no_rob", StepDefault, cancel: true).SetOnClick(RumorChill); 
	}, null, StepDefault); 
	Step("_news");
	Method(delegate
	{

ELEMENT

public void _WriteNote(UINote n, Chara c, Act act)

cs
			}
			else
			{
				string text3 = text2.Replace("#calc", Calc()); 
				string text3 = text2.Replace("#calc", Calc()).Replace(";", ","); 
				if (!source.aliasRef.IsEmpty())
				{
					text3 = text3.Replace("#ele", EClass.sources.elements.alias[source.aliasRef].GetName().ToLower());

FACTION

public class FACTION

cs

	public const int bfSea = 3605;

	public const int bfCave = 3500; 
	public const int bfFertile = 3700;

	public const int bfGeyser = 3701;

public class FACTION

cs

	public const int bfTranquil = 3703;

	public const int bfVolcano = 3704; 
	public const int bfUndersea = 3606;

	public const int bfHunt = 3705; 
	public const int bfFish = 3706;

	public const int bfBreed = 3710;

	public const int bfHunt = 3705; 
	public const int actBuildInspect = 4006; 

	public const int bfFreshAir = 3708; 
	public const int actBuildRecipe = 4005; 

	public const int bfMonster = 3707; 
	public const int actBuildCollect = 4004; 

	public const int actBuildMine = 4001; 
	public const int actBuildAnywhere = 4003; 

	public const int actBuildTerrain = 4002;

	public const int bfCave = 3500; 
	public const int actBuildCollect = 4004; 
	public const int actBuildMine = 4001; 

	public const int actBuildRecipe = 4005; 
	public const int bfMonster = 3707; 

	public const int actBuildInspect = 4006; 
	public const int bfFreshAir = 3708; 

	public const int actBuildAnywhere = 4003; 
	public const int bfVolcano = 3704; 

	public static readonly int[] IDS = new int[53]
	{
		2205, 4000, 3900, 3805, 3804, 3800, 3802, 3801, 2003, 3784,
		3803, 2115, 2120, 2117, 2118, 2119, 2207, 2200, 2201, 2202,
		2206, 3783, 2203, 2204, 2116, 3782, 3709, 3780, 3781, 3600,
		3601, 3602, 3603, 3604, 3605, 3700, 3701, 3702, 3703, 3704, 
		3606, 3706, 3710, 3705, 3708, 3707, 4001, 4002, 3500, 4004, 
		4005, 4006, 4003
		3601, 3602, 3603, 3604, 3605, 3500, 3700, 3701, 3702, 3703, 
		3606, 3705, 3706, 3710, 4006, 4005, 4004, 4003, 4002, 4001, 
		3707, 3708, 3704
	};
}
public class Faction : EClass

FEAT

``

cs

public class FEAT
{
	public const int featEND = 1622; 
	public const int featHardy = 1630; 
	public const int featLER = 1624; 

	public const int featSPD = 1629; 
	public const int featMAG = 1625; 

	public const int featLuck = 1628; 
	public const int featWIL = 1626; 

	public const int featCHA = 1627;

	public const int featWIL = 1626; 
	public const int featEvade = 1632; 

	public const int featMAG = 1625; 
	public const int featSPD = 1629; 

	public const int featLER = 1624; 
	public const int featHardy = 1630; 

	public const int featPER = 1623; 
	public const int featDefense = 1631; 

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

	public const int featDefense = 1631; 
	public const int featLuck = 1628; 

	public const int featExecutioner = 1420; 
	public const int featPER = 1623; 
	public const int featManaMeat = 1421; 
	public const int featDEX = 1621; 

	public const int featSTR = 1620;

public class FEAT

cs

	public const int featHealer = 1422;

	public const int featManaMeat = 1421; 
	public const int featNegotiate = 1634; 

	public const int featSpotting = 1633; 
	public const int featExecutioner = 1420; 

	public const int featMilitant = 1419;

	public const int featSwordsage = 1418; 
	public const int featDEX = 1621; 
	public const int featEND = 1622; 

	public const int featNegotiate = 1634; 
	public const int featMartial = 1635; 

	public const int featGourmet = 1650; 
	public const int featMagicManner = 1651; 

	public const int featFaith = 1636; 
	public const int featAnimalLover = 1640; 

	public const int featWitch = 1417; 
	public const int featSwordsage = 1418; 

	public const int featComat = 1750;

	public const int featFastFucker = 1664; 
	public const int featFastEater = 1663;

	public const int featGoldenFinger = 1662;

public class FEAT

cs

	public const int featRapidArrow = 1652;

	public const int featMagicManner = 1651; 
	public const int featGourmet = 1650; 

	public const int featDefender = 1649;

public class FEAT

cs

	public const int featResCurse = 1641;

	public const int featAnimalLover = 1640; 
	public const int featMartial = 1635; 
	public const int featFaith = 1636; 

	public const int featInquisitor = 1416; 
	public const int featWitch = 1417; 

	public const int featSevenSense = 1245; 
	public const int featPegasus = 1246; 

	public const int featWhiteVixen = 1414; 
	public const int featFoxMaid = 1415; 

	public const int featCosmicHorror = 1233;

public class FEAT

cs

	public const int featCentaur = 1244;

	public const int featPegasus = 1246; 
	public const int featSevenSense = 1245; 

	public const int featBaby = 1232;

public class FEAT

cs

	public const int featAshborn = 1251;

	public const int featFoxMaid = 1415; 
	public const int featAquatic = 1252; 

	public const int featGoodKarma = 1270; 
	public const int featInquisitor = 1416; 

	public const int featBadKarma = 1271;

public class FEAT

cs

	public const int featGod_wind1 = 1310;

	public const int featAquatic = 1252; 
	public const int featGoodKarma = 1270; 

	public const int featGod_healing1 = 1320;

	public const int featWhiteVixen = 1414; 
	public const int featFairysan = 1413;

	public const int featLuckyCat = 1412;

public class FEAT

cs

	public const int featTourist = 1406;

	public const int featPianist = 1405; 
	public const int featGod_machine1 = 1315;

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

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

	public const int featThief = 1401;

public class FEAT

cs

	public const int featGod_harvest1 = 1325;

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

public List<string> Apply(int a, ElementContainer owner, bool hint = false)

cs
				foreach (string obj in array2)
				{
					string text3 = featRef[num3];
					string text4 = obj; 
					string text4 = obj.Replace(";", ","); 
					if (text3.ToInt() < 0)
					{
						text4 = text4.Replace("+#1", text3);

FOOD

public class FOOD

cs

	public const int food_god = 758;

	public const int food_undead = 709; 
	public const int food_human = 708; 

	public const int food_blood = 710;

public class FOOD

cs

	public const int kirimi = 707;

	public const int food_human = 708; 
	public const int food_undead = 709; 

	public const int gainWeight = 705;

	public static readonly int[] IDS = new int[14]
	{
		764, 758, 709, 710, 700, 757, 702, 703, 704, 701, 
		706, 707, 708, 705
		764, 758, 708, 710, 700, 757, 702, 703, 704, 701, 
		706, 707, 709, 705
	};
}

MUTATION

public class MUTATION

cs
public class MUTATION
{
	public const int mutationRegen = 1516; 
	public const int mutationSkin = 1510;

	public const int mutationSkinN = 1511;

public class MUTATION

cs

	public const int mutationDexN = 1515;

	public const int mutationRegen = 1516; 
	public const int mutationRegenN = 1517;

	public const int mutationStr = 1520;

public class MUTATION

cs

	public static readonly int[] IDS = new int[40]
	{
		1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1520, 1519, 
		1516, 1510, 1511, 1512, 1513, 1514, 1515, 1517, 1520, 1519, 
		1565, 1564, 1563, 1562, 1561, 1560, 1559, 1558, 1557, 1556,
		1555, 1518, 1553, 1552, 1554, 1524, 1521, 1522, 1523, 1551,
		1525, 1526, 1527, 1529, 1530, 1531, 1532, 1533, 1550, 1528

Region

public override void OnAdvanceHour()

cs
			}
		}
	}
	if (ListMobs().Count >= (EClass.debug.enable ? 100 : 6) || EClass.rnd(3) != 0) 
	if (ListMobs().Count >= (EClass.debug.enable ? 100 : 6) || EClass.rnd(EClass.debug.enable ? 1 : 3) != 0) 
	{
		return;
	}

public override void OnAdvanceHour()

cs
		BiomeProfile biome = regionPoint.biome;
		SpawnList list = ((biome.spawn.chara.Count <= 0) ? SpawnList.Get(biome.name, "chara", new CharaFilter
		{
			ShouldPass = (SourceChara.Row s) => s.biome == biome.name || s.biome.IsEmpty() 
		}) : SpawnList.Get(biome.spawn.GetRandomCharaId())); 
			ShouldPass = (SourceChara.Row s) => s.quality < 3 && (s.biome == biome.name || s.biome.IsEmpty()) 
		}) : SpawnList.Get(biome.spawn.GetRandomCharaId(), null, new CharaFilter
		{ 
			ShouldPass = (SourceChara.Row s) => s.quality < 3
		})); 
		Chara chara = null;
		chara = ((EClass.rnd(EClass.debug.enable ? 2 : 50) != 0) ? CharaGen.CreateFromFilter(list, regionPoint.dangerLv) : CharaGen.Create("merchant_travel")); 
		chara = ((EClass.rnd(EClass.debug.enable ? 5 : 50) != 0) ? CharaGen.CreateFromFilter(list, regionPoint.dangerLv) : CharaGen.Create((EClass.rnd(5) == 0) ? "merchant_travel" : "merchant_travel2")); 
		if (chara != null && !(chara.trait is TraitUniqueMonster))
		{
			AddCard(chara, randomPoint);

ShopType

public enum ShopType

cs
	Moyer,
	Curry,
	KeeperOfGarden,
	TravelMerchant 
	TravelMerchant, 
	TravelMerchant2 
}

Trait

public void OnBarter(bool reroll = false)

cs
		owner.AddThing(t);
	}
	t.c_lockLv = 0;
	if (!EClass.world.date.IsExpired(owner.c_dateStockExpire)) 
	if (!EClass.world.date.IsExpired(owner.c_dateStockExpire) || (RestockDay < 0 && owner.isRestocking)) 
	{
		return;
	}

public void OnBarter(bool reroll = false)

cs
		{
			break;
		}
		int num7 = 0; 
		int num4 = 0; 
		foreach (Thing thing10 in c_copyContainer.things)
		{
			if (!owner.trait.CanCopy(thing10))
			{
				continue;
			}
			Thing thing5 = thing10.Duplicate(1); 
			thing5.isStolen = false; 
			thing5.isCopy = true; 
			thing5.c_priceFix = 0; 
			foreach (Element item in thing5.elements.dict.Values.Where((Element e) => e.HasTag("noInherit")).ToList()) 
			Thing thing2 = thing10.Duplicate(1); 
			thing2.isStolen = false; 
			thing2.isCopy = true; 
			thing2.c_priceFix = 0; 
			foreach (Element item in thing2.elements.dict.Values.Where((Element e) => e.HasTag("noInherit")).ToList()) 
			{
				thing5.elements.Remove(item.id); 
				thing2.elements.Remove(item.id); 
			}
			int num8 = 1; 
			int num5 = 1; 
			switch (owner.trait.CopyShop)
			{
			case CopyShopType.Item:
			{
				num8 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50); 
				int[] array2 = new int[3] { 704, 703, 702 }; 
				foreach (int ele in array2) 
				num5 = (1000 + owner.c_invest * 100) / (thing2.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)) 
					if (thing2.HasElement(ele)) 
					{
						num8 = 1; 
						num5 = 1; 
					}
				}
				break;
			}
			case CopyShopType.Spellbook:
				thing5.c_charges = thing10.c_charges; 
				thing2.c_charges = thing10.c_charges; 
				break;
			}
			if (num8 > 1 && thing5.trait.CanStack) 
			if (num5 > 1 && thing2.trait.CanStack) 
			{
				thing5.SetNum(num8); 
				thing2.SetNum(num5); 
			}
			AddThing(thing5); 
			num7++; 
			if (num7 > owner.trait.NumCopyItem) 
			AddThing(thing2); 
			num4++; 
			if (num4 > owner.trait.NumCopyItem) 
			{
				break;
			}

public void OnBarter(bool reroll = false)

cs
		break;
	case ShopType.RedBook:
	{
		for (int k = 0; k < 30; k++) 
		for (int num8 = 0; num8 < 30; num8++) 
		{
			AddThing(ThingGen.CreateFromFilter("shop_seeker"));
		}
		break;
	}
	case ShopType.TravelMerchant2:
		Add("tool_talisman", 1, 0); 
		Add("camera", 1, 0); 
		Add("dreambug", 10, 0); 
		Add("mathammer", 1, 0); 
		Add("unicorn_horn", 1, 0); 
		Add("core_user", 1, 0); 
		Add("generator_hamster1", 1, 0); 
		Add("generator_hamster2", 1, 0); 
		Add("generator_solar", 1, 0); 
		Add("generator_wind", 1, 0); 
		Add("curtainL", 1, 0); 
		Add("censored_item", 1, 0); 
		Add("block_strawberry", 10, 0); 
		Add("block_cream", 10, 0); 
		Add("block_mango", 10, 0); 
		Add("block_cherry", 10, 0); 
		Add("block_chocoplate", 10, 0); 
		Add("block_banana", 10, 0); 
		Add("block_mousse", 10, 0); 
		Add("block_melon", 10, 0); 
		Add("block_kiwi", 10, 0); 
		Add("block_peach", 10, 0); 
		Add("water", 1, 0); 
		if (EClass.rndSeed(EClass.debug.enable ? 1 : 5, owner.uid) == 0) 
		{ 
			Add("hammer_garokk", 1, 0); 
		} 
		if (EClass.rndSeed(EClass.debug.enable ? 1 : 100, owner.uid) == 0) 
		{ 
			Add("water_jure", 1, 0); 
		} 
		break; 
	case ShopType.KeeperOfGarden:
	{
		string[] array = new string[11] 
		string[] array2 = new string[11] 
		{
			"stone_defense", "1325", "1326", "1327", "1328", "1330", "1331", "1332", "1333", "1283",
			"1268"
		};
		foreach (string id2 in array) 
		foreach (string id2 in array2) 
		{
			AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(99));
		}

public void OnBarter(bool reroll = false)

cs
		Add("scroll_alias", 99, 0);
		Add("scroll_biography", 99, 0);
		Add("1329", 1, 0);
		Add("statue_lulu", 1, 0); 
		Add("statue_jure", 1, 0); 
		Add("statue_ehe", 1, 0); 
		break;
	}
	case ShopType.Seed:

public void OnBarter(bool reroll = false)

cs
				break;
			case ShopType.Influence:
			{
				bool num4 = owner.id == "big_sister"; 
				TraitTicketFurniture.SetZone(num4 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99)); 
				if (num4) 
				bool num6 = owner.id == "big_sister"; 
				TraitTicketFurniture.SetZone(num6 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99)); 
				if (num6) 
				{
					Add("littleball", 10, 0);
					if (!owner.Chara.affinity.CanGiveCard())

public void OnBarter(bool reroll = false)

cs
					}
					if (!reroll)
					{
						for (int n = 0; n < 20; n++) 
						for (int m = 0; m < 20; m++) 
						{
							owner.Chara.ModExp(287, 1000);
						}
					}
					Thing thing3 = CraftUtil.MakeLoveLunch(owner.Chara); 
					thing3.elements.SetBase(1229, 1); 
					AddThing(thing3); 
					Thing thing4 = CraftUtil.MakeLoveLunch(owner.Chara); 
					thing4.elements.SetBase(1229, 1); 
					AddThing(thing4); 
					break;
				}
				for (int num5 = 0; num5 < 10; num5++) 
				for (int n = 0; n < 10; n++) 
				{
					Thing thing4 = ThingGen.Create(EClass._zone.IsFestival ? "1123" : ((EClass.rnd(3) == 0) ? "1169" : "1160")); 
					thing4.DyeRandom(); 
					AddThing(thing4); 
					Thing thing5 = ThingGen.Create(EClass._zone.IsFestival ? "1123" : ((EClass.rnd(3) == 0) ? "1169" : "1160")); 
					thing5.DyeRandom(); 
					AddThing(thing5); 
				}
				if (EClass._zone is Zone_Exile)
				{
					for (int num6 = 0; num6 < 30; num6++) 
					for (int num7 = 0; num7 < 30; num7++) 
					{
						Add("1235", 1, -1);
						Add("1236", 1, -1);

public void OnBarter(bool reroll = false)

cs
				AddThing(ThingGen.CreatePerfume(9503, 5));
				for (int l = 0; l < 5; l++)
				{
					Thing thing2 = ThingGen.CreateFromCategory("seasoning").SetNum(10); 
					thing2.elements.SetBase(2, 40); 
					thing2.c_priceFix = 1000; 
					AddThing(thing2); 
					Thing thing3 = ThingGen.CreateFromCategory("seasoning").SetNum(10); 
					thing3.elements.SetBase(2, 40); 
					thing3.c_priceFix = 1000; 
					AddThing(thing3); 
				}
				break;
			}

public void OnBarter(bool reroll = false)

cs
					num3 = 50;
					break;
				case ShopType.TravelMerchant:
				case ShopType.TravelMerchant2:
					num2 /= 3f;
					num3 = 30;
					break;

public void OnBarter(bool reroll = false)

cs
				{
					continue;
				}
				string[] array = item3.row.recipeKey; 
				for (int m = 0; m < array.Length; m++) 
				string[] array2 = item3.row.recipeKey; 
				for (int k = 0; k < array2.Length; k++) 
				{
					if (array[m] == ShopType.ToString()) 
					if (array2[k] == ShopType.ToString()) 
					{
						NoRestock(ThingGen.CreateRecipe(item3.id));
						break;

TraitMerchantTravel

public override int ShopLv

cs
{
	get
	{
		if (!base.owner.IsPCFactionOrMinion) 
		if (!base.owner.IsPCFactionOrMinion && !EClass._zone.IsPCFactionOrTent) 
		{
			return base.owner.LV;
		}

+TraitMerchantTravel2

File Created
cs
public class TraitMerchantTravel2 : TraitMerchantTravel
{
	public override CurrencyType CurrencyType => CurrencyType.Money2;

	public override ShopType ShopType => ShopType.TravelMerchant2;

	public override int CostRerollShop => 0;

	public override int RestockDay => -1;
}

WidgetMouseover

public void Refresh()

cs
	}
	else if (card != null)
	{
		text = card.GetHoverText(); 
		if (roster == null) 
		if (EMono._zone.IsRegion && !card.IsPCFactionOrMinion) 
		{
			int count = EMono.scene.mouseTarget.cards.Count; 
			if (count > 1) 
			{ 
				text += "otherCards".lang((count - 1).ToString() ?? ""); 
			} 
			text = "???"; 
		}
		text += card.GetHoverText2(); 
		if (roster == null && mouseTarget.target != card) 
		else
		{
			text = text + Environment.NewLine + mouseTarget.target.InspectName; 
			text = card.GetHoverText(); 
			if (roster == null) 
			{ 
				int count = EMono.scene.mouseTarget.cards.Count; 
				if (count > 1) 
				{ 
					text += "otherCards".lang((count - 1).ToString() ?? ""); 
				} 
			} 
			text += card.GetHoverText2(); 
			if (roster == null && mouseTarget.target != card) 
			{ 
				text = text + Environment.NewLine + mouseTarget.target.InspectName; 
			} 
		}
	}
	else if (mouseTarget.target != null)

ZonePreEnterEncounter

public override void Execute()

cs
	{
		List<Chara> list = new List<Chara>();
		Chara leader = null;
		if (mob.id == "merchant_travel") 
		if (mob.trait is TraitMerchantTravel) 
		{
			lv = Mathf.Max(20, EClass.pc.FameLv * 5); 
			lv = Mathf.Max(20, EClass.pc.FameLv * 2); 
			Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(2, 5, requireLos: false, allowChara: false);
			for (int i = 0; i < EClass.rndHalf(12); i++)
			{

public override void Execute()

cs
					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 = EClass._zone.SpawnMob(randomPointInRadius2, SpawnSetting.Mob(source.RandomItem(), null, lv * 2 / 3)); 
						Chara chara2 = chara;
						Hostility hostility2 = (chara.c_originalHostility = Hostility.Neutral);
						chara2.hostility = hostility2;