EA 23.350 Nightly โ
September 28, 2026
30 files modified. 3 new files created.
Important Changes โ
None.
ActEffect โ
void AddCon<T>(int rate, int p2) where T : Condition
chara2.hp = chara2.MaxHP / 2;
}
EClass._zone.AddCard(chara2, point);
if (flag)
if (actRef.n1 == "special2")
{
chara2.SetHostility(Hostility.Enemy);
}
else if (flag)
{
Chara chara3 = chara2;
Hostility hostility = (chara2.c_originalHostility = Hostility.Enemy);
chara3.hostility = hostility;
chara2.SetHostility(Hostility.Enemy);
}
else if (!(chara2.id == "cocoon") && (!(actRef.n1 == "monster") || actRef.refThing == null))
else if (!(actRef.n1 == "monster") || actRef.refThing == null)
{
chara2.MakeMinion(CC);
}void AddCon<T>(int rate, int p2) where T : Condition
{
foreach (Point item4 in EClass._map.ListPointsInCircle(cc.pos, 6f, mustBeWalkable: false, los: false))
{
foreach (Chara chara4 in item4.Charas)
foreach (Chara chara3 in item4.Charas)
{
if (chara4.ResistLv(957) <= 0)
if (chara3.ResistLv(957) <= 0)
{
chara4.AddCondition<ConParalyze>(power);
chara3.AddCondition<ConParalyze>(power);
}
}
}BuildMenu โ
{
foreach (RecipeSource item in RecipeManager.list)
{
if (item.noListing || item.isBridgePillar || (!EMono.debug.godBuild && !item.alwaysKnown && !EMono.player.recipes.knownRecipes.ContainsKey(item.id)) || (!item.row.GetSearchName(jp: false).Contains(s) && !item.row.GetSearchName(jp: true).Contains(s) && !item.id.Contains(s) && !item.row.category.Contains(s)))
if (!item.ShouldList() || item.isBridgePillar || (!EMono.debug.godBuild && !item.alwaysKnown && !EMono.player.recipes.knownRecipes.ContainsKey(item.id)) || (!item.row.GetSearchName(jp: false).Contains(s) && !item.row.GetSearchName(jp: true).Contains(s) && !item.id.Contains(s) && !item.row.category.Contains(s)))
{
continue;
} continue;
}
Recipe recipe2 = Recipe.Create(thing);
if (!recipe2.source.noListing)
if (recipe2.source.ShouldList())
{
if (recipe2 == null)
{if (t.trait.CanBeDropped && !t.trait.CanOnlyCarry && !t.isEquipped && (t.source.name.Contains(s) || t.source.name_JP.Contains(s) || t.NameOne.Contains(s)))
{
Recipe recipe3 = Recipe.Create(t);
if (!recipe3.source.noListing)
if (recipe3.source.ShouldList())
{
if (recipe3 == null)
{public void RefreshCategory(string cat)
}
foreach (RecipeSource item in RecipeManager.list)
{
if (EMono.debug.godBuild || !(item.row.GetAlias != "block_invisi") || (!item.noListing && !item.row.tileType.EditorTile && EMono.player.recipes.IsKnown(item.id) && (item.row.factory.Length == 0 || !(item.row.factory[0] == "none"))))
if (EMono.debug.godBuild || !(item.row.GetAlias != "block_invisi") || (item.ShouldList() && !item.row.tileType.EditorTile && EMono.player.recipes.IsKnown(item.id) && (item.row.factory.Length == 0 || !(item.row.factory[0] == "none"))))
{
counts[item.recipeCat]++;
if (!(item.recipeCat != cat))Card โ
public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool selโฆ)
return 25000;
}
break;
case CurrencyType.Money3:
switch (id)
{
case "1282":
return 1;
case "1386":
return 5;
case "scroll_random":
if (refVal == 8288)
{
return 3;
}
break;
case "spellbook":
if (refVal == 9155)
{
return 1;
}
break;
}
break;
case CurrencyType.Plat:
switch (id)
{public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool selโฆ)
case CurrencyType.Money2:
p *= 0.004999999888241291;
break;
case CurrencyType.Money3:
p *= 9.999999747378752E-05;
break;
default:
if (IsIdentified || (this.trait is TraitErohon && !sell) || priceType == PriceType.Tourism)
{Currency โ
public static string ToID(CurrencyType currency)
CurrencyType.Influence => "influence",
CurrencyType.Casino_coin => "casino_coin",
CurrencyType.Ecopo => "ecopo",
CurrencyType.Money3 => "money3",
CurrencyType.Plat => "plat",
_ => "money",
};CurrencyType โ
BranchMoney,
Influence,
Casino_coin,
BlueCapsule
BlueCapsule,
Money3
}DramaOutcome โ
public void reward_stone_dream()
}
}
public void reward_sorin()
{
if (EMono.pc.body.GetSlot(46, onlyEmpty: false) == null)
{
CoreDebug._AddBodyPart(CoreDebug.BodyCode.relic);
}
if (!EMono.player.recipes.IsKnown("relic_lesser") || EMono.debug.enable)
{
EMono.player.recipes.Add("relic_lesser");
}
SE.Play("godbless");
EMono.pc.PlayEffect("aura_heaven");
}
public static bool If(DramaChoice item, Chara c)
{
_ = item.IF.Split('/')[0] == "costHire";Game โ
}
}
});
if (version.nightly)
{
if (EClass.game.quests.IsCompleted("into_darkness"))
{
if (EClass.pc.body.GetSlot(46, onlyEmpty: false) == null)
{
CoreDebug._AddBodyPart(CoreDebug.BodyCode.relic);
}
if (!player.recipes.IsKnown("relic_lesser") || EClass.debug.enable)
{
player.recipes.Add("relic_lesser");
}
}
}
else if (EClass.pc.body.GetSlot(46, onlyEmpty: false) != null)
{
CoreDebug._RemoveBodyPart(CoreDebug.BodyCode.relic);
}
if (version.IsBelow(0, 23, 345))
{
Zone zone = spatials.Find("oldkeep");+IModConfig โ
File Created
public interface IModConfig
{
void OnBuildConfig(UINote note);
}InvOwner โ
public virtual void BuildUICurrency(UICurrency uiCurrency, bool canReroll = falsโฆ)
money2 = (currency == CurrencyType.Money2),
influence = (currency == CurrencyType.Influence),
casino = (currency == CurrencyType.Casino_coin),
ecopo = (currency == CurrencyType.Ecopo)
ecopo = (currency == CurrencyType.Ecopo),
mandrake = (currency == CurrencyType.Money3)
});
}
}public virtual void OnWriteNote(ButtonGrid button, UINote n)
string id = IDCostIcon(t);
int price = transaction.GetPrice();
uIItem.text1.SetText(Lang._currency(price), transaction.IsValid() ? FontColor.Good : FontColor.Bad);
uIItem.image1.sprite = (Trader.UseHomeResource ? Trader.homeResource.Sprite : SpriteSheet.Get(id));
uIItem.image1.sprite = (Trader.UseHomeResource ? Trader.homeResource.Sprite : (SpriteSheet.Get(id) ?? EClass.sources.cards.map.TryGetValue(IDCurrency)?.GetSprite()));
uIItem.image1.SetNativeSize();
}
}
}ItemMod โ
public UIButton buttonColor;
public UIButton buttonConfig;
public Image imageActive;
public Image imageLock;
public Image imageGroup;
public Image imageMember;
public Widget.Config config;
public BaseModPackage package;LayerMod โ
public void OnPointerEnter(PointerEventData eventData)
private UIButton buttonCollapse;
private Action<ModPackage, ItemMod> onInstantiate;
private BaseModPackage panelTarget;
private float timerSearch;private void Move(object row, int a)
goto IL_00b8;
}
}
goto IL_00d2;
goto IL_00de;
IL_00b8:
if (num2)
{
if (a > 0)
{
LeaveGroup(baseModPackage);
}
baseModPackage.group = ((a > 0) ? null : modGroup2);
OnReorder();
return;
}
goto IL_00d2;
IL_00d2:
goto IL_00de;
IL_00de:
MoveTo(row, obj);
}
private void MoveTo(object row, object target)
{
List<BaseModPackage> packages = manager.packages;
List<ModGroup> emptyGroups = manager.emptyGroups;
List<object> items = this.list.items;
ModGroup modGroup = row as ModGroup;
BaseModPackage baseModPackage = target as BaseModPackage;private void MoveTo(object row, object target)
return;
}
bool flag = items.IndexOf(row) < items.IndexOf(target);
List<BaseModPackage> list = ((modGroup != null) ? Members(modGroup) : new List<BaseModPackage> { (BaseModPackage)row });
if (list.Count == 0)
List<BaseModPackage> block = ((modGroup != null) ? Members(modGroup) : new List<BaseModPackage> { (BaseModPackage)row });
bool flag2 = emptyGroups.Contains(modGroup2);
if (block.Count == 0)
{
SE.BeepSmall();
RefreshLists();
(BaseModPackage, int) tuple = (modGroup.after, emptyGroups.IndexOf(modGroup));
emptyGroups.Remove(modGroup);
if (flag2)
{
modGroup.after = modGroup2.after;
emptyGroups.Insert(emptyGroups.IndexOf(modGroup2) + (flag ? 1 : 0), modGroup);
}
else
{
List<BaseModPackage> list = ((modGroup2 != null) ? Members(modGroup2) : null);
BaseModPackage edge = ((list == null || list.Count <= 0) ? baseModPackage : (flag ? list[^1] : list[0]));
modGroup.after = (flag ? edge : packages.TakeWhile((BaseModPackage p) => p != edge).LastOrDefault((BaseModPackage p) => !p.builtin));
emptyGroups.Insert(GetGroupIndex(modGroup.after, !flag), modGroup);
}
BaseModPackage after = modGroup.after;
int num = emptyGroups.IndexOf(modGroup);
var (baseModPackage2, num2) = tuple;
if (after == baseModPackage2 && num == num2)
{
SE.BeepSmall();
RefreshLists();
}
else
{
OnReorder(restart: false);
}
return;
}
int num = packages.IndexOf(list[0]);
foreach (BaseModPackage item in list)
bool flag3 = modGroup == null && flag && (flag2 || (modGroup2 != null && !modGroup2.collapsed));
ModGroup modGroup3 = ((modGroup != null) ? block[0].group : ((modGroup2 == null) ? baseModPackage.group : (flag3 ? modGroup2 : null)));
if (modGroup == null && modGroup3 != block[0].group)
{
LeaveGroup(block[0]);
}
int num3 = packages.IndexOf(block[0]);
BaseModPackage after2 = packages.TakeWhile((BaseModPackage p) => p != block[0]).LastOrDefault((BaseModPackage p) => !p.builtin);
foreach (BaseModPackage item in block)
{
packages.Remove(item);
}
bool flag2 = manager.emptyGroups.Contains(modGroup2);
bool flag3 = modGroup == null && flag && (flag2 || (modGroup2 != null && !modGroup2.collapsed));
List<BaseModPackage> list2 = ((modGroup2 != null) ? Members(modGroup2) : null);
bool flag4 = flag && !flag3;
BaseModPackage baseModPackage2 = ((list2 == null) ? baseModPackage : ((list2.Count == 0) ? null : (flag4 ? list2[^1] : list2[0])));
int num2 = ((baseModPackage2 != null) ? (packages.IndexOf(baseModPackage2) + (flag4 ? 1 : 0)) : (flag2 ? packages.Count : num));
packages.InsertRange(num2, list);
ModGroup modGroup3 = ((modGroup != null) ? list[0].group : ((modGroup2 == null) ? baseModPackage.group : (flag3 ? modGroup2 : null)));
if (num2 == num && modGroup3 == list[0].group)
BaseModPackage baseModPackage3 = ((list2 == null) ? baseModPackage : ((list2.Count == 0) ? null : (flag4 ? list2[^1] : list2[0])));
int num4 = ((baseModPackage3 != null) ? (packages.IndexOf(baseModPackage3) + (flag4 ? 1 : 0)) : ((flag2 && !block.Contains(modGroup2.after)) ? ((modGroup2.after != null) ? (packages.IndexOf(modGroup2.after) + 1) : packages.Count((BaseModPackage p) => p.builtin)) : num3));
if (!flag2 && num4 == num3 && modGroup3 == block[0].group)
{
SE.BeepSmall();
RefreshLists();
return;
}
else
packages.InsertRange(num4, block);
BaseModPackage baseModPackage4 = (flag2 ? modGroup2.after : null);
foreach (ModGroup item2 in emptyGroups)
{
list[0].group = modGroup3;
OnReorder();
if (block.Contains(item2.after) && (num4 != num3 || (flag2 && flag && emptyGroups.IndexOf(item2) <= emptyGroups.IndexOf(modGroup2))))
{
item2.after = after2;
}
else if ((baseModPackage3 != null && flag4 && item2.after == baseModPackage3) || (flag2 && !flag && item2.after == baseModPackage4 && emptyGroups.IndexOf(item2) >= emptyGroups.IndexOf(modGroup2)))
{
item2.after = block[^1];
}
}
block[0].group = modGroup3;
OnReorder();
}
private void OnReorder(bool restart = true) SetMembersActive(g, active: false);
}
};
onInstantiate = SetModRow;
list.callbacks = CreateCallbacks(list, builtin: false);
list2.callbacks = CreateCallbacks(list2, builtin: true);
InitSearchUI();private UIList.Callback<object, ItemMod> CreateCallbacks(UIList target, bool buiโฆ)
}
else
{
onInstantiate((ModPackage)row, b);
SetModRow((ModPackage)row, b);
}
},
onList = delegate
{
ModGroup modGroup = null;
if (!builtin && !HasFilter)
{
foreach (ModGroup emptyGroup in manager.emptyGroups)
{
if (emptyGroup.after == null)
{
target.Add(emptyGroup);
}
}
}
foreach (BaseModPackage package in manager.packages)
{
if (package.builtin == builtin && (builtin || Match(package)))private UIList.Callback<object, ItemMod> CreateCallbacks(UIList target, bool buiโฆ)
{
target.Add(package);
}
if (!HasFilter)
{
foreach (ModGroup emptyGroup2 in manager.emptyGroups)
{
if (emptyGroup2.after == package)
{
target.Add(emptyGroup2);
}
}
}
}
}
if (!builtin && !HasFilter)
{
target.AddCollection(manager.emptyGroups);
}
},
onRefresh = Refresh,
onDragReorder = delegate(object row, int a)private void SetModRow(ModPackage a, ItemMod b)
b.buttonActivate.mainText.SetText(FitTitle(b.buttonActivate.mainText, title), (!a.IsValidVersion() || a.blockedBy != null || !a.langDepError.IsEmpty()) ? FontColor.Bad : (a.activated ? FontColor.ButtonGeneral : FontColor.Passive));
b.buttonActivate.subText.text = a.version;
b.buttonLock.mainText.text = a.author;
ItemMod itemMod = ((a.group != null && !HasFilter) ? list.GetPair<ItemMod>(a.group) : null);
b.imageMember.SetActive(itemMod);
if ((bool)itemMod)
{
b.imageMember.color = itemMod.buttonActivate.mainText.color;
}
b.buttonUp.SetActive(!a.builtin);
b.buttonDown.SetActive(!a.builtin);
b.buttonConfig.SetActive(a.onBuildConfig != null);
b.buttonConfig.SetOnClick(delegate
{
LayerModConfig.Open(a);
});
b.buttonToggle.SetToggle(a.willActivate);
b.buttonUp.SetOnClick(delegate
{private void SetModRow(ModPackage a, ItemMod b)
b.buttonActivate.onClick.AddListener(delegate
{
Refresh();
UIContextMenu uIContextMenu = ELayer.ui.CreateContextMenuInteraction();
UIContextMenu uIContextMenu = ELayer.ui.CreateContextMenuInteraction().SetHighlightTarget(b.buttonActivate);
if (!a.builtin)
{
if (ELayer.debug.enable || (!BaseCore.IsOffline && a.isInPackages && !ELayer.core.version.demo))private void SetModRow(ModPackage a, ItemMod b)
}
AddGroupButtons(uIContextMenu, a);
}
if (a.onBuildConfig != null)
{
uIContextMenu.AddButton("config", delegate
{
SE.Click();
LayerModConfig.Open(a);
});
}
if (ModPreview.FindPreviewFile(a) != null || (bool)SteamPreview(a))
{
uIContextMenu.AddButton("mod_preview", delegateprivate void SetMembersActive(ModGroup g, bool active)
}
}
private void LeaveGroup(BaseModPackage p)
{
ModGroup g = p.group;
if (g != null && !manager.packages.Any((BaseModPackage m) => m != p && m.group == g))
{
manager.emptyGroups.Insert(GetGroupIndex(p, last: false), g);
g.after = manager.packages.TakeWhile((BaseModPackage m) => m != p).LastOrDefault((BaseModPackage m) => !m.builtin);
}
}
private int GetGroupIndex(BaseModPackage anchor, bool last)
{
List<BaseModPackage> l = manager.packages;
return manager.emptyGroups.Count((ModGroup e) => l.IndexOf(e.after) < l.IndexOf(anchor) || (last && e.after == anchor));
}
private void NewGroup()
{
if (ModManager.disableMod)}
ModGroup item = new ModGroup
{
name = name
name = name,
after = manager.packages.LastOrDefault((BaseModPackage p) => !p.builtin)
};
manager.emptyGroups.Add(item);
OnReorder(restart: false);private void SetGroupRow(ModGroup g, ItemMod b)
{
List<BaseModPackage> members = Members(g);
int on = members.Count((BaseModPackage p) => p.willActivate);
string title = (g.collapsed ? "[+] " : "[-] ") + g.name;
string title = ((members.Count == 0) ? "" : (g.collapsed ? "[+] " : "[-] ")) + g.name;
UIText mainText = b.buttonActivate.mainText;
mainText.fontStyle = FontStyle.Bold;
mainText.SetText(FitTitle(mainText, title, " (" + on + "/" + members.Count + ")"), FontColor.Topic);
mainText.SetText(FitTitle(mainText, title, (members.Count > 0) ? (" (" + on + "/" + members.Count + ")") : ""), FontColor.Topic);
Color topic = mainText.color;
Color? color = g.color;
if (color.HasValue)private void SetGroup(BaseModPackage p, ModGroup g)
ClearSearch();
}
List<BaseModPackage> packages = manager.packages;
List<ModGroup> emptyGroups = manager.emptyGroups;
ModGroup host = ((g != null && packages.Any((BaseModPackage m) => m.group == g)) ? g : p.group);
BaseModPackage baseModPackage = ((host == null) ? null : packages.LastOrDefault((BaseModPackage m) => m != p && m.group == host));
if (baseModPackage != null)
if (g != p.group)
{
LeaveGroup(p);
}
int num = packages.IndexOf(p);
BaseModPackage after = packages.TakeWhile((BaseModPackage m) => m != p).LastOrDefault((BaseModPackage m) => !m.builtin);
packages.Remove(p);
int num2 = ((!emptyGroups.Contains(g)) ? ((baseModPackage != null) ? (packages.IndexOf(baseModPackage) + 1) : num) : ((g.after == p) ? num : ((g.after != null) ? (packages.IndexOf(g.after) + 1) : packages.Count((BaseModPackage m) => m.builtin))));
packages.Insert(num2, p);
BaseModPackage baseModPackage2 = (emptyGroups.Contains(g) ? g.after : null);
foreach (ModGroup item in emptyGroups)
{
packages.Remove(p);
packages.Insert(packages.IndexOf(baseModPackage) + 1, p);
if (item.after == p && num2 != num)
{
item.after = after;
}
else if (emptyGroups.Contains(g) && item.after == baseModPackage2 && emptyGroups.IndexOf(item) >= emptyGroups.IndexOf(g))
{
item.after = p;
}
}
p.group = g;
if (g != null)private void ShowInfo(BaseModPackage p)
PreviewEntry thumb = GetThumb(p);
infoPreview.SetActive(enable: true);
infoPreview.image1.sprite = thumb.sprite ?? spriteNoPreview;
Image image = infoPreview.image1;
Vector2 size = image.sprite.rect.size;
infoPreview.image2.rectTransform.sizeDelta = size * Mathf.Min(image.rectTransform.rect.width / size.x, image.rectTransform.rect.height / size.y) + Vector2.one * 18f;
SetTopic(infoAuthor, p.author.IsEmpty("-"), null);
SetTopic(infoVersion, p.version.IsEmpty("-"), null);
SetTopic(infoId, p.id, null);+LayerModConfig โ
File Created
using System;
public class LayerModConfig : ELayer
{
public UINote note;
public UIButton buttonReset;
public UIButton buttonFile;
public ModPackage current;
public static void Open(ModPackage p)
{
ELayer.ui.AddLayerDontCloseOthers<LayerModConfig>("LayerMod/LayerModConfig").Show(p);
}
public override void OnInit()
{
buttonReset = windows[0].AddBottomButton("resetConfigTab".lang("mod".lang()), delegate
{
Dialog.YesNo("dialogResetConfigTab".lang(windows[0].textCaption.text), delegate
{
try
{
current.onResetConfig?.Invoke();
}
catch (Exception ex)
{
ModUtil.LogModError(ex.ToString(), current);
}
Show(current);
});
});
buttonFile = windows[0].AddBottomButton("mod_info", delegate
{
Util.ShowExplorer(current.configPath);
});
}
public void Show(ModPackage p)
{
current = p;
windows[0].SetCaption(p.title.IsEmpty(p.dirInfo.Name));
buttonReset.SetActive(p.onResetConfig != null);
buttonFile.SetActive(!p.configPath.IsEmpty());
note.Clear();
windows[0].RebuildLayout();
note.RebuildLayoutTo<Layer>();
try
{
p.onBuildConfig(note);
}
catch (Exception ex)
{
ModUtil.LogModError(ex.ToString(), p);
}
note.Build();
}
}ModManager โ
}
List<string> list = new List<string>();
ModGroup modGroup = null;
foreach (BaseModPackage package in packages)
foreach (ModGroup emptyGroup in emptyGroups)
{
string str = package.dirInfo?.FullName;
if (package.builtin || str.IsEmpty())
if (emptyGroup.after == null)
{
continue;
list.Add((modGroup = emptyGroup).ToString());
}
string text = FormatLoadOrder(package);
}
foreach (BaseModPackage package in packages)
{
string str = package.dirInfo?.FullName;
string text = ((package.builtin || str.IsEmpty()) ? "" : FormatLoadOrder(package));
if (!text.IsEmpty())
{
if (package.group != modGroup) }
list.Add(text);
}
foreach (ModGroup emptyGroup2 in emptyGroups)
{
if (emptyGroup2.after == package)
{
list.Add((modGroup = emptyGroup2).ToString());
}
}
}
list.AddRange(emptyGroups.Select((ModGroup g) => g.ToString()));
File.WriteAllLines(CorePath.PathLoadOrder, list);
} }
package.group = modGroup2;
}
foreach (ModGroup emptyGroup in emptyGroups)
{
foreach (BaseModPackage package2 in packages)
{
if (package2.group != null && package2.group == emptyGroup.after?.group)
{
emptyGroup.after = package2;
}
}
}
}
public void LoadLoadOrder()int num = 0;
int num2 = 0;
ModGroup modGroup = null;
BaseModPackage after = null;
HashSet<BaseModPackage> hashSet = new HashSet<BaseModPackage>();
foreach (string item in File.ReadAllLines(pathLoadOrder).Append("#group"))
{{
if (modGroup != null && num2 == 0)
{
modGroup.after = after;
emptyGroups.Add(modGroup);
}
modGroup = group; value.orderIndex = num;
value.willActivate = activate;
value.group = modGroup;
after = value;
num++;
}
}ModPackage โ
public int old;
}
public Action<UINote> onBuildConfig;
public Action onResetConfig;
public string configPath;
public void CopyContentTo(string dir)
{
IO.DeleteDirectory(dir);ModUtil โ
public static ModPackage GetModPackage(string modId)
public static ModPackage FindFileProviderPackage(FileInfo file)
{
string path = file.FullName.NormalizePath();
return ModManager.Instance.packages.LastOrDefault((BaseModPackage p) => path.StartsWith(p.dirInfo.FullName.NormalizePath())) as ModPackage;
return ModManager.Instance.packages.LastOrDefault((BaseModPackage p) => path.StartsWith(p.dirInfo.FullName.NormalizePath() + "/")) as ModPackage;
}
public static ModPackage FindDirectoryProviderPackage(DirectoryInfo dir)
{
string path = dir.FullName.NormalizePath();
return ModManager.Instance.packages.LastOrDefault((BaseModPackage p) => path.StartsWith(p.dirInfo.FullName.NormalizePath())) as ModPackage;
string path = dir.FullName.NormalizePath() + "/";
return ModManager.Instance.packages.LastOrDefault((BaseModPackage p) => path.StartsWith(p.dirInfo.FullName.NormalizePath() + "/")) as ModPackage;
}
public static ModPackage FindSourceRowPackage(SourceData.BaseRow row)Props โ
SourceCategory.Row cat = EClass.sources.categories.map[key];
EClass.pc.things.Foreach(delegate(Thing t)
{
if (!t.isEquipped && t.category.IsChildOf(cat.id) && !t.IsExcludeFromCraft(ing))
if (!t.isEquipped && t.category.IsChildOf(cat.id) && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t))
{
stack.Add(t);
}{
Thing thing = item5.Thing;
Card obj = thing.parent as Card;
if (obj != null && obj.c_lockLv == 0 && !thing.IsExcludeFromCraft(ing))
if (obj != null && obj.c_lockLv == 0 && !thing.IsExcludeFromCraft(ing) && !stack.list.Contains(thing))
{
stack.Add(thing);
}}
void TryAdd(Thing t)
{
if ((tag == null || t.Thing.material.tag.Contains(tag)) && (idMat == -1 || t.material.id == idMat) && !t.IsExcludeFromCraft(ing))
if ((tag == null || t.Thing.material.tag.Contains(tag)) && (idMat == -1 || t.material.id == idMat) && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t))
{
stack.Add(t.Thing);
stack.Add(t);
}
}
void TryAdd2(Thing t)RecipeManager โ
public List<RecipeSource> ListSources(Thing factory, List<RecipeSource> newRecipโฆ)
List<RecipeSource> list = new List<RecipeSource>();
foreach (RecipeSource item in RecipeManager.list)
{
if (item.isBridgePillar || (factory == null && item.idFactory != "self") || (factory != null && !factory.trait.Contains(item)) || item.isChara || item.noListing)
if (item.isBridgePillar || (factory == null && item.idFactory != "self") || (factory != null && !factory.trait.Contains(item)) || item.isChara || !item.ShouldList())
{
continue;
}RecipeSource โ
}
}
public bool ShouldList()
{
if (noListing)
{
if (id == "f90" && EClass.game.IsSurvival)
{
return true;
}
return false;
}
return true;
}
public string GetDetail()
{
return row.GetDetail();Scene โ
{
if (EMono.ui.isPointerOverUI)
{
if (!EMono.ui.GetLayer<LayerConfig>())
if (!EMono.ui.GetLayer<LayerConfig>() && !EMono.ui.GetLayer<LayerModConfig>())
{
UIDropdown componentOf = InputModuleEX.GetComponentOf<UIDropdown>();
if ((bool)componentOf && !UIDropdown.activeInstance)ShopType โ
TravelMerchant,
TravelMerchant2,
CustomContent,
AnimalGoods
AnimalGoods,
Sorin
}SurvivalManager โ
public void OnUpdateRecruit(FactionBranch branch)
for (int i = 0; i < (EClass.debug.enable ? 10 : 2); i++)
{
SourceChara.Row row = list.RandomItem();
if (row != null)
if (row == null)
{
continue;
}
bool flag = true;
foreach (HireInfo item in branch.listRecruit)
{
if (item.chara.id == row.id)
{
flag = false;
}
}
if (flag)
{
Chara chara = CharaGen.Create(row.id);
chara.RemoveEditorTag(EditorTag.AINoMove);TCOrbitChara โ
public override void RefreshAll()
{
emo = owner.trait.GetRestockedIcon();
}
else
else if ((owner.quest != null && EMono.game.quests.list.Contains(owner.quest)) || owner.trait.ShouldShowQuestIcon())
{
bool flag = false;
if (owner.quest != null && EMono.game.quests.list.Contains(owner.quest))
{
flag = true;
}
else if (owner.IsUnique && !EMono.game.IsSurvival)
{
string id = owner.id;
if (!(id == "ashland"))
{
if (id == "fiama")
{
if (EMono.game.quests.GetPhase<QuestMain>() >= 200 && EMono.player.dialogFlags.TryGetValue("fiama1", 0) == 0)
{
flag = true;
}
else if (EMono.pc.homeBranch != null)
{
foreach (Chara member in EMono.pc.homeBranch.members)
{
if (member.isDead && member.GetInt(100) != 0)
{
flag = true;
break;
}
}
}
}
}
else
{
int phase = EMono.game.quests.GetPhase<QuestMain>();
if ((phase == 0 && EMono.player.dialogFlags.TryGetValue("ash1", 0) == 0) || phase == 200)
{
flag = true;
}
}
}
if (flag)
{
emo = Emo2.hint;
}
emo = Emo2.hint;
}
}
if (EMono.player.currentHotItem.Thing != null && EMono.player.currentHotItem.Thing.trait.GetHeldEmo(owner) != Emo2.none)public override void RefreshAll()
iconStatus.sprite = EMono.core.refs.spritesEmo[(int)emo];
}
iconStatus.SetActive(showIcon);
bool flag2 = owner.isChara && owner.HasElement(1421);
bool flag = owner.isChara && owner.HasElement(1421);
float num = (float)owner.hp / (float)owner.MaxHP;
if (flag2)
if (flag)
{
num = (float)(owner.hp + owner.mana.value) / (float)(owner.MaxHP + owner.mana.max);
}
showHP = num < 0.9f && (owner.IsPCParty || owner.IsHostile() || (owner.enemy != null && owner.enemy.IsPCParty)) && !owner.IsPCFactionMinion;
if (showHP)
{
if (flag2)
if (flag)
{
float x = (float)owner.mana.max / (float)(owner.mana.max + owner.MaxHP);
bgMP.transform.localScale = new Vector3(x, 1f, 1f);public override void RefreshAll()
barHP.transform.SetLocalScaleX(Mathf.Max(0f, num));
barHP.SetActive(enable: true);
bgHP.SetActive(enable: true);
bgMP.SetActive(flag2);
bgMP.SetActive(flag);
}
else
{TileType โ
public HitResult _HitTest(Point pos, Card target, bool canIgnore = true)
{
return HitResult.Invalid;
}
if (this is TileTypeSky && EClass.game.IsSurvival && (pos.HasChara || pos.HasObj))
{
return HitResult.Invalid;
}
if (pos.cell.IsTopWater)
{
if (!CanBuiltOnWater)Trait โ
public virtual void OnBarter(bool reroll = false)
}
break;
}
case ShopType.Sorin:
Add("1282", 1, 0).SetNum(5);
AddThing(ThingGen.CreateSpellbook(9155, 1, 3));
AddThing(ThingGen.CreateScroll(8288).SetNum(5));
Add("1386", 1, 0);
break;
case ShopType.Medal:
NoRestockId("hammer_garokk", 3, 0);
NoRestockId("sword_dragon", 1, 0);public virtual void OnBarter(bool reroll = false)
Add("diary_lady", 1, 0);
Add("1165", 1, 0).SetNum(5);
AddThing(ThingGen.CreateScroll(9160).SetNum(5));
Add("1282", 1, 0).SetNum(5);
Add("monsterball", 1, 0).SetNum(3).SetLv(20);
Add("monsterball", 1, 0).SetNum(3).SetLv(40);
Add("bill_tax", 1, 0).c_bill = 1;
Add("bill_tax", 1, 0).c_bill = 1;
Add("bill_tax", 1, 0).c_bill = 1;
AddThing(ThingGen.CreateScroll(8288).SetNum(5));
Add("container_magic", 1, 0);
Add("container_magic", 1, 0).ChangeMaterial("iron").idSkin = 1;
Add("container_magic", 1, 0).ChangeMaterial("bamboo").idSkin = 2;public virtual void OnBarter(bool reroll = false)
Add("wrench_fridge", 1, 0).SetNum(1);
Add("wrench_extend_v", 1, 0).SetNum(2);
Add("wrench_extend_h", 1, 0).SetNum(2);
AddThing(ThingGen.CreateSpellbook(9155, 1, 3));
break;
default:
{public virtual void OnBarter(bool reroll = false)
switch (ShopType)
{
case ShopType.Curry:
if (EClass.game.quests.IsCompleted("curry"))
if (EClass.game.quests.IsCompleted("curry") || EClass.game.IsSurvival)
{
AddThing(TraitSeed.MakeSeed("redpepper").SetNum(5));
}TraitAshland โ
public class TraitAshland : TraitUniqueChara
public class TraitAshland : TraitUniqueChara
{
public override bool CanInvite => EClass._zone.id == "lothria";
public override bool ShouldShowQuestIcon()
{
if (EClass.game.IsSurvival)
{
return false;
}
int phase = EClass.game.quests.GetPhase<QuestMain>();
if ((phase == 0 && EClass.player.dialogFlags.TryGetValue("ash1", 0) == 0) || phase == 200)
{
return true;
}
return false;
}
}TraitChara โ
public virtual bool CanBeTamed
{
get
{
if (!IsUnique && owner.rarity < Rarity.Legendary && !owner.IsMultisize && !owner.IsGlobal && !owner.IsPCFaction && EClass._zone.Boss != owner && CanInvite)
if (!IsUnique && owner.rarity < Rarity.Legendary && !owner.IsMultisize && !owner.IsGlobal && !owner.IsPCFaction && EClass._zone.Boss != owner && CanInvite && owner.c_bossType == BossType.none)
{
return owner.c_bossType == BossType.none;
if (EClass._zone.IsUserZone)
{
return !EClass.game.principal.disableUsermapBenefit;
}
return true;
}
return false;
} return false;
}
public virtual bool ShouldShowQuestIcon()
{
return false;
}
public virtual string GetDramaText()
{
if (CanInvest)TraitFiama โ
public class TraitFiama : TraitUniqueMerchant
public override CurrencyType CurrencyType => CurrencyType.Money2;
public override string LangBarter => "daBuyStarter";
public override bool ShouldShowQuestIcon()
{
if (EClass.game.IsSurvival)
{
return false;
}
if (EClass.game.quests.GetPhase<QuestMain>() >= 200 && EClass.player.dialogFlags.TryGetValue("fiama1", 0) == 0)
{
return true;
}
if (EClass.pc.homeBranch != null)
{
foreach (Chara member in EClass.pc.homeBranch.members)
{
if (member.isDead && member.GetInt(100) != 0)
{
return true;
}
}
}
return false;
}
}TraitSkyHelm โ
public override bool OnUse(Chara c)
EClass.game.survival.listGateZone.Clear();
EClass.ui.CloseLayers();
EClass.pc.pos.TalkWitnesses(EClass.pc, "ahoy", 6, WitnessType.everyone, (Chara chara) => true);
EClass.pc.ModExp(240, costSkyTravel * 20);
}
},
onRedraw = delegate(Zone a, ButtonElement b, int i)TraitSorin โ
public class TraitSorin : TraitUniqueChara
public class TraitSorin : TraitUniqueChara
public class TraitSorin : TraitUniqueMerchant
{
public override ShopType ShopType => ShopType.Sorin;
public override CurrencyType CurrencyType => CurrencyType.Money3;
public override bool CanInvest => false;
public override int ShopLv => 1;
public override string LangBarter => "daTradeMandrake";
public override bool CanBeBanished => false;
public override bool ShouldShowQuestIcon()
{
return !EClass.player.dialogFlags.ContainsKey("sorin_relic");
}
}+TraitStrangePainting โ
File Created
public class TraitStrangePainting : TraitVase
{
public override void OnDie()
{
if (!EClass._zone.IsRegion && EClass.rnd(3) != 0)
{
Chara chara = EClass._zone.SpawnMob(owner.pos.GetNearestPoint(allowBlock: false, allowChara: false), new SpawnSetting
{
id = "paint_living",
filterLv = EClass._zone.DangerLv + 20
});
chara.SetHostility(Hostility.Enemy);
chara.SetSummon(9999);
Msg.Say("statue_chara", chara, owner);
}
}
}UICurrency โ
public bool weight;
public bool ticketSky;
public bool mandrake;
}
public class Item{
Add(EMono.sources.cards.map["ecopo"].GetSprite(), "ecopo", () => EMono.pc.GetCurrency("ecopo").ToString("#,0") ?? "");
}
if (options.mandrake)
{
Add(EMono.sources.cards.map["money3"].GetSprite(), "money3", () => EMono.pc.GetCurrency("money3").ToString("#,0") ?? "");
}
if (options.ticketSky)
{
Add(EMono.sources.cards.map["ticket_sky"].GetSprite(), "ticket_sky", () => EMono.pc.GetCurrency("ticket_sky").ToString("#,0") ?? "");UIInventory โ
{
CurrencyType.Medal => "medal",
CurrencyType.Ecopo => "ecopo",
CurrencyType.Money3 => "money3",
_ => "money",
};WidgetCodex โ
public virtual void Search(string s)
{
foreach (RecipeSource item in RecipeManager.list)
{
if (!item.isChara && !item.noListing && !item.isBridgePillar && (item.row.GetSearchName(jp: false).Contains(s) || item.row.GetSearchName(jp: true).Contains(s)) && (EMono.player.recipes.knownRecipes.ContainsKey(item.id) || item.alwaysKnown))
if (!item.isChara && item.ShouldList() && !item.isBridgePillar && (item.row.GetSearchName(jp: false).Contains(s) || item.row.GetSearchName(jp: true).Contains(s)) && (EMono.player.recipes.knownRecipes.ContainsKey(item.id) || item.alwaysKnown))
{
hashSet.Add(Recipe.Create(item));
}public virtual void Search(string s)
{
foreach (RecipeSource item2 in RecipeManager.list)
{
if (!item2.isChara && !item2.noListing && (EMono.player.recipes.knownRecipes.ContainsKey(item2.id) || item2.alwaysKnown))
if (!item2.isChara && item2.ShouldList() && (EMono.player.recipes.knownRecipes.ContainsKey(item2.id) || item2.alwaysKnown))
{
hashSet.Add(Recipe.Create(item2));
}