Skip to content

EA 23.283 Nightly Patch 2

March 6, 2026

8 files modified.

Important Changes

Possible breaking changes. Click the filename to view the chunk.

ModManager (1)

cs
public void ImportModDialogs() 
public void ImportAllModDialogs() 

ActEffect

void AddCon<T>(int rate, int power) where T : Condition

cs
			tc.Say("faith_bless", tc, faith.Name);
		}
		tc.ModExp(306, power * 10);
		tc.ModExp(85, power * 10); 
		if (tc.elements.Base(85) >= tc.elements.Value(306)) 
		if (tc.elements.Base(85) < tc.elements.Value(306)) 
		{
			tc.elements.SetBase(85, tc.elements.Value(306)); 
			tc.ModExp(85, power * 10); 
		}
		break;
	}

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			Redirect(EffectId.BuffStats, BlessedState.Cursed, new ActRef
			{
				aliasEle = "STR"
				n1 = "STR"
			});
		}
		break;

Chara

public void ApplyRace(bool remove = false)

cs
		}
		body.RefreshBodyParts();
		elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV, remove, applyFeat: true);
		if (!remove && race.id == "bike" && id != "bike_cub") 
		if (!remove) 
		{
			SetFeat(1423, (id == "chara" || id == "player") ? 10 : (1 + EClass.rnd(10))); 
			if (race.id == "bike" && id != "bike_cub") 
			{ 
				SetFeat(1423, (id == "chara" || id == "player") ? 10 : (1 + EClass.rnd(10))); 
			} 
			if (race.id == "horse" && EClass.rnd(5) == 0) 
			{ 
				SetFeat(1423, 1 + EClass.rnd(5)); 
			} 
		}
	}

ConPeaky

public override void Tick()

cs
	}
	int num = ec.Value(79);
	int num2 = owner.Evalue(1423) * 10;
	if (num < num2) 
	if (num >= num2) 
	{
		ec.ModBase(79, Mathf.Clamp(num2 / 10, 1, num2 - num)); 
		if (ec.Value(79) == num2) 
		return; 
	} 
	ec.ModBase(79, Mathf.Clamp(num2 / 10, 1, num2 - num)); 
	if (ec.Value(79) == num2) 
	{ 
		owner.PlaySound("bike_kick"); 
		if (owner.host != null) 
		{
			owner.PlaySound("bike_kick"); 
			owner.host.ModExp((owner.host.ride == owner) ? 226 : 227, owner.Evalue(1423) * 20); 
		}
	}
}

ID_Achievement

public enum ID_Achievement

cs
	NINO,
	CHURYU3,
	DEMITAS,
	KETTLE 
	KETTLE, 
	FAITH_HEALING, 
	ONEV 
}

ModManager

public override void Init(string path, string defaultPackage = "_Elona")

cs
			{
				ImportSourceLocalizations(lang as string);
			}
			ImportModDialogs(); 
			ImportAllModDialogs(); 
		});
	}

public void ImportSourceLocalizations(string lang)

cs
		{
			continue;
		}
		if (Lang.IsBuiltin(modPackage.Mapping.SourceLangMod) && Lang.IsBuiltin(lang)) 
		if (Lang.IsBuiltin(lang)) 
		{
			break;
		}

public void ImportAllModSourceSheets()

cs
{
	try
	{
		SourceCache.InvalidateCacheVersion(); 
		SourceImporter.HotInit(new SourceData[2]
		{
			EClass.sources.elements,

public void ImportAllModSourceSheets()

cs
			}
		}
		ModUtil.sourceImporter.ImportFilesCached(list);
		SourceCache.FinalizeCache(); 
		SourceCache.InvalidateCacheBlobs(); 
		SourceCache.ClearDetail(); 
	}
	catch (Exception message)
	{

public void ImportAllModSourceSheets()

cs
		Debug.Log("#source finished importing workbooks");
	}

	public void ImportModDialogs() 
	public void ImportAllModDialogs() 
	{
		Lang.extraExcelDialogs = new HashSet<string>(PathComparer.Default);
		Lang.excelDialog = null;

public IEnumerator RefreshMods(Action onComplete, bool syncMods)

cs
		if (mappedPackages.TryGetValue(item.id, out var value) && value.isInPackages)
		{
			value.hasPublishedPackage = true;
			mappedPackages[item.id] = item as ModPackage; 
		}
	}
	packages.RemoveAll((BaseModPackage p) => p.hasPublishedPackage); 
	_loading.Log($"Total number of mods:{packages.Count}");
	_loading.Log("Activating Mods...");
	yield return awaiter;
	ActivatePackages();
	foreach (BaseModPackage package in packages) 
	{ 
		if (package.activated) 
		{ 
			mappedPackages[package.id] = package as ModPackage; 
		} 
	} 
	BaseModManager.isInitialized = true;
	yield return awaiter;
	onComplete?.Invoke();

ModUtil

public static SoundData LoadSoundData(FileInfo soundFile)

cs
	string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(soundFile.FullName);
	string fullName = soundFile.FullName;
	AudioType audioType = GetAudioType(soundFile.Extension);
	bool stream = fileNameWithoutExtension.StartsWith("BGM/") && audioType == AudioType.OGGVORBIS; 
	bool stream = fullName.NormalizePath().Contains("/BGM/") && audioType == AudioType.OGGVORBIS; 
	using UnityWebRequest unityWebRequest = AudioClipStream.GetAudioClip("file://" + fullName, audioType, compressed: false, stream);
	unityWebRequest.SendWebRequest();
	Stopwatch stopwatch = Stopwatch.StartNew();

SourceImporter

where c.IsDirtyOrEmpty

cs
			hashSet.Add(sourceData2);
		}
	}
	SourceCache.FinalizeCache(); 
	SourceCache.ClearDetail(); 
	if (resetData)
	{
		HotInit(hashSet);

Trait

public void OnBarter(bool reroll = false)

cs
		Add("deed_move", 2 + EClass.rnd(5), 0);
		Add("deed_wedding", 1, 0);
		Add("deed_divorce", 1, 0);
		Add("deed_lostring", 1, 0); 
		Add("license_illumination", 1, 0);
		Add("license_void", 1, 0);
		Add("license_adv", 1, 0);