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)