Skip to content

EA 23.118 Nightly (Bring back NYAIGHTLIES NOA!)

April 1, 2025

5 files modified.

Important Changes

None.

DramaCustomSequence

@@ -110,166 +110,166 @@ public void Build(Chara c)

cs
			});
		}
	}
	if (c.IsPCParty) 
	if (c.IsPCParty && !c.isSummon) 
	{
		if (!c.isSummon) 
		if (EClass._zone.IsPCFaction && c.homeBranch != EClass._zone.branch) 
		{
			if (EClass._zone.IsPCFaction && c.homeBranch != EClass._zone.branch) 
			{ 
				Choice2("daMakeHome", "_makeHome"); 
			} 
			if (c.host == null && c.homeZone != null) 
			{ 
				Choice2("daLeaveParty".lang(c.homeZone.Name), "_leaveParty"); 
			} 
			Choice2("daMakeHome", "_makeHome"); 
		} 
		if (c.host == null && c.homeZone != null) 
		{ 
			Choice2("daLeaveParty".lang(c.homeZone.Name), "_leaveParty"); 
		}
	}
	else if (c.memberType != FactionMemberType.Livestock && !c.IsGuest()) 
	if (c.memberType != FactionMemberType.Livestock && !c.IsGuest()) 
	{
		if (c.trait.CanGuide) 
		Choice2("daQuest".lang(c.quest?.GetTitle() ?? ""), "_quest").SetCondition(() => c.quest != null); 
		if (c.trait is TraitGuard) 
		{
			foreach (Quest item3 in EClass.game.quests.list) 
			EClass.pc.things.Foreach(delegate(Thing _t) 
			{
				if (!item3.IsRandomQuest) 
				if (_t.isLostProperty) 
				{
					continue; 
					Choice2("daLostProperty".lang(_t.Name), "_lostProperty").SetOnClick(delegate
					{ 
						destThing = _t; 
					}); 
				}
				Chara dest = ((item3.chara != null && item3.chara.IsAliveInCurrentZone) ? item3.chara : null); 
				if (dest != null) 
			}); 
		} 
		if (!c.IsPCParty || EClass._zone.IsPCFaction) 
		{ 
			if (c.trait.CanGuide) 
			{ 
				foreach (Quest item3 in EClass.game.quests.list) 
				{
					Choice2("daGoto".lang(dest.Name, item3.GetTitle() ?? ""), "_goto").SetOnClick(delegate
					if (!item3.IsRandomQuest) 
					{
						destCard = dest; 
					}); 
						continue; 
					} 
					Chara dest = ((item3.chara != null && item3.chara.IsAliveInCurrentZone) ? item3.chara : null); 
					if (dest != null) 
					{ 
						Choice2("daGoto".lang(dest.Name, item3.GetTitle() ?? ""), "_goto").SetOnClick(delegate
						{ 
							destCard = dest; 
						}); 
					} 
					if (!(item3 is QuestDeliver { IsDeliver: not false } questDeliver2) || questDeliver2.DestZone != EClass._zone || !EClass._zone.dictCitizen.ContainsKey(questDeliver2.uidTarget)) 
					{ 
						continue; 
					} 
					Chara dest2 = EClass._zone.FindChara(questDeliver2.uidTarget); 
					if (dest2 != null) 
					{ 
						Choice2("daGoto".lang(dest2.Name, item3.GetTitle() ?? ""), "_goto").SetOnClick(delegate
						{ 
							destCard = dest2; 
						}); 
					} 
				}
				if (!(item3 is QuestDeliver { IsDeliver: not false } questDeliver2) || questDeliver2.DestZone != EClass._zone || !EClass._zone.dictCitizen.ContainsKey(questDeliver2.uidTarget)) 
				if (GetListGuide().Count > 0) 
				{
					continue; 
					Choice2("daGuide", "_Guide"); 
				}
				Chara dest2 = EClass._zone.FindChara(questDeliver2.uidTarget); 
				if (dest2 != null) 
			} 
			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.SlaverType != 0) 
			{ 
				Choice2(c.trait.TextNextRestockPet, "_buySlave").DisableSound(); 
			} 
			if (c.trait.CopyShop != 0) 
			{ 
				Choice2(("daCopy" + c.trait.CopyShop).lang(c.trait.NumCopyItem.ToString() ?? ""), "_copyItem").DisableSound(); 
			} 
			if (c.trait.HaveNews && c.GetInt(33) + 10080 < EClass.world.date.GetRaw()) 
			{ 
				Choice2("daNews", "_news"); 
			} 
			if (!flag4 && !EClass._zone.IsInstance && !c.IsPCFaction && c.trait.CanBout && c.IsGlobal && c.GetInt(59) + 10080 < EClass.world.date.GetRaw()) 
			{ 
				Choice2("daBout", "_bout"); 
			} 
			if (c.isDrunk || EClass.debug.enable) 
			{ 
				Choice2(flag2 ? "daBird" : "daTail", "_tail"); 
			} 
			if (c.trait.CanRevive) 
			{ 
				Choice2("daRevive", "_revive").DisableSound(); 
			} 
			if (!c.trait.IDTrainer.IsEmpty() && !EClass._zone.IsUserZone && (Guild.GetCurrentGuild() == null || Guild.GetCurrentGuild().relation.IsMember())) 
			{ 
				Choice2("daTrain", "_train").DisableSound(); 
			} 
			if (c.trait.CanWhore) 
			{ 
				Choice2(flag2 ? "daBirdBuy" : "daTailBuy", "_whore"); 
			} 
			if (c.trait.CanHeal) 
			{ 
				Choice2("daHeal", "_heal"); 
			} 
			if (c.trait.CanServeFood) 
			{ 
				Choice2("daFood", "_food"); 
			} 
			if (c.trait is TraitInformer) 
			{ 
				Choice2("daSellFame", "_sellFame"); 
			} 
			if (EClass._zone.AllowInvest) 
			{ 
				if (c.trait.CanInvestTown && Guild.GetCurrentGuild() == null) 
				{
					Choice2("daGoto".lang(dest2.Name, item3.GetTitle() ?? ""), "_goto").SetOnClick(delegate
					{ 
						destCard = dest2; 
					}); 
					Choice2("daInvest", "_investZone"); 
				} 
				if (c.trait.CanInvest) 
				{ 
					Choice2("daInvest", "_investShop"); 
				}
			}
			if (GetListGuide().Count > 0) 
			if (c.trait.CanIdentify) 
			{
				Choice2("daGuide", "_Guide"); 
				Choice2("daIdentify", "_identify").DisableSound(); 
				Choice2("daIdentifyAll", "_identifyAll"); 
				Choice2("daIdentifySP", "_identifySP").DisableSound(); 
			}
		} 
		Choice2("daQuest".lang(c.quest?.GetTitle() ?? ""), "_quest").SetCondition(() => c.quest != null); 
		if (c.trait is TraitGuard) 
		{ 
			EClass.pc.things.Foreach(delegate(Thing _t) 
			if (c.trait.CanPicklock) 
			{
				if (_t.isLostProperty) 
				if (c.Evalue(280) < 20) 
				{
					Choice2("daLostProperty".lang(_t.Name), "_lostProperty").SetOnClick(delegate
					c.elements.SetBase(280, 20); 
				} 
				foreach (Thing item4 in EClass.pc.things.List((Thing a) => a.c_lockLv > 0, onlyAccessible: true)) 
				{ 
					Thing _t3 = item4; 
					Choice2("daPicklock".lang(_t3.Name), "_picklock").SetOnClick(delegate
					{
						destThing = _t; 
						destThing = _t3; 
					});
				}
			}); 
		} 
		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.SlaverType != 0) 
		{ 
			Choice2(c.trait.TextNextRestockPet, "_buySlave").DisableSound(); 
		} 
		if (c.trait.CopyShop != 0) 
		{ 
			Choice2(("daCopy" + c.trait.CopyShop).lang(c.trait.NumCopyItem.ToString() ?? ""), "_copyItem").DisableSound(); 
		} 
		if (c.trait.HaveNews && c.GetInt(33) + 10080 < EClass.world.date.GetRaw()) 
		{ 
			Choice2("daNews", "_news"); 
		} 
		if (!flag4 && !EClass._zone.IsInstance && !c.IsPCFaction && c.trait.CanBout && c.IsGlobal && c.GetInt(59) + 10080 < EClass.world.date.GetRaw()) 
		{ 
			Choice2("daBout", "_bout"); 
		} 
		if (c.isDrunk || EClass.debug.enable) 
		{ 
			Choice2(flag2 ? "daBird" : "daTail", "_tail"); 
		} 
		if (c.trait.CanRevive) 
		{ 
			Choice2("daRevive", "_revive").DisableSound(); 
		} 
		if (!c.trait.IDTrainer.IsEmpty() && !EClass._zone.IsUserZone && (Guild.GetCurrentGuild() == null || Guild.GetCurrentGuild().relation.IsMember())) 
		{ 
			Choice2("daTrain", "_train").DisableSound(); 
		} 
		if (c.trait.CanWhore) 
		{ 
			Choice2(flag2 ? "daBirdBuy" : "daTailBuy", "_whore"); 
		} 
		if (c.trait.CanHeal) 
		{ 
			Choice2("daHeal", "_heal"); 
		} 
		if (c.trait.CanServeFood) 
		{ 
			Choice2("daFood", "_food"); 
		} 
		if (c.trait is TraitInformer) 
		{ 
			Choice2("daSellFame", "_sellFame"); 
		} 
		if (EClass._zone.AllowInvest) 
		{ 
			if (c.trait.CanInvestTown && Guild.GetCurrentGuild() == null) 
			{ 
				Choice2("daInvest", "_investZone"); 
			}
			if (c.trait.CanInvest) 
			if (c.trait is TraitBanker) 
			{
				Choice2("daInvest", "_investShop"); 
				Choice2("daDeposit", "_deposit"); 
			}
		} 
		if (c.trait.CanIdentify) 
		{ 
			Choice2("daIdentify", "_identify").DisableSound(); 
			Choice2("daIdentifyAll", "_identifyAll"); 
			Choice2("daIdentifySP", "_identifySP").DisableSound(); 
		} 
		if (c.trait.CanPicklock) 
		{ 
			if (c.Evalue(280) < 20) 
			if (c.IsMaid || (c.trait.CanInvestTown && (EClass._zone.source.faction == "mysilia" || EClass._zone.IsPCFaction))) 
			{
				c.elements.SetBase(280, 20); 
				Choice2("daExtraTax", "_extraTax"); 
			}
			foreach (Thing item4 in EClass.pc.things.List((Thing a) => a.c_lockLv > 0, onlyAccessible: true)) 
			if ((c.trait is TraitMiko_Mifu || c.trait is TraitMiko_Nefu || c.trait is TraitEureka) && EClass.world.date.IsExpired(c.c_dateStockExpire)) 
			{
				Thing _t3 = item4; 
				Choice2("daPicklock".lang(_t3.Name), "_picklock").SetOnClick(delegate
				{ 
					destThing = _t3; 
				}); 
				Choice2("daBlessing", "_blessing"); 
			}
		}
		if (c.trait is TraitBanker) 
		{ 
			Choice2("daDeposit", "_deposit"); 
		} 
		if (c.IsMaid || (c.trait.CanInvestTown && (EClass._zone.source.faction == "mysilia" || EClass._zone.IsPCFaction))) 
		{ 
			Choice2("daExtraTax", "_extraTax"); 
		} 
		if ((c.trait is TraitMiko_Mifu || c.trait is TraitMiko_Nefu || c.trait is TraitEureka) && EClass.world.date.IsExpired(c.c_dateStockExpire)) 
		{ 
			Choice2("daBlessing", "_blessing"); 
		} 
	}
	if (c.IsHomeMember())
	{

ELEMENT

@@ -1035,9 +1035,24 @@ public virtual Act.Cost GetCost(Chara c)

cs
	{
		result2.type = Act.CostType.SP;
		result2.cost = source.cost[0];
		if (source.id == 6020) 
		switch (source.id) 
		{
		case 6020: 
			result2.cost = c.stamina.max / 3 + 10;
			break; 
		case 6664: 
		{ 
			int num2 = -2; 
			foreach (BodySlot slot in c.body.slots) 
			{ 
				if (slot.thing != null && slot.thing.IsMeleeWeapon) 
				{ 
					num2++; 
				} 
			} 
			result2.cost += num2 * 2; 
			break; 
		} 
		}
	}
	if (!c.IsPC && result2.cost > 2)

Trait

@@ -1784,7 +1784,7 @@ public void OnBarter()

cs
				for (int i = 0; (float)i < num; i++)
				{
					Thing thing = CreateStock();
					if ((!thing.trait.IsNoShop || (ShopType == ShopType.LoytelMart && EClass.player.flags.loytelMartLv >= 2)) && (!(thing.trait is TraitRod) || thing.c_charges != 0) && thing.GetPrice() > 0) 
					if ((!thing.trait.IsNoShop || (ShopType == ShopType.LoytelMart && (EClass.debug.enable || EClass.player.flags.loytelMartLv >= 2))) && (!(thing.trait is TraitRod) || thing.c_charges != 0) && thing.GetPrice() > 0) 
					{
						t.AddThing(thing);
					}

@@ -1869,7 +1869,7 @@ public void OnBarter()

cs
					Add("ticket_armpillow", 1, 0);
					Add("ticket_champagne", 1, 0);
				}
				for (int num6 = 0; num6 < (EClass.debug.enable ? 30 : 3); num6++) 
				for (int num6 = 0; num6 < 3; num6++) 
				{
					if (EClass.rnd(5) == 0)
					{

@@ -2029,9 +2029,9 @@ public Thing CreateStock()

cs
			{
			case ShopType.Dye:
			{
				Thing thing4 = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30)); 
				thing4.ChangeMaterial(EClass.sources.materials.rows.RandomItem().alias); 
				return thing4; 
				Thing thing = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30)); 
				thing.ChangeMaterial(EClass.sources.materials.rows.RandomItem().alias); 
				return thing; 
			}
			case ShopType.GeneralExotic:
				return FromFilter("shop_generalExotic");

@@ -2053,12 +2053,12 @@ public Thing CreateStock()

cs
				return FromFilter("shop_magic");
			case ShopType.Ecopo:
			{
				Thing thing = TraitSeed.MakeRandomSeed(enc: true); 
				Thing thing3 = TraitSeed.MakeRandomSeed(enc: true); 
				if (EClass.rnd(2) == 0)
				{
					TraitSeed.LevelSeed(thing, (thing.trait as TraitSeed).row, 1); 
					TraitSeed.LevelSeed(thing3, (thing3.trait as TraitSeed).row, 1); 
				}
				return thing; 
				return thing3; 
			}
			case ShopType.Healer:
			{

@@ -2091,10 +2091,10 @@ public Thing CreateStock()

cs
			case ShopType.Milk:
				if (EClass._zone is Zone_Nefu && EClass.rnd(2) == 0)
				{
					Thing thing3 = ThingGen.Create("milk"); 
					thing3.MakeRefFrom(EClass.sources.charas.rows.Where((SourceChara.Row r) => r.race == "mifu" || r.race == "nefu").RandomItem().model); 
					Debug.Log(thing3); 
					return thing3; 
					Thing thing4 = ThingGen.Create("milk"); 
					thing4.MakeRefFrom(EClass.sources.charas.rows.Where((SourceChara.Row r) => r.race == "mifu" || r.race == "nefu").RandomItem().model); 
					Debug.Log(thing4); 
					return thing4; 
				}
				return Create("milk");
			case ShopType.Map:

@@ -2191,12 +2191,28 @@ public Thing CreateStock()

cs
					{
						return Create("water").SetPriceFix(1000);
					}
					if (EClass.rnd(EClass.debug.enable ? 20 : 1000) == 0) 
					if (EClass.rnd(1000) == 0) 
					{
						return Create("1165");
					}
				}
				_ = 2; 
				if ((loytelMartLv >= 2 || EClass.debug.enable) && EClass.rnd(10) == 0) 
				{ 
					SourceElement.Row row = EClass.sources.elements.rows.Where((SourceElement.Row r) => r.tag.Contains("loytelMart") && ShopLv + 10 >= r.LV).ToList().RandomItemWeighted((SourceElement.Row r) => r.chance); 
					switch ((from _s in row.thing.ToCharArray() 
						where _s != ' '
						select _s).RandomItem()) 
					{ 
					case 'B': 
						return ThingGen.CreateSpellbook(row.id); 
					case 'P': 
						return ThingGen.CreatePotion(row.id); 
					case 'R': 
						return ThingGen.CreateRod(row.id); 
					case 'S': 
						return ThingGen.CreateScroll(row.id); 
					} 
				} 
				return FromFilter("shop_junk");
			}
			case ShopType.Junk:

TraitLoytelMart

@@ -2,7 +2,7 @@ public class TraitLoytelMart : TraitVendingMachine

cs
{
	public int LV => EClass.player.flags.loytelMartLv;

	public override int ShopLv => LV * 10 + ((LV <= 0) ? 1 : 10); 
	public override int ShopLv => LV * 10 + ((LV <= 0) ? 1 : 10) + (EClass.debug.enable ? 50 : 0); 

	public override bool IsHomeItem => true;

ZoneEventSubdue

@@ -1,4 +1,5 @@

cs
using Newtonsoft.Json;
using UnityEngine; 

public class ZoneEventSubdue : ZoneEventQuest
{

@@ -13,7 +14,7 @@ public override void OnVisit()

cs
{
	if (!EClass.game.isLoading)
	{
		EClass._zone._dangerLv = base.quest.DangerLv; 
		EClass._zone._dangerLv = Mathf.Max(base.quest.DangerLv - 5, 1); 
		Spawn(4 + base.quest.difficulty * 2 + EClass.rnd(5));
		AggroEnemy(15);
		EClass._zone.SetBGM(102);