EA 23.334 Nightly โ
August 8, 2026
28 files modified. 2 new files created. 2 files removed.
Important Changes โ
Possible breaking changes. Click the filename to view the chunk.
Religion (1) โ
public virtual void Revelation(string idTalk, int chance = 100)
public virtual void Revelation(string idTalk, Card c, int chance = 100) Steam (1) โ
private void CreateUserContent2(UgcQuery query)
public static void QueryAllMyPublished(Action<List<WorkshopItem>> onComplete, Action<string> onFail = null, float timeout = 10f) SurvivalManager (1) โ
public void SetGateZone()
public void RefreshGateZones() Trait (1) โ
public virtual bool CanOffer(Card tg)
public virtual bool CanOffer(Chara cc, Card tg) TraitAltar (2) โ
public override bool CanOffer(Card c)
public override bool CanOffer(Chara cc, Card c) public void TakeOver()
public void TakeOver(Chara c) ABILITY โ
public override int GetPower(Card c)
a = EClass.curve(a, 400, 100);
if (this is Song)
{
a = a * Mathf.Max(100 + c.Evalue(411) / 3, 1) / 100 * Mathf.Clamp(50 + EClass.curve(c.Evalue(241), 50, 10, 50) * 2, 1, 300) / 100 * (100 + c.Evalue(1294) * 25) / 100;
a = a * Mathf.Max(100 + c.Evalue(411) / 3, 1) / 100 * Mathf.Clamp(50 + EClass.curve(c.Evalue(241), 50, 10, 50) * 2, 1, 300) / 100 * (100 + c.Evalue(1294) * 20) / 100;
}
else if (this is Spell)
{AI_Haul โ
public static Thing GetThingToClean(Chara c = null)
_list.Clear();
foreach (Thing thing in EClass._map.things)
{
if (thing.placeState == PlaceState.roaming && !thing.isMasked && (thing.id == "731" || thing.id == "_egg" || thing.id == "egg_fertilized" || thing.id == "_milk"))
if (thing.placeState == PlaceState.roaming && !thing.isMasked && (thing.id == "731" || thing.id == "_egg" || thing.id == "egg_fertilized" || thing.id == "_milk") && thing.Dist(EClass.pc) > 1)
{
_list.Add(thing);
}AI_Offer โ
public bool IsValidTarget(Card c)
{
if (altar != null)
{
return altar.trait.CanOffer(c);
return altar.trait.CanOffer(owner, c);
}
return false;
}ActPray โ
public static void Pray(Chara c, bool passive)
if (!passive)
{
c.Say("pray_answer", c, Act.CC.faith.Name);
c.faith.Revelation((EClass.rnd(2) == 0) ? "random" : "chat");
c.faith.Revelation((EClass.rnd(2) == 0) ? "random" : "chat", c);
}
foreach (Chara member in EClass.pc.party.members)
{Card โ
public void SpawnLoot(Card origin)
bool isUserZone = EClass._zone.IsUserZone;
bool flag = EClass._zone is Zone_Music;
List<Card> list = new List<Card>();
if (!IsPCFaction && !isUserZone && sourceCard.idActor.IsEmpty())
if (!IsPCFactionOrMinion && !isUserZone && sourceCard.idActor.IsEmpty())
{
int i2 = 500;
if (this.rarity >= Rarity.Legendary)
{
i2 = ((!EClass.player.codex.DroppedCard(id)) ? 1 : 10);
EClass.player.codex.MarkCardDrop(id);
}
if (trait is TraitAdventurerBacker)
{
i2 = 10;
}
if (this.rarity >= Rarity.Legendary)
{
if (!EClass.player.codex.DroppedCard(id))
{
i2 = 0;
EClass.player.codex.MarkCardDrop(id);
}
else
{
i2 = 10;
}
}
if (chance(i2))
{
Thing thing = ThingGen.Create("figure");public void SpawnLoot(Card origin)
bool chance(int i)
{
i = i * 100 / (100 + EClass.player.codex.GetOrCreate(id).BonusDropLv * 10);
if (i < 1)
{
i = 1;
}
if (IsMinion)
{
i *= 5;
}
if (i < 1)
{
i = 1;
}
if (EClass.rnd(i) == 0)
{
return true;Chara โ
public override void Die(Element e = null, Card origin = null, AttackSource attaโฆ)
}
if (origin == EClass.pc)
{
EClass.pc.faith.Revelation("kill", 10);
EClass.pc.faith.Revelation("kill", EClass.pc, 10);
}
else if (origin.IsPCFaction)
{ContentConfigOther โ
public override void OnInstantiate()
{
base.config.other.disableMods = on;
});
toggleExceptionPopup.SetToggle(base.config.other.exceptionPopup, delegate(bool on)
toggleExceptionPopup.SetToggle(base.config.other.exceptionPopup2, delegate(bool on)
{
base.config.other.exceptionPopup = on;
base.config.other.exceptionPopup2 = on;
});
toggleNoCensor.SetToggle(base.config.other.noCensor, delegate(bool on)
{CoreConfig โ
public bool disableMods;
public bool exceptionPopup;
public bool exceptionPopup2 = true;
}
[Serializable]DramaCustomSequence โ
}).SetCondition(() => c.interest > 0);
}
bool flag4 = false;
if (!c.IsPCFaction && c.affinity.CanInvite() && !EClass._zone.IsInstance && c.c_bossType == BossType.none)
if (!c.IsPCFaction && c.affinity.CanInvite() && !EClass._zone.IsInstance && c.c_bossType == BossType.none && !EClass.game.IsSurvival)
{
if ((c.trait.IsUnique || c.IsGlobal) && c.GetInt(111) == 0 && !c.IsPCFaction && c.trait.NeedBoutToJoin)
{{
if (EClass.pc.HasElement(1232) || EClass.pc.HasElement(1291))
{
goto IL_0971;
goto IL_0980;
}
num2 = EClass.pc.HasCondition<StanceMama>();
} }
if (num2)
{
goto IL_0971;
goto IL_0980;
}
goto IL_0982;
goto IL_0991;
}
if (c.isDrunk || c.HasElement(1275) || EClass.debug.enable)
{
Choice2(flag2 ? "daBird" : "daTail", "_tail");
}
}
goto IL_0d9b;
IL_09c1:
Choice2("daBaby", "_baby");
goto IL_09d2;
IL_0971:
Choice2("daMama", "_mama");
goto IL_0982;
IL_0d9b:
goto IL_0daa;
IL_0daa:
if (c.IsHomeMember())
{
if (c.IsMaid)Step("_end");
End();
return;
IL_09d2:
IL_09d0:
Choice2("daBaby", "_baby");
goto IL_09e1;
IL_0980:
Choice2("daMama", "_mama");
goto IL_0991;
IL_0991:
ConTransmuteHuman condition2 = c.GetCondition<ConTransmuteHuman>();
bool num3;
if (condition2 == null)
{
if (c.HasElement(1232))
{
goto IL_09d0;
}
num3 = c.HasElement(1291);
}
else
{
num3 = condition2.IsBaby;
}
if (num3)
{
goto IL_09d0;
}
goto IL_09e1;
IL_09e1:
if (c.trait.CanRevive)
{
Choice2("daRevive", "_revive").DisableSound();{
Choice2("daBlessing", "_blessing");
}
goto IL_0d9b;
IL_0982:
ConTransmuteHuman condition2 = c.GetCondition<ConTransmuteHuman>();
bool num3;
if (condition2 == null)
{
if (c.HasElement(1232))
{
goto IL_09c1;
}
num3 = c.HasElement(1291);
}
else
{
num3 = condition2.IsBaby;
}
if (num3)
{
goto IL_09c1;
}
goto IL_09d2;
goto IL_0daa;
void BackChill()
{
Method(RumorChill, null, StepDefault);InvOwnerOffering โ
public InvOwnerOffering(Card owner = null, Card container = null, CurrencyType _โฆ)
public override bool ShouldShowGuide(Thing t)
{
return altar.CanOffer(t);
return altar.CanOffer(EClass.pc, t);
}
public override void _OnProcess(Thing t)InvOwnerRecycle โ
public override void _OnProcess(Thing t)
}
if (a != 0)
{
EClass.pc.Pick(ThingGen.Create("ecopo").SetNum(a / 10 + 1));
EClass.pc.Pick(ThingGen.Create((recycle is TraitSkyIncinerator) ? "ticket_sky" : "ecopo").SetNum(a / 10 + 1));
}
switch (t.id)
{LayerSleep โ
public void Sleep(int _hours, Thing _bed, Thing _pillow = null)
pillow = _pillow;
maxMin = hours * 60;
InvokeRepeating("Advance", repeatRate, repeatRate);
ELayer.pc.faith.Revelation("sleep");
ELayer.pc.faith.Revelation("sleep", ELayer.pc);
ELayer.player.stats.slept++;
}RecipeManager โ
public static RecipeSource GetUnlearnedRecipe(int lvBonus, string cat, bool onlyโฆ)
List<RecipeSource> list = new List<RecipeSource>();
foreach (RecipeSource item in RecipeManager.list)
{
if (!item.alwaysKnown && !item.noRandomRecipe && (item.NeedFactory || item.IsQuickCraft) && (cat == null || item.row.Category.IsChildOf(cat)) && (!onlyUnlearned || !EClass.player.recipes.knownRecipes.ContainsKey(item.id)) && EClass.pc.Evalue(item.GetReqSkill().id) + 5 + lvBonus >= item.row.LV && !item.row.ContainsTag("hiddenRecipe"))
if (!item.alwaysKnown && !item.noRandomRecipe && (item.NeedFactory || item.IsQuickCraft) && (EClass.game.IsSurvival || !item.row.tag.Contains("oneblock_only")) && (cat == null || item.row.Category.IsChildOf(cat)) && (!onlyUnlearned || !EClass.player.recipes.knownRecipes.ContainsKey(item.id)) && EClass.pc.Evalue(item.GetReqSkill().id) + 5 + lvBonus >= item.row.LV && !item.row.ContainsTag("hiddenRecipe"))
{
list.Add(item);
}Religion โ
public virtual string GetTextTemper(int _temper = -99999)
return list[6].ToTitleCase().TagColor(FontColor.Good);
}
public virtual void Revelation(string idTalk, int chance = 100)
public virtual void Revelation(string idTalk, Card c, int chance = 100)
{
if (!IsEyth && EClass.rnd(100) <= chance)
{
Talk(idTalk, EClass.pc);
Talk(idTalk, c);
}
}public virtual void JoinFaith(Chara c, ConvertType type = ConvertType.Default)
}
if (type != ConvertType.Campaign)
{
EClass.pc.c_daysWithGod = 0;
c.c_daysWithGod = 0;
}
Msg.Say("worship", Name);
Talk("worship", c);public void DoPunish(Chara c, PunishType type)
p = 200;
break;
}
thing.ChangeWeight(EClass.pc.WeightLimit / 4 + 1000);
thing.ChangeWeight(c.WeightLimit / 4 + 1000);
c.AddThing(thing);
c.AddCondition<ConWrath>(p);
}Scene โ
public void Init(Mode newMode)
EMono.player.flags.OnEnterZone();
if (EMono._zone == EMono.pc.homeZone)
{
EMono.pc.faith.Revelation("welcome");
EMono.pc.faith.Revelation("welcome", EMono.pc);
}
if (EMono._zone.Boss != null && EMono._zone.Boss.ExistsOnMap)
{SourceZone โ
public string[] tag;
public int costSkyTravel;
public int cost;
public int dev; ["idGen"] = 12,
["idPlaylist"] = 13,
["tag"] = 14,
["cost"] = 15,
["dev"] = 16,
["image"] = 17,
["pos"] = 18,
["questTag"] = 19,
["textFlavor_JP"] = 20,
["textFlavor"] = 21,
["detail_JP"] = 22,
["detail"] = 23
["costSkyTravel"] = 15,
["cost"] = 16,
["dev"] = 17,
["image"] = 18,
["pos"] = 19,
["questTag"] = 20,
["textFlavor_JP"] = 21,
["textFlavor"] = 22,
["detail_JP"] = 23,
["detail"] = 24
};
public static readonly IReadOnlyDictionary<string, string> TypeMapping = new Dictionary<string, string>["idGen"] = "string",
["idPlaylist"] = "string",
["tag"] = "string[]",
["costSkyTravel"] = "int",
["cost"] = "int",
["dev"] = "int",
["image"] = "string",public override Row CreateRow()
idGen = SourceData.GetString(12),
idPlaylist = SourceData.GetString(13),
tag = SourceData.GetStringArray(14),
cost = SourceData.GetInt(15),
dev = SourceData.GetInt(16),
image = SourceData.GetString(17),
pos = SourceData.GetIntArray(18),
questTag = SourceData.GetStringArray(19),
textFlavor_JP = SourceData.GetString(20),
textFlavor = SourceData.GetString(21),
detail_JP = SourceData.GetString(22),
detail = SourceData.GetString(23)
costSkyTravel = SourceData.GetInt(15),
cost = SourceData.GetInt(16),
dev = SourceData.GetInt(17),
image = SourceData.GetString(18),
pos = SourceData.GetIntArray(19),
questTag = SourceData.GetStringArray(20),
textFlavor_JP = SourceData.GetString(21),
textFlavor = SourceData.GetString(22),
detail_JP = SourceData.GetString(23),
detail = SourceData.GetString(24)
};
}public override Row CreateRowByMapping(IReadOnlyDictionary<string, int> mapping)
idGen = SourceData.GetString(mapping["idGen"]),
idPlaylist = SourceData.GetString(mapping["idPlaylist"]),
tag = SourceData.GetStringArray(mapping["tag"]),
costSkyTravel = SourceData.GetInt(mapping["costSkyTravel"]),
cost = SourceData.GetInt(mapping["cost"]),
dev = SourceData.GetInt(mapping["dev"]),
image = SourceData.GetString(mapping["image"]),SpatialManager โ
public List<Zone> ListReturnLocations()
return list;
}
List<Zone> list2 = (from a in map.Values.OfType<Zone>()
where a != EClass._zone && a.IsReturnLocation && a.GetTopZone().visitCount > 0 && (a.GetTopZone().FindDeepestZone() == a || EClass.pc.homeZone == a)
where a != EClass._zone && a.IsReturnLocation && a.GetTopZone().visitCount > 0 && (a.GetTopZone().FindDeepestZone() == a || EClass.pc.homeZone == a) && (!EClass.game.IsSurvival || a.IsNefia)
select a).ToList();
list2.Sort((Zone a, Zone b) => a.GetSortVal() - b.GetSortVal());
return list2;StanceSongPebble โ
public override void TickSong()
}
else
{
item.GetCondition<ConSongPebble>()?.SetValue(10, owner.Evalue(1294));
item.GetCondition<ConSongPebble>()?.SetValue(10 + owner.Evalue(1294) * 2, owner.Evalue(1294));
}
}
}StanceSongValor โ
public override void TickSong()
}
else
{
item.GetCondition<ConSongValor>()?.SetValue(10);
item.GetCondition<ConSongValor>()?.SetValue(10 + owner.Evalue(1294) * 2, owner.Evalue(1294));
}
}
}Steam โ
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using HeathenEngineering.SteamworksIntegration;public void CreateUserContent(BaseModPackage p)
};
p.UpdateMeta(updateOnly: true);
currentPackage = p;
UgcQuery myPublished = UgcQuery.GetMyPublished();
myPublished.SetReturnKeyValueTags(tags: true);
myPublished.Execute(CreateUserContent2);
QueryAllMyPublished(CreateOrUpdateUserContent, delegate(string error)
{
LayerProgress.completed = true;
Debug.LogError(error);
Dialog.Ok("mod_publish_error");
});
}
private void CreateUserContent2(UgcQuery query)
public static void QueryAllMyPublished(Action<List<WorkshopItem>> onComplete, Action<string> onFail = null, float timeout = 10f)
{
Debug.Log("Creating Content2");
BaseModPackage baseModPackage = currentPackage;
if (query.ResultsList != null)
List<WorkshopItem> results = new List<WorkshopItem>();
HashSet<PublishedFileId_t> ids = new HashSet<PublishedFileId_t>();
uint page = 1u;
bool done = false;
UgcQuery query = UgcQuery.GetMyPublished();
ExecutePage();
if (!done && (bool)Instance)
{
Instance.StartCoroutine(Timeout());
}
void ExecutePage()
{
query.SetReturnKeyValueTags(tags: true);
if (!query.Execute(HandleResults))
{
ReportError("UgcQuery.Execute failed at page " + page);
}
}
void HandleResults(UgcQuery q)
{
if (!done)
{
results.AddRange(q.ResultsList.Where((WorkshopItem r) => ids.Add(r.FileId)));
if (q.ResultsList.Count == 0 || page >= q.pageCount)
{
done = true;
query.Dispose();
onComplete?.Invoke(results);
}
else
{
query.SetPage(++page);
ExecutePage();
}
}
}
void ReportError(string error)
{
Debug.Log(query.ResultsList.Count);
if (!done)
{
done = true;
query.Dispose();
if (onFail != null)
{
onFail(error);
}
else
{
Debug.LogError(error);
}
}
}
foreach (WorkshopItem results in query.ResultsList)
IEnumerator Timeout()
{
uint lastPage = page;
float time = Time.realtimeSinceStartup;
while (!done)
{
if (lastPage != page)
{
lastPage = page;
time = Time.realtimeSinceStartup;
}
if (Time.realtimeSinceStartup - time > timeout)
{
ReportError("UgcQuery timed out at page " + page + " (" + results.Count + " items fetched)");
break;
}
yield return null;
}
}
}
private void CreateOrUpdateUserContent(List<WorkshopItem> items)
{
Debug.Log("Creating Content2");
BaseModPackage baseModPackage = currentPackage;
Debug.Log(items.Count);
foreach (WorkshopItem item in items)
{
if (results.keyValueTags == null)
if (item.keyValueTags.IsEmpty())
{
continue;
}
StringKeyValuePair[] keyValueTags = results.keyValueTags;
StringKeyValuePair[] keyValueTags = item.keyValueTags;
for (int i = 0; i < keyValueTags.Length; i++)
{
StringKeyValuePair stringKeyValuePair = keyValueTags[i];
if (stringKeyValuePair.key == "id" && stringKeyValuePair.value == baseModPackage.id && results.Owner.id == User.Client.Id)
if (stringKeyValuePair.key == "id" && stringKeyValuePair.value == baseModPackage.id && item.Owner.IsMe)
{
Debug.Log("Updating Content");
UpdateUserContent(results.FileId);
UpdateUserContent(item.FileId);
return;
}
}SurvivalManager โ
}
}
public bool gotPortal
public bool gotSkyWorkbench
{
get
{
return bits[3];
return bits[4];
}
set
{
bits[3] = value;
bits[4] = value;
}
}private void _OnDeserialized(StreamingContext context)
[JsonProperty]
public Zone gateZone;
[JsonProperty]
public List<Zone> listGateZone = new List<Zone>();
public bool IsInRaid => GetRaidEvent() != null;
public ZoneEventRaid GetRaidEvent() }
if (EClass.world.date.hour == 0 || EClass.debug.enable)
{
SetGateZone();
RefreshGateZones();
}
}
public void SetGateZone()
public void RefreshGateZones()
{
if (EClass.rnd(3) == 0)
listGateZone.ForeachReverse(delegate(Zone z)
{
IEnumerable<Spatial> ie = EClass.game.spatials.map.Values.Where((Spatial z) => z.source.tag.Contains("oneblock"));
gateZone = ie.RandomItem() as Zone;
if (z == null || z.destryoed)
{
listGateZone.Remove(z);
}
});
if (listGateZone.Count == 0)
{
for (int i = 0; i < 3; i++)
{
if (EClass.rnd(4) == 0)
{
IEnumerable<Spatial> enumerable = EClass.game.spatials.map.Values.Where((Spatial a) => a.source.costSkyTravel > 0 && !listGateZone.Contains(a) && a != gateZone);
if (enumerable.Count() > 0)
{
listGateZone.Add(enumerable.RandomItem() as Zone);
}
}
else
{
Zone item = EClass.world.region.CreateRandomSite(new Point(1, 1), (EClass.rnd(5) == 0) ? "dungeon_water" : null, updateMesh: false);
listGateZone.Add(item);
}
}
}
else
foreach (Zone item2 in listGateZone)
{
gateZone = EClass.world.region.CreateRandomSite(new Point(1, 1), (EClass.rnd(5) == 0) ? "dungeon_water" : null, updateMesh: false);
if (item2.dateExpire > 0)
{
item2.dateExpire = EClass.world.date.GetRaw() + 10080;
}
}
} MeteorThing(pos2, "rolling_fortune", install: true);
flags.gotGaragara = true;
}
else if (EClass.player.stats.days > 1 && !flags.gotPortal)
else if (EClass.player.stats.days > 1 && !flags.gotSkyWorkbench)
{
MeteorThing(pos2, "teleporter_gate", install: true);
flags.gotPortal = true;
MeteorThing(pos2, ThingGen.CreateRecipe("workbench_sky"));
flags.gotSkyWorkbench = true;
}
NextObj();
return true;ThingGen โ
public static void CreateTreasureContent(Thing t, int lv, TreasureType type, booโฆ)
t.Add("medal", EClass.rndHalf(8));
t.Add("book_skill", 1, lv);
t.Add("book_skill", 1, lv);
t.Add("ticket_sky", 25 + EClass.rnd(10));
t.c_lockLv /= 3;
TryAddScrubber(2);
break;public static void CreateTreasureContent(Thing t, int lv, TreasureType type, booโฆ)
TryAddScrubber(30);
break;
}
if (EClass.game.IsSurvival && type != TreasureType.SurvivalRaid && EClass.rnd(3) == 0)
{
t.Add("ticket_sky", 5 + EClass.rnd(10));
}
if (type == TreasureType.RandomChest && EClass.rnd(2) == 0)
{
t.AddCard(CreateFromCategory("junk", lv));Trait โ
}
}
public virtual bool CanOffer(Card tg)
public virtual bool CanOffer(Chara cc, Card tg)
{
if (tg == null || tg.isChara || tg.trait.CanOnlyCarry)
{public void OfferProcess(Chara cc)
}
foreach (Card item in owner.pos.ListCards())
{
if (CanOffer(item))
if (CanOffer(cc, item))
{
item.renderer.PlayAnime(AnimeID.Shiver);
}}
foreach (Card item in owner.pos.ListCards())
{
if (CanOffer(item))
if (CanOffer(cc, item))
{
item.Destroy();
cc.depression.Mod(100);TraitAltar โ
public override void TrySetAct(ActPlan p)
}
}
public override bool CanOffer(Card c)
public override bool CanOffer(Chara cc, Card c)
{
if (c != null && c.HasTag(CTAG.godArtifact))
{
if (EClass.pc.IsEyth && EClass.pc.HasElement(1228))
if (cc.IsEyth && cc.HasElement(1228))
{
if (IsEyth || Deity.IsValidArtifact(c.id))
{public override bool CanOffer(Card c)
return true;
}
}
if (base.CanOffer(c) && (EClass.pc.faith.GetOfferingValue(c as Thing) > 0 || c.id == "water") && !c.isCopy)
if (base.CanOffer(cc, c) && (cc.faith.GetOfferingValue(c as Thing) > 0 || c.id == "water") && !c.isCopy)
{
return !c.HasElement(764);
}public void OnOffer(Chara c, Thing t)
}
if (t.id == "water")
{
if (Deity != EClass.pc.faith)
if (Deity != c.faith)
{
if (t.blessedState == BlessedState.Cursed)
{public void OnOffer(Chara c, Thing t)
return;
}
Msg.Say("waterCurse", t);
EClass.pc.PlayEffect("curse");
EClass.pc.PlaySound("curse3");
c.PlayEffect("curse");
c.PlaySound("curse3");
t.SetBlessedState(BlessedState.Cursed);
}
else if (t.blessedState == BlessedState.Blessed)public void OnOffer(Chara c, Thing t)
else
{
Msg.Say("waterBless", t);
EClass.pc.PlayEffect("revive");
EClass.pc.PlaySound("revive");
c.PlayEffect("revive");
c.PlaySound("revive");
t.SetBlessedState(BlessedState.Blessed);
}
return;
}
if (t.HasElement(766) && !Deity.IsEyth)
{
Deity.PunishTakeOver(EClass.pc);
Deity.PunishTakeOver(c);
return;
}
if (!IsBranchAltar && EClass.pc.IsEyth && !EClass.pc.HasElement(1228))
if (!IsBranchAltar && c.IsEyth && !c.HasElement(1228))
{
EClass.pc.Say("god_offerEyth", owner, t);
c.Say("god_offerEyth", owner, t);
return;
}
EClass.pc.Say("god_offer", owner, t, Deity.Name);
if (!CanOffer(t))
c.Say("god_offer", owner, t, Deity.Name);
if (!CanOffer(c, t))
{
EClass.pc.Say("nothingHappens", owner, t);
c.Say("nothingHappens", owner, t);
return;
}
Effect.Get("debuff").Play(owner.pos);
EClass.pc.PlaySound("offering");
c.PlaySound("offering");
if (IsBranchAltar)
{
Msg.Say("nothingHappens");
}
else if (IsEyth && !EClass.pc.HasElement(1228))
else if (IsEyth && !c.HasElement(1228))
{
if (EClass.pc.IsEyth)
if (c.IsEyth)
{
Msg.Say("nothingHappens");
}
else
{
Msg.Say("takeover_empty", EClass.pc.faith.Name);
TakeOver();
Msg.Say("takeover_empty", c.faith.Name);
TakeOver(c);
_OnOffer(c, t, 2);
}
}
else
{
if (t.HasTag(CTAG.godArtifact) && (t.c_idDeity == Deity.id || (EClass.pc.IsEyth && EClass.pc.HasElement(1228))))
if (t.HasTag(CTAG.godArtifact) && (t.c_idDeity == Deity.id || (c.IsEyth && c.HasElement(1228))))
{
_ = t.encLV;
t.Destroy();
Thing thing = EClass.game.religions.Reforge(t.id);
if (EClass.pc.IsEyth && EClass.pc.HasElement(1228) && IsEyth)
if (c.IsEyth && c.HasElement(1228) && IsEyth)
{
thing.c_idDeity = EClass.game.religions.Eyth.id;
}public void OnOffer(Chara c, Thing t)
}
return;
}
if (EClass.pc.IsEyth && !EClass.pc.HasElement(1228))
if (c.IsEyth && !c.HasElement(1228))
{
Msg.Say("nothingHappens");
return;
}
if (Deity.id != EClass.pc.faith.id)
if (Deity.id != c.faith.id)
{
bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200) || IsEyth;
if (GetParam(1) != null || EClass.pc.IsEyth)
bool flag = EClass.rnd(c.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200) || IsEyth;
if (GetParam(1) != null || c.IsEyth)
{
Msg.Say("nothingHappens");
return;
}
Msg.Say("takeover_versus", EClass.pc.faith.Name, Deity.Name);
Msg.Say("takeover_versus", c.faith.Name, Deity.Name);
if (flag)
{
Msg.Say("takeover_success", EClass.pc.faith.TextGodGender);
Msg.Say("takeover_success2", EClass.pc.faith.Name);
TakeOver();
Msg.Say("takeover_success", c.faith.TextGodGender);
Msg.Say("takeover_success2", c.faith.Name);
TakeOver(c);
_OnOffer(c, t, 5);
}
else
{
Msg.Say("takeover_fail", Deity.Name);
Deity.PunishTakeOver(EClass.pc);
Deity.PunishTakeOver(c);
}
}
elsepublic void _OnOffer(Chara c, Thing t, int takeoverMod = 0)
if (offeringValue >= 200)
{
Msg.Say("god_offer1", t);
EClass.pc.faith.Talk("offer");
c.faith.Talk("offer");
}
else if (offeringValue >= 100)
{public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)
{
c.faith.Talk("like");
}
if (@bool)
if (@bool && c.IsPC)
{
EClass.player.ModKarma(-1);
}
}
public void TakeOver()
public void TakeOver(Chara c)
{
SetDeity(EClass.pc.faith.id);
EClass.pc.faith.Talk("takeover");
EClass.pc.PlayEffect("revive");
SetDeity(c.faith.id);
c.faith.Talk("takeover");
c.PlayEffect("revive");
owner.PlayEffect("aura_heaven");
}
}TraitContainer โ
using UnityEngine;
public class TraitContainer : TraitBaseContainer
{
public override bool CanStack => false;}
else if (LayerInventory.CreateContainer(owner.Thing) != null)
{
TooltipManager.Instance.HideTooltips(immediate: true);
Debug.Log("a");
if (InvStyle.sound != null)
{
InvStyle.sound.Play();TraitLandingPortal โ
public class TraitLandingPortal : TraitItem
public class TraitLandingPortal : TraitItem
{
public override bool CanBeDestroyed => false;
public override bool CanOnlyCarry => true;
public override bool CanPutAway => false;
public override bool IsAnimeOn => IsOn;
public override bool UseAltTiles => IsOn;
public override bool CanUseFromInventory => false;
public override bool IsOn => EClass.game.survival?.gateZone != null;
public override bool IsOn
{
get
{
if (EClass.game.IsSurvival && EClass.game.survival.gateZone != null && !EClass.game.survival.gateZone.destryoed && owner.IsInstalled)
{
return EClass._zone.IsPCFaction;
}
return false;
}
}
public override bool CanUse(Chara c)
{public override bool CanUse(Chara c)
public override bool OnUse(Chara c)
{
if (!EClass.game.IsSurvival)
{
Msg.SayNothingHappen();
return false;
}
Zone gateZone = EClass.game.survival.gateZone;
if (gateZone == null || gateZone.destryoed || gateZone == EClass.game.activeZone || EClass.game.activeZone.IsRegion)
{+TraitSkyHelm โ
File Created
using UnityEngine;
public class TraitSkyHelm : TraitItem
{
public override bool OnUse(Chara c)
{
if (!EClass.game.IsSurvival)
{
Msg.SayNothingHappen();
return false;
}
EClass.game.survival.RefreshGateZones();
int ticket = EClass.pc.GetCurrency("ticket_sky");
EClass.ui.AddLayer<LayerList>().ManualList(delegate(UIList list, LayerList l)
{
list.moldItem = Resources.Load<ButtonElement>("UI/Element/Button/ButtonSkyTravel").transform;
list.callbacks = new UIList.Callback<Zone, ButtonElement>
{
onClick = delegate(Zone a, ButtonElement b)
{
int costSkyTravel = a.GetCostSkyTravel();
if (costSkyTravel > 0 && costSkyTravel > ticket)
{
if (EClass.debug.enable)
{
EClass.pc.ModCurrency(costSkyTravel * 2, "ticket_sky");
}
SE.Beep();
}
else
{
EClass.ui.FlashCover(1f, 0.5f, 1f, null, null, Color.black);
EClass.pc.ModCurrency(-costSkyTravel, "ticket_sky");
EClass.game.survival.gateZone = a;
SE.Play("ship_bell");
EClass.game.survival.listGateZone.Clear();
EClass.ui.CloseLayers();
EClass.pc.pos.TalkWitnesses(EClass.pc, "ahoy", 6, WitnessType.everyone, (Chara c) => true);
}
},
onRedraw = delegate(Zone a, ButtonElement b, int i)
{
int cost = a.GetCostSkyTravel();
b.mainText.text = a.NameWithDangerLevel;
b.subText2.text = ((cost == 0) ? "-" : (cost.ToString() ?? "")).TagColor(() => ticket >= cost || cost == 0);
b.RebuildLayout();
},
onInstantiate = delegate
{
},
onList = delegate
{
foreach (Zone item in EClass.game.survival.listGateZone)
{
list.Add(item);
}
}
};
}).SetSize()
.SetTitles("wSkyTravel")
.windows[0].AttachCurrency().Build(new UICurrency.Options
{
ticketSky = true
});
return false;
}
}+TraitSkyIncinerator โ
File Created
public class TraitSkyIncinerator : TraitRecycle
{
}-TraitStarHelm โ
File Removed
public class TraitStarHelm : TraitItem
{
}-TraitStarIncinerator โ
File Removed
public class TraitStarIncinerator : TraitRecycle
{
}UICurrency โ
public bool casino;
public bool weight;
public bool ticketSky;
}
public class Item{
Add(EMono.sources.cards.map["ecopo"].GetSprite(), "ecopo", () => EMono.pc.GetCurrency("ecopo").ToString("#,0") ?? "");
}
if (options.ticketSky)
{
Add(EMono.sources.cards.map["ticket_sky"].GetSprite(), "ticket_sky", () => EMono.pc.GetCurrency("ticket_sky").ToString("#,0") ?? "");
}
if (options.influence)
{
Add(icons[3], "influence", () => EMono._zone.influence.ToString() ?? "");Zone โ
public int GetDeepestLv(ref int max)
return max;
}
public int GetCostSkyTravel()
{
if (base.source.costSkyTravel > 0)
{
return base.source.costSkyTravel;
}
if (EClass.game.IsSurvival)
{
return Mathf.Clamp(10 + EClass.curve(DangerLv, 50, 10), 1, 200);
}
return 0;
}
public List<Element> ListLandFeats()
{
if (landFeats == null)