EA 23.326 Nightly
July 9, 2026
39 files modified. 2 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Card (2)
public virtual void HealHPHost(int a, HealSource origin = HealSource.None)
public virtual void HealHPHost(long a, HealSource origin = HealSource.None) public virtual void HealHP(int a, HealSource origin = HealSource.None)
public virtual void HealHP(long a, HealSource origin = HealSource.None) Zone (1)
public void SetFieldEffect(int idEle, int a)
public void SetFieldEffect(int idEle, int a, int duration = 0) ABILITY
public override int GetPower(Card c)
}
}
a = EClass.curve(a, 400, 100);
if (this is Spell)
if (this is Spell || this is Song)
{
a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100;
}public override int GetPower(Card c)
return (int)a;
}
public static int GetSongPower(Chara c, int idSkill, int power)
{
long a = MathEx.Max(c.LV * 6 + 30, (long)c.Evalue(idSkill) * 4L + 30);
a = EClass.curve(a, 400, 100);
a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100;
if (a > 214748364)
{
a = 214748364L;
}
return (int)a;
}
public override void OnChangeValue()
{
Card card = owner.Card;ActEffect
void AddCon<T>(int rate, int power) where T : Condition
break;
}
case EffectId.HealComplete:
TC.HealHPHost(100000000, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item);
TC.HealHPHost(100000000L, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item);
TC.CureHost(CureType.HealComplete, power, state);
TC.Say("heal_heavy", TC);
break;
case EffectId.Heal:
case EffectId.JureHeal:
{
int num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
long num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
if (actRef.refThing != null)
{
num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100;void AddCon<T>(int rate, int power) where T : Condition
EClass.game.religions.Healing.Talk("ability");
num9 += TC.MaxHP / 4;
TC.AddCondition<ConInvulnerable>();
TC.HealHP(num9, HealSource.Item);
TC.Cure(CureType.Heal, power, state);
}
else
{
TC.HealHPHost(num9, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item);
TC.CureHost(CureType.Heal, power, state);
}
TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
TC.CureHost(CureType.Heal, power, state);
TC.Say((power >= 300) ? "heal_heavy" : "heal_light", TC);
break;
}
case EffectId.RemedyJure:
TC.HealHP(1000000, HealSource.Magic);
TC.HealHP(1000000L, HealSource.Magic);
TC.CureHost(CureType.Jure, power, state);
TC.Say("heal_jure", TC);
break;ActPray
public static void Pray(Chara c, bool passive)
static void Heal(Chara _c)
{
_c.PlayEffect("revive");
_c.HealHP(999999);
_c.HealHP(999999L);
_c.mana.Mod(999999);
_c.Cure(CureType.Prayer, 999999);
_c.RemoveCondition<ConDeathSentense>();Affinity
{
CC.Talk("thanks2");
}
if (flag3 || flag2)
{
CC.SetStr(72, CC.GetFavFood().id);
CC.SetStr(73, CC.GetFavCat().id);
}
CC.ModAffinity(EClass.pc, num);
return result;
}CINT
public const int dateLunchGift = 71;
public const int favFood = 72;
public const int favCat = 73;
public const int fiamaPet = 100;
public const int noRestock = 101;CTAG
alwaysDropCorpse,
allowDevour,
noRide,
ride
ride,
allowIngredient
}Card
public Window.SaveData GetWindowSaveData()
public bool IsExcludeFromCraft(Recipe.Ingredient ing)
{
if ((IsUnique && ing.id != id && !ing.idOther.Contains(id)) || c_isImportant)
if ((IsUnique && !HasTag(CTAG.allowIngredient) && ing.id != id && !ing.idOther.Contains(id)) || c_isImportant)
{
return true;
}public int GetCurrency(string id = "money")
return (int)sum;
}
public virtual void HealHPHost(int a, HealSource origin = HealSource.None)
public virtual void HealHPHost(long a, HealSource origin = HealSource.None)
{
if (isChara)
{public virtual void HealHPHost(int a, HealSource origin = HealSource.None)
HealHP(a, origin);
}
public virtual void HealHP(int a, HealSource origin = HealSource.None)
public virtual void HealHP(long a, HealSource origin = HealSource.None)
{
long num = a;
if (origin == HealSource.Magic)
{
num = (long)a * (long)Mathf.Max(100 - Evalue(93), 1) / 100;
a = a * Mathf.Max(100 - Evalue(93), 1) / 100;
}
if (num > 100000000)
if (a + hp >= MaxHP)
{
num = 100000000L;
hp = MaxHP;
}
hp += (int)num;
if (hp > MaxHP)
else
{
hp = MaxHP;
hp += (int)a;
}
switch (origin)
{public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
{
Say("wall_bond", chara3, this);
chara3.DamageHP(dmg, ele, eleP, attackSource, origin, showEffect, weapon, Chara);
origin?.Chara?.DoHostileAction(chara3);
return;
}
}public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
{
int num = chara4.Evalue(1241);
int num2 = chara4.Evalue(438);
if ((num != 0 || num2 != 0) && !chara4.IsDisabled && !chara4.isRestrained && (!IsPCFactionOrMinion || chara4.IsPCFactionOrMinion) && (IsPCFactionOrMinion || !chara4.IsPCFactionOrMinion) && chara4.Dist(this) <= Mathf.Max(num, (num2 > 0) ? 1 : 0) && (num != 0 || num2 <= 0 || hp * 100 / MaxHP <= chara4.hp * 100 / chara4.MaxHP))
if ((num != 0 || num2 != 0) && !chara4.IsDisabled && !chara4.isRestrained && (!IsPCFactionOrMinion || chara4.IsPCFactionOrMinion) && (IsPCFactionOrMinion || !chara4.IsPCFactionOrMinion) && chara4.Dist(this) <= Mathf.Max(num, (num2 > 0) ? 1 : 0) && (num != 0 || num2 <= 0 || (long)hp * 100L / MaxHP <= (long)chara4.hp * 100L / chara4.MaxHP))
{
Say((num2 == 0) ? "wall_flesh" : "wall_knightly", chara4, this);
chara4.DamageHP(dmg * (100L + (long)((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect, weapon, Chara);
origin?.Chara?.DoHostileAction(chara4);
return;
}
}public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
Chara.AddCondition<ConFractured>((int)Mathf.Max(10f, 30f - Mathf.Sqrt(Evalue(436))));
hp = Mathf.Min(half * (int)Mathf.Sqrt(Evalue(436) * 2) / 100, MaxHP / 3);
});
goto IL_10a8;
goto IL_1107;
}
}
if (zoneInstanceBout != null && (bool)LayerDrama.Instance)public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
if (EClass.player.invlunerable)
{
EvadeDeath(null);
goto IL_10a8;
goto IL_1107;
}
}
if (Evalue(1220) > 0 && Chara.stamina.value >= (IsPC ? (Chara.stamina.max / 2) : (Chara.stamina.max / 3 * 2)))public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
}
}
goto IL_10a8;
IL_10a8:
goto IL_1107;
IL_1107:
if (trait.CanBeAttacked)
{
renderer.PlayAnime(AnimeID.HitObj);public void SpawnLoot(Card origin)
default:
{
string text = Chara.race.corpse[0];
if (id == "titan_iron")
{
text = "ingot";
}
bool num2 = text == "_meat";
int num3 = 10;
if (AI_Slaughter.slaughtering)public bool HasElementNoCopy()
{
return true;
}
if (HasElement(766))
{
return true;
}
return false;
}public int GetValue(PriceType priceType = PriceType.Default, bool sell = false)
{
num2 *= (float)(tier + 1);
}
if (num2 > 2.1474836E+09f)
{
return int.MaxValue;
}
return (int)num2;
}Chara
public override void SetRenderParam(RenderParam p)
if (source._tiles_snow.Length > 1)
{
int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
if (num < 0)
{
num = 0;
}
p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
}
elsepublic override void SetRenderParam(RenderParam p)
else if (sourceCard._tiles.Length > 1)
{
int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
if (num2 < 0)
{
num2 = 0;
}
p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
}
elsepublic SourceThing.Row GetFavFood()
return value;
}
}
string str = GetStr(72);
if (!str.IsEmpty() && EClass.sources.things.map[str] != null)
{
return EClass.sources.things.map[str];
}
if (_listFavFood.Count == 0)
{
foreach (SourceThing.Row row in EClass.sources.things.rows)public SourceCategory.Row GetFavCat()
return value;
}
}
string str = GetStr(73);
if (!str.IsEmpty() && EClass.sources.categories.map[str] != null)
{
return EClass.sources.categories.map[str];
}
SourceCategory.Row r = null;
if (_listFavCat.Count == 0)
{ConIncognito
public class ConIncognito : BaseBuff
{
public override void OnStart()
{
EClass._zone.ResetHostility();
EClass._zone.RefreshCriminal();
if (!EClass._zone.HasField(10002))
{
EClass._zone.ResetHostility();
EClass._zone.RefreshCriminal();
EClass._zone.SetFieldEffect(10002, 1, 20);
}
}
public override void OnRemoved()
{
EClass._zone.RefreshCriminal();
if (!EClass._zone.HasField(10002))
{
EClass._zone.RefreshCriminal();
}
}
}ConTransmute
public override void OnHit(Card attacker, AttackSource source)
public void Change()
{
if (owner.ai is GoalCombat { abilities: not null } goalCombat)
if (owner.ai is GoalCombat { IsRunning: not false, abilities: not null } goalCombat)
{
goalCombat.BuildAbilityList();
}CustomElementContent
public static CustomElementContent CreateFromRow(SourceElement.Row r, ModPackage
public override void OnGameLoad(GameIOContext context)
{
SourceElement.Row row = EClass.sources.elements.alias[base.SourceId];
if (addOnLoad && !EClass.pc.HasElement(base.SourceId))
SourceElement.Row row = EClass.sources.elements.alias.TryGetValue(base.SourceId);
if (row != null && addOnLoad && !EClass.pc.HasElement(base.SourceId))
{
switch (row.group)
{CustomThingContent
public void OnThingCreated(Thing thing)
int value3 = value2;
thing.SetInt(text2, value3);
}
thing.ChangeRarity(rarity);
if (thing.source.ContainsTag("forceRarity"))
{
thing.ChangeRarity(rarity);
}
if (noCopy)
{
EClass.core.actionsNextFrame.Add(delegatepublic Thing Create(int createLv = -1)
{
thing.SetStr("price_calc_override", priceCalc);
}
thing.ChangeRarity(rarity);
return thing;
}CustomZoneContent
public override void OnGameLoad(GameIOContext context)
Zone zone = ModUtil.FindZoneByFullName(parent);
if (zone != null)
{
Spatial arg = SpatialGen.Create(base.SourceId, zone, register: true);
Debug.Log($"#mod-content spawned custom zone {arg}");
Spatial spatial = SpatialGen.Create(base.SourceId, zone, register: true);
EClass.game.world.region.elomap.SetZone(spatial.x, spatial.y, spatial as Zone);
Debug.Log($"#mod-content spawned custom zone {spatial}");
return;
}
ModUtil.LogModError("source zone row '" + base.SourceId + "' has invalid addMap parent '" + parent + "'", base.Owner);ELEMENT
public const int recharge = 761;
public const int effectRange = 770;
public const int forbidden = 766;
public const int comfort = 750;
public const int _void = 0;
public const int nutrition = 10;
public const int weight = 11;
public const int lv = 1;
public const int socket = 5;
public const int weight = 11;
public const int nutrition = 10;
public const int effectRange = 770;
public const int size = 12;
public const int water = 15;
public const int decay = 17;
public const int heat = 16;
public const int taste = 18;
public const int poison = 20;
public const int heat = 16;
public const int decay = 17;
public const int cut = 22;
public const int fire = 21;
public static readonly int[] IDS = new int[37]
public static readonly int[] IDS = new int[38]
{
765, 763, 762, 751, 752, 753, 754, 755, 756, 759,
760, 761, 770, 750, 0, 10, 1, 2, 3, 5,
11, 12, 13, 14, 15, 17, 18, 20, 16, 22,
23, 24, 25, 26, 29, 85, 21
760, 761, 766, 750, 0, 11, 1, 2, 3, 5,
10, 770, 12, 13, 14, 15, 16, 18, 20, 17,
22, 23, 24, 25, 26, 29, 85, 21
};
}
public class Element : EClassENC
public const int noDamage = 654;
public const int r_mana = 641;
public const int living = 653;
public const int r_PV = 651;
public const int r_mana = 641;
public const int r_DV = 650;
public const int eco = 652;
public const int absorbHP = 660;
public const int r_life = 640;
public const int r_DV = 650;
public const int absorbMP = 661;
public const int convertCold = 851;
public const int convertFire = 850;
public const int eheluck = 663;
public const int encRagnarok = 667;
public const int convertFire = 850;
public const int mod_frustration = 624;
public const int r_life = 640;
public const int convertImpact = 865;
public const int convertLightning = 852;
public const int convertCold = 851;
public const int absorbSP = 662;
public const int mod_feint = 623;
public const int mod_frustration = 624;
public const int sustain_LER = 444;
public const int mod_flurry = 621;
public const int mod_cleave = 622;
public const int negatePoison = 420;
public const int slowCorruption = 412;
public const int mod_cleave = 622;
public const int encHit = 414;
public const int invisibility = 415;
public const int mod_feint = 623;
public const int sustain_STR = 440;
public const int sustain_END = 441;
public const int encHit = 414;
public const int invisibility = 415;
public const int sustain_PER = 443;
public const int mod_ammo = 600;
public const int deathagony = 488;
public const int mod_reload = 601;
public const int mod_ammo_knockback = 603;
public const int mod_ammo_recover = 604;
public const int mod_precision = 605;
public const int mod_chaser = 620;
public const int mod_flurry = 621;
public const int sustain_DEX = 442;
public const int mod_ammo_knockback = 603;
public const int deathagony = 488;
public const int creativeChef = 487;
public const int bane_dragon = 460;
public const int bane_machine = 465;
public const int bane_god = 466;
public const int bane_fish = 467;
public const int optimizeMana = 483;
public const int bane_machine = 465;
public const int slot_rune = 484;
public static readonly int[] IDS = new int[112]
{
656, 655, 654, 653, 651, 641, 650, 652, 660, 640,
661, 851, 663, 664, 665, 666, 667, 850, 624, 865,
864, 852, 662, 623, 444, 621, 420, 421, 422, 423,
424, 425, 426, 427, 419, 428, 430, 431, 432, 435,
436, 437, 438, 439, 429, 418, 417, 416, 380, 381,
382, 383, 400, 401, 402, 403, 404, 405, 406, 407,
408, 409, 410, 411, 412, 622, 415, 440, 441, 414,
443, 489, 490, 491, 492, 493, 494, 495, 600, 488,
601, 604, 605, 606, 607, 608, 609, 620, 442, 603,
656, 655, 654, 641, 653, 651, 652, 660, 650, 661,
850, 663, 664, 665, 666, 667, 640, 865, 864, 852,
851, 662, 624, 444, 622, 420, 421, 422, 423, 424,
425, 426, 427, 419, 428, 430, 431, 432, 435, 436,
437, 438, 439, 429, 418, 417, 416, 380, 381, 382,
383, 400, 401, 402, 403, 404, 405, 406, 407, 408,
409, 410, 411, 412, 414, 623, 440, 441, 415, 443,
489, 490, 491, 492, 493, 494, 495, 600, 601, 603,
604, 605, 606, 607, 608, 609, 620, 621, 442, 488,
487, 602, 485, 486, 445, 446, 447, 450, 461, 462,
463, 464, 460, 466, 467, 468, 480, 481, 482, 483,
465, 484
463, 464, 460, 465, 466, 467, 468, 480, 481, 482,
483, 484
};
}ElementContainer
parent.ModLink(id, -element.Value);
}
dict.Remove(id);
element.owner = null;
}
}FACTION
public class FACTION
{
public const int bfRuin = 3702;
public const int bfForest = 3601;
public const int bfSnow = 3602;
public const int bfFertile = 3700;
public const int bfRuin = 3702;
public const int bfPlain = 3600;
public const int bfSea = 3605;
public static readonly int[] IDS = new int[53]
{
3702, 3601, 3602, 3603, 3604, 3701, 3606, 3700, 3600, 3605,
3601, 3602, 3603, 3604, 3701, 3606, 3700, 3702, 3600, 3605,
3500, 2119, 2206, 2205, 2204, 2202, 2201, 2200, 2116, 2120,
2118, 2117, 3703, 2207, 3704, 4002, 3706, 2115, 4006, 4005,
4004, 4003, 4001, 4000, 3900, 3805, 3804, 3803, 3802, 3801,+FieldEffectAlert
File Created
public class FieldEffectAlert : FieldEffect
{
}FoodEffect
public static void ProcNutrition(Chara c, Thing food, float effP, float validFil
}
string[] foodEffect = value.source.foodEffect;
int id = value.id;
float num = effP * (float)value.Value;
float num = effP * (float)Mathf.Min(value.Value, 10000);
if (value.source.category == "food" && c.IsPC)
{
bool flag2 = num >= 0f;GameDate
public const int minPerRound = 5;
private List<Element> _fieldEffectsToRemove = new List<Element>();
public void AdvanceSec(int a)
{
base.sec += a; EClass.player.countNewline = 0;
}
EClass.screen.pcOrbit.OnChangeMin();
foreach (ZoneEvent item in EClass._zone.events.list)
if (EClass._zone.fieldElements.dict.Count > 0)
{
_fieldEffectsToRemove.Clear();
foreach (Element value in EClass._zone.fieldElements.dict.Values)
{
if (value.vPotential > 0)
{
value.vPotential--;
if (value.vPotential == 0)
{
_fieldEffectsToRemove.Add(value);
}
}
}
foreach (Element item in _fieldEffectsToRemove)
{
EClass._zone.RemoveFieldEffect(item.id);
}
}
foreach (ZoneEvent item2 in EClass._zone.events.list)
{
item.minElapsed += a;
item2.minElapsed += a;
}
}GoalCombat
return true;
}
}
if (owner != null && owner.IsAliveInCurrentZone && owner.CanDestroyPath() && (!owner.CanSeeLos(tc) || !owner.CanInteractTo(tc.pos)) && tc.Dist(owner) == 1 && tc.pos.HasBridge != owner.pos.HasBridge)
{
if (tc.pos.HasBridge)
{
EClass._map.SetBridge(tc.pos.x, tc.pos.z, 0, 0, 0, 0, 0);
}
else
{
EClass._map.SetBridge(owner.pos.x, owner.pos.z, 0, 0, 0, 0, 0);
}
}
if (EClass.debug.logCombat)
{
Debug.Log(owner.Name + "/" + abilities.Count);GrowSystemWeed
public override void OnMineObj(Chara c = null)
PopHarvest(c ?? EClass.pc, ThingGen.Create("grass", EClass.sources.materials.alias["grass"].id), EClass.rnd(5));
base.OnMineObj(c);
}
public override void OnSetObj()
{
GrowSystem.cell.objDir = EClass.rnd(source.tiles.Length);
}
public override int GetStageTile()
{
return source._tiles[GrowSystem.cell.objDir % source._tiles.Length] + GrowSystem.currentStage.idx - 2;
}
}Map
public void SetFloor(int x, int z, int idMat, int idFloor, int dir)
cell._floorMat = (byte)idMat;
cell._floor = (byte)idFloor;
cell.floorDir = dir;
cell.isWatered = false;
Critter.RebuildCritter(cell);
RefreshNeighborTiles(x, z);
}Player
public Layer SelectDomain(Action onKill = null)
List<SourceElement.Row> list2 = new List<SourceElement.Row>();
foreach (SourceElement.Row row2 in EClass.sources.elements.rows)
{
if (row2.categorySub == "eleAttack" && !row2.tag.Contains("hidden") && ((EClass.pc.HasElement(1402) && Guild.Mage.relation.rank >= 6 && row2.id != 925 && row2.id != 926) || !row2.tag.Contains("high") || EClass.pc.job.domain.Contains(row2.id)))
if (row2.categorySub == "eleAttack" && !row2.tag.Contains("hidden") && ((EClass.pc.HasElement(1402) && Guild.Mage.relation.rank >= 6 && row2.id != 925 && row2.id != 926 && row2.id != 927) || !row2.tag.Contains("high") || EClass.pc.job.domain.Contains(row2.id)))
{
list2.Add(row2);
}Props
}
void TryAdd(Thing t)
{
if (t.HasElement(10) && !(t.trait is TraitFoodFishSlice) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t))
if (t.HasElement(10) && !(t.trait is TraitFoodFishSlice) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.category.IsChildOf("drink") && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t))
{
stack.Add(t.Thing);
}Recipe
static string CatName(string id)
public bool IsValidIngredient(Thing t)
{
if (ingType == IngType.CreativeFood && t.HasElement(10) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !(t.trait is TraitFoodFishSlice))
if (ingType == IngType.CreativeFood && t.HasElement(10) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.category.IsChildOf("drink") && !(t.trait is TraitFoodFishSlice))
{
return true;
}SPELL
{
public const int SpEnchantWeapon = 8250;
public const int ball_Holy = 50109;
public const int flare_Nerve = 51208;
public const int bit_Nerve = 51108;
public const int weapon_Nerve = 50808;
public const int sword_ = 7008;
public const int miasma_Nerve = 50708;
public const int arrow_Nerve = 50508;
public const int ball_Holy = 50109;
public const int funnel_Nerve = 50608;
public const int hand_Nerve = 50408;
public const int flare_Sound = 51207;
public const int funnel_Nerve = 50608;
public const int bit_Sound = 51107;
public const int bolt_Holy = 50309;
public const int arrow_Nerve = 50508;
public const int hand_Holy = 50409;
public const int sword_ = 7008;
public const int arrow_Holy = 50509;
public const int bolt_Holy = 50309;
public const int weapon_Chaos = 50810;
public const int hand_Holy = 50409;
public const int miasma_Chaos = 50710;
public const int funnel_Holy = 50609;
public const int bit_Sound = 51107;
public const int puddle_Chaos = 50910;
public const int arrow_Holy = 50509;
public const int sword_Sound = 51007;
public const int weapon_Sound = 50807;
public const int weapon_Chaos = 50810;
public const int flare_Poison = 51205;
public const int puddle_Sound = 50907;
public const int miasma_Sound = 50707;
public const int bit_Poison = 51105;
public const int miasma_Poison = 50705;
public const int ball_Nether = 50106;
public const int funnel_Poison = 50605;
public const int hand_Poison = 50405;
public const int flare_Poison = 51205;
public const int arrow_Poison = 50505;
public const int bolt_Poison = 50305;
public const int bit_Mind = 51104;
public const int arrow_Poison = 50505;
public const int sword_Mind = 51004;
public const int puddle_ = 7800;
public const int hand_Poison = 50405;
public const int bolt_Nether = 50306;
public const int ball_Nether = 50106;
public const int hand_Nether = 50406;
public const int puddle_ = 7800;
public const int miasma_Sound = 50707;
public const int bolt_Nether = 50306;
public const int funnel_Sound = 50607;
public const int arrow_Nether = 50506;
public const int puddle_Sound = 50907;
public const int hand_Nether = 50406;
public const int sword_Mind = 51004;
public const int weapon_Sound = 50807;
public const int puddle_Chaos = 50910;
public const int sword_Chaos = 51010;
public const int flare_Chaos = 51210;
public const int bit_Chaos = 51110;
public const int bolt_Impact = 50315;
public const int ball_Cut = 50114;
public const int bit_Chaos = 51110;
public const int flare_Acid = 51213;
public const int bit_Acid = 51113;
public const int sword_Acid = 51013;
public const int funnel_ = 7005;
public const int puddle_Magic = 50911;
public const int bolt_Ether = 50312;
public const int weapon_Magic = 50811;
public const int miasma_Magic = 50711;
public const int funnel_Magic = 50611;
public const int arrow_Magic = 50511;
public const int ball_Magic = 50111;
public const int miasma_Magic = 50711;
public const int flare_Chaos = 51210;
public const int hand_Ether = 50412;
public const int bolt_Ether = 50312;
public const int arrow_Ether = 50512;
public const int puddle_Mind = 50904;
public const int hand_Ether = 50412;
public const int funnel_Ether = 50612;
public const int miasma_Ether = 50712;
public const int bit_Acid = 51113;
public const int arrow_Ether = 50512;
public const int puddle_Mind = 50904;
public const int SpUncurseG = 8241;
public const int weapon_Mind = 50804;
public const int miasma_Mind = 50704;
public const int funnel_Mind = 50604;
public const int SpIncognito = 8780;
public const int SpSummonTrooper = 9052;
public const int bit_Lightning = 51102;
public const int sword_Lightning = 51002;
public const int puddle_Lightning = 50902;
public const int funnel_Lightning = 50602;
public const int flare_Lightning = 51202;
public const int arrow_Lightning = 50502;
public const int bolt_Lightning = 50302;
public const int bit_Lightning = 51102;
public const int hand_Lightning = 50402;
public const int SpTelekinesis = 8215;
public const int sword_Cold = 51001;
public const int hand_Lightning = 50402;
public const int puddle_Cold = 50901;
public const int ball_Darkness = 50103;
public const int bolt_Lightning = 50302;
public const int SpGate = 8202;
public const int flare_Lightning = 51202;
public const int bolt_Darkness = 50303;
public const int ball_Darkness = 50103;
public const int funnel_Mind = 50604;
public const int SpGate = 8202;
public const int arrow_Mind = 50504;
public const int hand_Darkness = 50403;
public const int puddle_Cold = 50901;
public const int bolt_Darkness = 50303;
public const int weapon_Cold = 50801;
public const int funnel_Cold = 50601;
public const int arrow_Cold = 50501;
public const int SpDrawBacker = 9503;
public const int SpDrawMetal = 9502;
public const int FieldSpider = 10000;
public const int SpUncurseG = 8241;
public const int miasma_Mind = 50704;
public const int FieldFeast = 10001;
public const int bit_Void = 51116;
public const int arrow_Cold = 50501;
public const int ball_Fire = 50100;
public const int hand_Cold = 50401;
public const int bolt_Fire = 50300;
public const int ball_Fire = 50100;
public const int bit_Void = 51116;
public const int FieldAlert = 10002;
public const int flare_Void = 51216;
public static readonly int[] IDS = new int[296]
public static readonly int[] IDS = new int[297]
{
8250, 50109, 51208, 51108, 51008, 50908, 50808, 7008, 50708, 50508,
50408, 50308, 7009, 50108, 51207, 50608, 50309, 50409, 50509, 50810,
50710, 50610, 50510, 50410, 50310, 7007, 50110, 51209, 51109, 51009,
50909, 50809, 50709, 50609, 51107, 50910, 51007, 50807, 51205, 51105,
51005, 50905, 50805, 50705, 50106, 50605, 50405, 50305, 8200, 50105,
51204, 51104, 50505, 7800, 50306, 50406, 50707, 50607, 50507, 50407,
50307, 7010, 50107, 51206, 51106, 51006, 50906, 50806, 50706, 50606,
50506, 50907, 51004, 51010, 51210, 50315, 7002, 50115, 51214, 51114,
8250, 51208, 51108, 51008, 50908, 50808, 50708, 50109, 50608, 50408,
50308, 7009, 50108, 51207, 51107, 50508, 7008, 50309, 50409, 50710,
50610, 50510, 50410, 50310, 7007, 50110, 51209, 51109, 51009, 50909,
50809, 50709, 50609, 50509, 51007, 50810, 50907, 50707, 51105, 51005,
50905, 50805, 50705, 50605, 51205, 50505, 50305, 8200, 50105, 51204,
51104, 51004, 50405, 50106, 7800, 50306, 50607, 50507, 50407, 50307,
7010, 50107, 51206, 51106, 51006, 50906, 50806, 50706, 50606, 50506,
50406, 50807, 50910, 51010, 51110, 50315, 7002, 50115, 51214, 51114,
51014, 50415, 50914, 50714, 50614, 50514, 50414, 50314, 7003, 50814,
50515, 50615, 50715, 51016, 50916, 50816, 50716, 50616, 50516, 50416,
50316, 7001, 50116, 51215, 51115, 51015, 50915, 50815, 50114, 51110,
51213, 51013, 7005, 50112, 51211, 51111, 51011, 50911, 50312, 50811,
50611, 50511, 50411, 50311, 7006, 50111, 50711, 50412, 50512, 50612,
50913, 50813, 50713, 50613, 50513, 50413, 50313, 7004, 50113, 51212,
51112, 51012, 50912, 50812, 50712, 51113, 50904, 50804, 50704, 8780,
8776, 8775, 8770, 8721, 8720, 8790, 8710, 8707, 8706, 8705,
8704, 8702, 8700, 8708, 8791, 8792, 8240, 9009, 9008, 9007,
9006, 9005, 9004, 9003, 9002, 9001, 9000, 8801, 8800, 8221,
8230, 8232, 8555, 9010, 8550, 8507, 8400, 8390, 8380, 8300,
8288, 8286, 8401, 8285, 8281, 8280, 8260, 8256, 8255, 8251,
8284, 8402, 8403, 8404, 8506, 8504, 8503, 8502, 8501, 8500,
8491, 8490, 8480, 8471, 8470, 8450, 8430, 8406, 8405, 8510,
9050, 9051, 9052, 51102, 51002, 50902, 50802, 50702, 50602, 51202,
50502, 50302, 8215, 50102, 51201, 51101, 51001, 50402, 50103, 8202,
50303, 50604, 50504, 50404, 50304, 8201, 50104, 51203, 51103, 51003,
50903, 50803, 50703, 50603, 50503, 50403, 50901, 50801, 50701, 50601,
9503, 9502, 9501, 9500, 9210, 9200, 9160, 9156, 9155, 9151,
9150, 9056, 9055, 9054, 9053, 10000, 8241, 10001, 51116, 50501,
50316, 7001, 50116, 51215, 51115, 51015, 50915, 50815, 50114, 51213,
51113, 51013, 7005, 50112, 51211, 51111, 51011, 50911, 50811, 50711,
50611, 50511, 50411, 50311, 7006, 50111, 51210, 50312, 50904, 50412,
50612, 50913, 50813, 50713, 50613, 50513, 50413, 50313, 7004, 50113,
51212, 51112, 51012, 50912, 50812, 50712, 50512, 8241, 50804, 50604,
8780, 8776, 8775, 8770, 8721, 8720, 8790, 8710, 8707, 8706,
8705, 8704, 8702, 8700, 8708, 8791, 8792, 8240, 9009, 9008,
9007, 9006, 9005, 9004, 9003, 9002, 9001, 9000, 8801, 8800,
8221, 8230, 8232, 8555, 9010, 8550, 8507, 8400, 8390, 8380,
8300, 8288, 8286, 8401, 8285, 8281, 8280, 8260, 8256, 8255,
8251, 8284, 8402, 8403, 8404, 8506, 8504, 8503, 8502, 8501,
8500, 8491, 8490, 8480, 8471, 8470, 8450, 8430, 8406, 8405,
8510, 9050, 9051, 9052, 51002, 50902, 50802, 50702, 50602, 50502,
51102, 50402, 8215, 50102, 51201, 51101, 51001, 50901, 50302, 51202,
50103, 8202, 50504, 50404, 50304, 8201, 50104, 51203, 51103, 51003,
50903, 50803, 50703, 50603, 50503, 50403, 50303, 50801, 50701, 50601,
50501, 9503, 9502, 9501, 9500, 9210, 9200, 9160, 9156, 9155,
9151, 9150, 9056, 9055, 9054, 9053, 10000, 50704, 10001, 50100,
50401, 50301, 8220, 50101, 51200, 51100, 51000, 50900, 50800, 50700,
50600, 50500, 50400, 50300, 50100, 51216
50600, 50500, 50400, 50300, 51116, 10002, 51216
};
}
public class Spell : AbilityShopType
KeeperOfGarden,
TravelMerchant,
TravelMerchant2,
CustomContent
CustomContent,
AnimalGoods
}+Song
File Created
public class Song : Ability
{
}SourceDeco
public float autotileBrightness;
[NonSerialized]
public string name_L;
[NonSerialized]
public string detail_L;
public override bool UseAlias => true;
public override string GetAlias => alias;SourceManager
public void OnChangeLang()
{
InitLang();
}
public void Init()StanceSongEnd
public class StanceSongEnd : BaseSong
public override void TickSong()
{
if (owner.IsPCFactionOrMinion && EClass._zone.isPeace)
{
return;
}
foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => !c.IsDeadOrSleeping && c.IsHostile(owner)))
{
if (owner == null || !owner.ExistsOnMap)TaskDrawWater
public override void OnCreateProgress(Progress_Custom p)
num = ((num <= 0) ? 1 : (2 + num / 10));
if (num > 1)
{
List<Point> list = EClass._map.ListPointsInSquare(pos, num - 1);
List<Point> list = EClass._map.ListPointsInSquare(pos, num - 1, mustBeWalkable: false);
list.Sort((Point a, Point b) => a.Distance(pos) - b.Distance(pos));
{
foreach (Point item in list)TileType
public HitResult _HitTest(Point pos, Card target, bool canIgnore = true)
}
if (pos.HasBlock)
{
if (!CanBuiltOnBlock && pos.sourceBlock.tileType.IsOccupyCell && !EClass.core.config.test.allowBlockOnItem)
if (!CanBuiltOnBlock && pos.sourceBlock.tileType.IsOccupyCell && (!EClass.core.config.test.allowBlockOnItem || !EClass._zone.IsPCFactionOrTent))
{
return HitResult.Invalid;
}Trait
{
case ShopType.Dye:
{
Thing thing = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30));
thing.ChangeMaterial(EClass.sources.materials.rows.Where((SourceMaterial.Row r) => r.tier <= 4).RandomItem().alias);
return thing;
Thing thing4 = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30));
thing4.ChangeMaterial(EClass.sources.materials.rows.Where((SourceMaterial.Row r) => r.tier <= 4).RandomItem().alias);
return thing4;
}
case ShopType.GeneralExotic:
return FromFilter("shop_generalExotic"); return FromFilter("shop_magic");
case ShopType.Ecopo:
{
Thing thing2 = TraitSeed.MakeRandomSeed(enc: true);
Thing thing3 = TraitSeed.MakeRandomSeed(enc: true);
if (EClass.rnd(2) == 0)
{
TraitSeed.LevelSeed(thing2, (thing2.trait as TraitSeed).row, 1);
TraitSeed.LevelSeed(thing3, (thing3.trait as TraitSeed).row, 1);
}
return thing2;
return thing3;
}
case ShopType.AnimalGoods:
if (EClass.rnd(2) == 0)
{
return Create("saddle");
}
if (EClass.rnd(2) == 0)
{
return Create("saddle_waist");
}
return Create("pasture");
case ShopType.Healer:
{
Thing thing3 = null;
Thing thing2 = null;
for (int i = 0; i < 1000; i++)
{
thing3 = FromFilter("shop_healer");
if (thing3.trait is TraitScroll { source: not null } traitScroll)
thing2 = FromFilter("shop_healer");
if (thing2.trait is TraitScroll { source: not null } traitScroll)
{
if (!(traitScroll.source.aliasParent != "WIL") && !(traitScroll.source.categorySub == "attack"))
{
break;
}
}
else if (thing3.trait is TraitPotionRandom { source: not null } traitPotionRandom)
else if (thing2.trait is TraitPotionRandom { source: not null } traitPotionRandom)
{
if (!(traitPotionRandom.source.aliasParent != "WIL") && !(traitPotionRandom.source.categorySub == "attack"))
{
thing3.SetNum(EClass.rnd(5) + 1);
thing2.SetNum(EClass.rnd(5) + 1);
break;
}
}
else if (thing3.trait is TraitRodRandom { source: not null } traitRodRandom && !(traitRodRandom.source.aliasParent != "WIL") && !(traitRodRandom.source.categorySub == "attack"))
else if (thing2.trait is TraitRodRandom { source: not null } traitRodRandom && !(traitRodRandom.source.aliasParent != "WIL") && !(traitRodRandom.source.categorySub == "attack"))
{
break;
}
}
return thing3;
return thing2;
}
case ShopType.Milk:
if (EClass._zone is Zone_Nefu && EClass.rnd(2) == 0)
{
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;
Thing thing = ThingGen.Create("_milk");
thing.MakeRefFrom(EClass.sources.charas.rows.Where((SourceChara.Row r) => r.race == "mifu" || r.race == "nefu").RandomItem().model);
Debug.Log(thing);
return thing;
}
return Create("_milk");
case ShopType.Map:TraitAnimalTamer
public class TraitAnimalTamer : TraitCitizen
public class TraitAnimalTamer : TraitCitizen
public class TraitAnimalTamer : TraitMerchant
{
public override int GuidePriotiy => 15;
public override SlaverType SlaverType => SlaverType.Animal;
public override ShopType ShopType => ShopType.AnimalGoods;
}TraitFigure
public override int GetValue()
{
return base.GetValue();
}
return MathEx.ClampToInt((base.GetValue() + Mathf.Min(source.LV, 2000000) * 50) * ((!source.multisize) ? 1 : 2) * ((source.quality < 4) ? 1 : 2));
return MathEx.ClampToInt((base.GetValue() + Mathf.Min(source.LV, 1000000) * 50) * ((!source.multisize) ? 1 : 2) * ((source.quality < 4) ? 1 : 2));
}
public override void TrySetAct(ActPlan p)TraitMixer
public class TraitMixer : TraitChopper
public class TraitMixer : TraitChopper
{
public override bool Contains(RecipeSource r)
{
if (!base.Contains(r))
{
return r.idFactory == "mixer";
}
return true;
}
}TraitPowerStatue
public virtual bool IsImplemented()
{
return true;
}
public override void SetName(ref string s)
{
if (!(this is TraitGodStatue) && !owner.isOn)
{
s = s + Lang.space + "empty".lang();
}
}
}WidgetDate
gridFieldEffect.childAlignment = (flag ? TextAnchor.UpperRight : TextAnchor.UpperLeft);
foreach (UIButton componentsInDirectChild in gridFieldEffect.GetComponentsInDirectChildren<UIButton>())
{
if (!(componentsInDirectChild.refObj is FieldEffect fieldEffect) || fieldEffect.owner != EMono._zone.fieldElements || fieldEffect.Value == 9)
if (!(componentsInDirectChild.refObj is FieldEffect fieldEffect) || fieldEffect.owner != EMono._zone.fieldElements || fieldEffect.Value == 0)
{
UnityEngine.Object.DestroyImmediate(componentsInDirectChild.gameObject);
}Zone
public Zone FindOrCreateLevel(int destLv, string subId = "")
{
if (destLv == base.lv)
{
return this;
}
Zone zone = FindZone(destLv);
if (zone != null)
{ base.visitCount++;
}
base.version = EClass.core.version.GetInt();
if (fieldElements.dict.Count() > 0)
if (HasField(10000))
{
Tutorial.Reserve("field");
}public bool HasField(int idEle)
return fieldElements.Has(idEle);
}
public void SetFieldEffect(int idEle, int a)
public void SetFieldEffect(int idEle, int a, int duration = 0)
{
fieldElements.SetBase(idEle, a, duration);
}
public void RemoveFieldEffect(int idEle)
{
fieldElements.SetBase(idEle, a);
fieldElements.Remove(idEle);
}
public void RefreshElectricity()