EA 23.304 Nightly โ
May 9, 2026
18 files modified.
Important Changes โ
Possible breaking changes. Click the filename to view the chunk.
Card (1) โ
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null)
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null, int resistPenetrationLevel = 0) CharaBody (1) โ
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool secondSlot = false)
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool getSecondSlot = false) AI_Fuck โ
Thing thing = null;
for (int j = 0; j < 10; j++)
{
thing = target.MakeGene((j < 3) ? DNA.Type.Superior : DNA.Type.Default);
for (int k = 0; k < 20; k++)
{
thing = target.MakeGene((j < 3) ? DNA.Type.Superior : DNA.Type.Default);
if (EClass.rnd(10) < chara.body.slots.Count - 2)
{
break;
}
if (thing.c_DNA.GetBodySlot() != -1)
{
if (chara.body.GetSlot(35, onlyEmpty: false) == null && EClass.rnd(2) == 0)
{
thing.c_DNA.ReplaceBodySlot(35);
}
else if (chara.body.GetSlot(32, onlyEmpty: false) == null && EClass.rnd(2) == 0)
{
thing.c_DNA.ReplaceBodySlot(32);
}
break;
}
}
thing.c_DNA.MakeSlimeFood(chara);
if (thing.c_DNA.GetInvalidAction(chara) != null || thing.c_DNA.GetInvalidFeat(chara) != null)
{ActEffect โ
void AddCon<T>(int rate, int power) where T : Condition
}
EClass.ui.AddLayer<LayerList>().SetStringList(delegate
{
List<string> list11 = new List<string>();
List<string> list12 = new List<string>();
for (int num17 = 0; num17 < 10; num17++)
{
list11.Add(AliasGen.GetRandomAlias());
list12.Add(AliasGen.GetRandomAlias());
}
return list11;
return list12;
}, delegate(int a, string b)
{
c2._alias = b;void AddCon<T>(int rate, int power) where T : Condition
{
break;
}
int num9 = 0;
int num10 = 0;
foreach (Condition condition5 in TC.conditions)
{
if (condition5.Type == ConditionType.Debuff)
{
num9++;
num10++;
}
}
if (num9 == 0)
if (num10 == 0)
{
CC.SayNothingHappans();
break;void AddCon<T>(int rate, int power) where T : Condition
TC.Say("abShutterHex", TC);
Point center = CC.pos.Copy();
List<Chara> list4 = TC.pos.ListCharasInRadius(TC, 4, (Chara c) => c == TC || c.IsHostile(CC));
for (int k = 0; k < num9; k++)
for (int k = 0; k < num10; k++)
{
TweenUtil.Delay((float)k * 0.1f, delegate
{void AddCon<T>(int rate, int power) where T : Condition
{
effect.Play(center, 0f, pos);
});
int num10 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num10, 919, power, AttackSource.None, CC, showEffect: false);
int num11 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num11, 919, power, AttackSource.None, CC, showEffect: false);
}
}
}void AddCon<T>(int rate, int power) where T : Condition
break;
}
Thing thing7 = null;
bool flag11 = actRef.n1 == "food";
bool flag12 = actRef.n1 == "food";
if (actRef.n1 == "money")
{
int currency = TC.GetCurrency();void AddCon<T>(int rate, int power) where T : Condition
else
{
Func<Thing, bool> func = (Thing t) => true;
if (flag11)
if (flag12)
{
func = (Thing t) => t.IsFood;
}
List<Thing> list10 = TC.things.List(delegate(Thing t)
List<Thing> list11 = TC.things.List(delegate(Thing t)
{
if (t.parentCard?.trait is TraitChestMerchant || t.trait is TraitTool || t.IsThrownWeapon)
{void AddCon<T>(int rate, int power) where T : Condition
}
return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped && t.blessedState == BlessedState.Normal && func(t);
}, onlyAccessible: true);
if (list10.Count > 0)
if (list11.Count > 0)
{
thing7 = list10.RandomItem();
thing7 = list11.RandomItem();
if (thing7.Num > 1)
{
thing7 = thing7.Split(1);void AddCon<T>(int rate, int power) where T : Condition
power = power * 2 / 3;
}
int a2 = power;
int num11 = TC.WIL * (isPowerful ? 20 : 5);
int num12 = TC.WIL * (isPowerful ? 20 : 5);
ConHolyVeil condition = TC.GetCondition<ConHolyVeil>();
if (condition != null)
{
num11 += condition.power * 5;
num12 += condition.power * 5;
}
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num11 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num12 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
{
TC.Say("debuff_resist", TC);
CC.DoHostileAction(TC);void AddCon<T>(int rate, int power) where T : Condition
{
con.SetElement(EClass.sources.elements.alias[actRef.aliasEle].id);
}
(con as ConMiasma)?.SetResistPenetrationLevel(TC, CC);
}));
if (n == "ConBane" && CC.HasElement(1416))
{void AddCon<T>(int rate, int power) where T : Condition
{
tc.PlaySound("mutation");
tc.PlayEffect("mutation");
int num12 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal);
if (num12 == 0)
int num13 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal);
if (num13 == 0)
{
num12 = tc.GetInt(118);
if (num12 == 0)
num13 = tc.GetInt(118);
if (num13 == 0)
{
num12 = EClass.game.seed + tc.uid;
num13 = EClass.game.seed + tc.uid;
}
num12++;
num13++;
}
tc.Say("transBlood", tc);
tc.Talk("tail");
tc.c_bloodData = null;
tc.SetInt(118, num12);
tc.SetInt(118, num13);
break;
}
case EffectId.Youth:
{
tc.PlaySound("mutation");
tc.PlayEffect("mutation");
int age = tc.bio.GetAge(tc.Chara);
if (!flag && age <= 0)
int age2 = tc.bio.GetAge(tc.Chara);
if (!flag && age2 <= 0)
{
tc.SayNothingHappans();
break;
}
age = Mathf.Max(0, age * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0);
age2 = Mathf.Max(0, age2 * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0);
tc.Say(flag ? "ageUp" : "ageDown", tc);
tc.bio.SetAge(tc.Chara, age);
tc.bio.SetAge(tc.Chara, age2);
break;
}
case EffectId.EternalYouth:void AddCon<T>(int rate, int power) where T : Condition
tc.SayNothingHappans();
break;
}
int age2 = tc.bio.GetAge(tc.Chara);
int age = tc.bio.GetAge(tc.Chara);
if (flag)
{
if (tc.c_lockedAge != 0)void AddCon<T>(int rate, int power) where T : Condition
tc.Say("eternalYouth2", tc);
tc.c_lockedAge = 0;
tc.elements.Remove(1243);
tc.bio.SetAge(tc.Chara, age2);
tc.bio.SetAge(tc.Chara, age);
}
Redirect(EffectId.Youth, BlessedState.Cursed, default(ActRef));
}void AddCon<T>(int rate, int power) where T : Condition
{
tc.PlaySound("dropRewardXmas");
tc.Say("eternalYouth1", tc);
tc.c_lockedAge = age2 + 1;
tc.c_lockedAge = age + 1;
tc.elements.SetBase(1243, 1);
if (blessed)
{void AddCon<T>(int rate, int power) where T : Condition
break;
case EffectId.Revive:
{
List<KeyValuePair<int, Chara>> list9 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList();
List<KeyValuePair<int, Chara>> list10 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList();
if (TC.IsPCFaction || TC.IsPCFactionMinion)
{
if (TC.IsPC && list9.Count == 0)
if (TC.IsPC && list10.Count == 0)
{
list9 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList();
list10 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList();
}
if (list9.Count > 0)
if (list10.Count > 0)
{
list9.RandomItem().Value.Chara.GetRevived();
list10.RandomItem().Value.Chara.GetRevived();
break;
}
}void AddCon<T>(int rate, int power) where T : Condition
case EffectId.DamageMindGreat:
case EffectId.Weaken:
{
bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool flag11 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
int num14 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
int num15 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
if (id == EffectId.Weaken)
{
flag12 = EClass.rnd(2) == 0;
mind2 = !flag12;
num14 = 1;
flag11 = EClass.rnd(2) == 0;
mind2 = !flag11;
num15 = 1;
}
else
{
TC.PlayEffect("debuff");
TC.PlaySound("debuff");
}
TC.Say(flag12 ? "damageBody" : "damageMind", TC);
for (int m = 0; m < num14; m++)
TC.Say(flag11 ? "damageBody" : "damageMind", TC);
for (int m = 0; m < num15; m++)
{
TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken);
TC.DamageTempElements(power, flag11, mind2, id != EffectId.Weaken);
}
if (TC.IsPC)
{void AddCon<T>(int rate, int power) where T : Condition
{
EClass.game.religions.Healing.Talk("ability");
}
int num15 = 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();
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();
if (actRef.refThing != null)
{
num15 = num15 * (100 + actRef.refThing.Evalue(750) * 10) / 100;
num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100;
}
if (flag)
{
TC.DamageHP(num15 / 2, 919, power);
TC.DamageHP(num9 / 2, 919, power);
break;
}
TC.HealHPHost(num15, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
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;void AddCon<T>(int rate, int power) where T : Condition
break;
case EffectId.RemoveHex:
case EffectId.RemoveHexAll:
{
if (flag)
{
Redirect(EffectId.CurseEQ, BlessedState.Normal, default(ActRef));
break;
}
foreach (Condition item8 in TC.conditions.Copy())
IList<Condition> list9 = TC.conditions.Copy();
list9.Shuffle();
CC.PlaySound("remove_hex");
CC.PlayEffect("remove_hex");
foreach (Condition item8 in list9)
{
if (item8.Type == ConditionType.Debuff && !item8.IsKilled && EClass.rnd(power * (CC.IsPowerful ? 5 : 2)) > EClass.rnd(item8.power))
if (item8.Type != ConditionType.Debuff || item8.IsKilled)
{
continue;
}
if (EClass.rnd(power * (CC.IsPowerful ? 5 : 2)) > EClass.rnd(item8.power) || (id == EffectId.RemoveHex && EClass.rnd(2) == 0))
{
CC.Say("removeHex", TC, item8.Name.ToLower());
item8.Kill();
if (id == EffectId.RemoveHex)
}
else
{
if (id == EffectId.RemoveHexAll)
{
break;
item8.power /= 2;
}
CC.Say("removeHex_fail", TC, item8.Name.ToLower());
}
if (id == EffectId.RemoveHex)
{
break;
}
}
TC.AddCondition<ConHolyVeil>(power / 2);
if (blessed)
{
TC.AddCondition<ConHolyVeil>(power / 2);
}
break;
}
case EffectId.CureCorruption:
TC.PlaySound("heal");
TC.PlayEffect("heal");void AddCon<T>(int rate, int power) where T : Condition
if (TC.HasElement(1211))
{
TC.Say("drinkSaltWater_snail", TC);
int num13 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num13, AttackSource.None, CC);
int num14 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num14, AttackSource.None, CC);
}
else if (TC.IsPC)
{ActRanged โ
public override bool Perform()
if (EClass.rnd(2) == 0)
{
Act.CC.RemoveCondition<ConInvisibility>();
Act.CC.RemoveCondition<ConDark>();
}
if (weapon.trait is TraitToolRangeCane)
{BaseCondition โ
public virtual bool HasDuration => base.source.duration != "-1";
public virtual int MaxDuration => base.source.durationMax;
public virtual bool PreventRegen => false;
public virtual bool ShouldRefresh => false;public virtual int EvaluatePower(int p)
public virtual int EvaluateTurn(int p)
{
return Mathf.Max(1, base.source.duration.Calc(p, 0, P2));
return Mathf.Min(Mathf.Max(1, base.source.duration.Calc(p, 0, P2)), (MaxDuration == 0) ? int.MaxValue : MaxDuration);
}
public virtual BaseNotification CreateNotification()Card โ
public virtual long ApplyProtection(long dmg, int mod = 100)
return dmg;
}
public int GetResistPenetrationLevel(int idEle, AttackSource attackSource, Card origin = null)
{
if (origin == null)
{
return 0;
}
int num = origin.Evalue(1238);
if (attackSource == AttackSource.MagicSword)
{
num += 2;
if (origin.HasElement(1247))
{
num++;
}
}
if (attackSource == AttackSource.MagicArrow && origin.HasElement(1244))
{
num++;
}
if (attackSource == AttackSource.MagicHand && origin.HasElement(1246))
{
num++;
}
if (idEle == 916 && (HasElement(1253) || origin.HasElement(1253)))
{
num++;
}
return num;
}
public void DamageHP(long dmg, AttackSource attackSource = AttackSource.None, Card origin = null)
{
DamageHP(dmg, 0, 0, attackSource, origin);
}
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null)
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null, int resistPenetrationLevel = 0)
{
if (hp < 0)
{public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
{
int num3 = ((origin != null) ? origin.Evalue(1238) : 0);
if (origin != null)
{
if (attackSource == AttackSource.MagicSword)
{
num3 += 2;
if (origin.HasElement(1247))
{
num3++;
}
}
if (attackSource == AttackSource.MagicArrow && origin.HasElement(1244))
{
num3++;
}
if (attackSource == AttackSource.MagicHand && origin.HasElement(1246))
{
num3++;
}
if (e.id == 916 && (HasElement(1253) || origin.HasElement(1253)))
{
num3++;
}
}
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), num3);
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), (resistPenetrationLevel != 0) ? resistPenetrationLevel : GetResistPenetrationLevel(e.id, attackSource, origin));
dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200));
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;
}public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (EClass.game.principal.enableDamageReduction && IsPCFaction)
{
int num4 = ((origin != null) ? origin.LV : EClass._zone.DangerLv);
if (num4 > 50)
int num3 = ((origin != null) ? origin.LV : EClass._zone.DangerLv);
if (num3 > 50)
{
dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
}
}
if (attackSource == AttackSource.Throw || attackSource == AttackSource.Range)public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (EClass.pc.HasElement(1207) && isChara)
{
int num4 = 0;
int num5 = 0;
int num6 = 0;
foreach (Condition condition3 in Chara.conditions)
{
if (condition3.Type == ConditionType.Buff)
{
num5++;
num4++;
}
else if (condition3.Type == ConditionType.Debuff)
{
num6++;
num5++;
}
}
if (IsPCFactionOrMinion)
{
dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
}
else
{
dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
}
}
if (IsPCParty && EClass.pc.ai is GoalAutoCombat)public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (dmg >= MaxHP / 10 && Evalue(68) > 0)
{
int num7 = MaxHP / 10;
long num8 = dmg - num7;
num8 = num8 * 100 / (200 + Evalue(68) * 10);
dmg = num7 + num8;
int num6 = MaxHP / 10;
long num7 = dmg - num6;
num7 = num7 * 100 / (200 + Evalue(68) * 10);
dmg = num6 + num7;
}
}
if (origin != null && origin.IsPC && EClass.pc.Evalue(654) > 0)public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
{
dmg = 0L;
}
long num9 = 99999999L;
long num8 = 99999999L;
if (origin != null && (attackSource == AttackSource.Melee || attackSource == AttackSource.Range))
{
ConStrife condition = origin.GetCondition<ConStrife>();
if (condition != null)
{
num9 = num9 * (100 + condition.lv * 5) / 100;
num8 = num8 * (100 + condition.lv * 5) / 100;
}
}
if (dmg > num9)
if (dmg > num8)
{
dmg = num9;
dmg = num8;
}
float num10 = Mathf.Clamp(dmg * 6 / MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
int num11 = hp;
float num9 = Mathf.Clamp(dmg * 6 / MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
int num10 = hp;
if (Evalue(1421) > 0)
{
long num12 = 0L;
long num13 = dmg;
long num11 = 0L;
long num12 = dmg;
if (hp > 0)
{
num13 = dmg - hp;
num12 = dmg - hp;
hp -= (int)dmg;
num12 += dmg;
num11 += dmg;
if (hp < 0 && Chara.mana.value >= 0)
{
num12 += hp;
num11 += hp;
hp = 0;
}
}public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
{
if (Evalue(1421) >= 2)
{
num13 /= 2;
num12 /= 2;
}
dmg = num13;
dmg = num12;
if (Chara.mana.value > 0)
{
num13 -= Chara.mana.value;
num12 -= Chara.mana.value;
Chara.mana.value -= (int)dmg;
num12 += dmg;
num11 += dmg;
}
if (Chara.mana.value <= 0)
{
hp -= (int)num13;
num12 += num13;
hp -= (int)num12;
num11 += num12;
}
}
dmg = num12;
dmg = num11;
}
else
{public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
if (origin != null && origin != this && Evalue(436) > 0 && !HasCondition<ConFractured>())
{
int half = (HasElement(1218) ? MaxHP : (MaxHP / 2));
if (num11 > half)
if (num10 > half)
{
EvadeDeath(delegate
{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_1111;
goto IL_1066;
}
}
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_1111;
goto IL_1066;
}
}
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_1111;
IL_1111:
goto IL_1066;
IL_1066:
if (trait.CanBeAttacked)
{
renderer.PlayAnime(AnimeID.HitObj);public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null && originalTarget == null)
{
(IsPC ? EClass.pc : origin).Say("dmgMelee" + num10 + (IsPC ? "pc" : ""), origin, this);
(IsPC ? EClass.pc : origin).Say("dmgMelee" + num9 + (IsPC ? "pc" : ""), origin, this);
}
else if (isChara)
{
int num14 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2);
if (num10 >= (float)num14)
int num13 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2);
if (num9 >= (float)num13)
{
if (e != Element.Void)
{
Say("dmg_" + e.source.alias, this);
}
if (e == Element.Void || num10 >= 2f)
if (e == Element.Void || num9 >= 2f)
{
Say("dmg" + num10, this);
Say("dmg" + num9, this);
}
}
}
onEvade?.Invoke();
if (isChara)
{
for (int num15 = Chara.conditions.Count - 1; num15 >= 0; num15--)
for (int num14 = Chara.conditions.Count - 1; num14 >= 0; num14--)
{
Chara.conditions[num15].OnHit(origin, attackSource);
Chara.conditions[num14].OnHit(origin, attackSource);
}
if (Chara.mimicry == null && HasElement(1429))
{public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (attackSource == AttackSource.Melee || attackSource == AttackSource.Range)
{
int num16 = origin.Dist(this);
if (attackSource == AttackSource.Melee && HasElement(1221) && num16 <= Evalue(1221))
int num15 = origin.Dist(this);
if (attackSource == AttackSource.Melee && HasElement(1221) && num15 <= Evalue(1221))
{
int ele2 = ((Chara.MainElement == Element.Void) ? 924 : Chara.MainElement.id);
if (id == "hedgehog_ether")public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
Say("reflect_thorne", origin, this);
origin.DamageHP((int)Mathf.Clamp(dmg / 10, 1f, MaxHP / (origin.IsPowerful ? 200 : 20)), ele2, Power, AttackSource.Condition, this);
}
if (HasElement(1223) && num16 <= Evalue(1223))
if (HasElement(1223) && num15 <= Evalue(1223))
{
int ele3 = ((Chara.MainElement == Element.Void) ? 923 : Chara.MainElement.id);
Say("reflect_acid", this, origin);public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
}
}
int num17 = ((EClass.rnd(2) == 0) ? 1 : 0);
int num16 = ((EClass.rnd(2) == 0) ? 1 : 0);
if (attackSource == AttackSource.Condition)
{
num17 = 1 + EClass.rnd(2);
num16 = 1 + EClass.rnd(2);
}
if (num17 > 0)
if (num16 > 0)
{
bool flag3 = Chara.HasCondition<ConPoison>() || ((e.id == 915 || e.id == 923) && ResistLv(Evalue(955)) < 4);
AddBlood(num17, flag3 ? 6 : (-1));
AddBlood(num16, flag3 ? 6 : (-1));
}
if (dmg > 0 || (origin != null && origin.HasElement(1345)))
{public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc
}
if (IsPC)
{
float num18 = (float)hp / (float)MaxHP;
float num17 = (float)hp / (float)MaxHP;
if (Evalue(1421) > 0)
{
num18 = (float)Chara.mana.value / (float)Chara.mana.max;
num17 = (float)Chara.mana.value / (float)Chara.mana.max;
}
if (num18 < 0.3f)
if (num17 < 0.3f)
{
PlaySound("heartbeat", 1f - num18 * 2f);
PlaySound("heartbeat", 1f - num17 * 2f);
}
}
if (!IsPC && hp < MaxHP / 5 && Evalue(423) <= 0 && dmg * 100 / MaxHP + 10 > EClass.rnd(IsPowerful ? 400 : 150) && !HasCondition<ConFear>()) {
if (origin != null && origin.isChara && isChara && (weapon == null || !weapon.HasElement(486)))
{
int num19 = origin.Evalue(662) + (weapon?.Evalue(662, ignoreGlobalElement: true) ?? 0);
int num20 = origin.Evalue(661) + (weapon?.Evalue(661, ignoreGlobalElement: true) ?? 0);
if (num19 != 0)
int num18 = origin.Evalue(662) + (weapon?.Evalue(662, ignoreGlobalElement: true) ?? 0);
int num19 = origin.Evalue(661) + (weapon?.Evalue(661, ignoreGlobalElement: true) ?? 0);
if (num18 != 0)
{
Debug.Log(num19);
Debug.Log(num18);
}
if (num19 > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara))
if (num18 > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara))
{
int num21 = EClass.rnd(3 + (int)Mathf.Clamp(dmg / 100, 0f, num19 / 10));
origin.Chara.stamina.Mod(num21);
int num20 = EClass.rnd(3 + (int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
origin.Chara.stamina.Mod(num20);
if (IsAliveInCurrentZone)
{
Chara.stamina.Mod(-num21);
Chara.stamina.Mod(-num20);
}
}
if (origin.HasElement(1350) && attackSource == AttackSource.Melee)
{
int num22 = EClass.rndHalf(2 + (int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
origin.Chara.mana.Mod(num22);
int num21 = EClass.rndHalf(2 + (int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
origin.Chara.mana.Mod(num21);
if (IsAliveInCurrentZone)
{
Chara.mana.Mod(-num22);
Chara.mana.Mod(-num21);
}
}
if (num20 > 0 && attackSource == AttackSource.Melee)
if (num19 > 0 && attackSource == AttackSource.Melee)
{
int num23 = EClass.rnd(2 + (int)Mathf.Clamp(dmg / 10, 0f, num20 + 10));
origin.Chara.mana.Mod(num23);
int num22 = EClass.rnd(2 + (int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
origin.Chara.mana.Mod(num22);
if (IsAliveInCurrentZone)
{
Chara.mana.Mod(-num23);
Chara.mana.Mod(-num22);
}
}
}public virtual void Die(Element e = null, Card origin = null, AttackSource attac
{
if (!(t.trait is TraitChestMerchant))
{
t.isHidden = false;
EClass._zone.AddCard(t, _pos);
}
});{
if (isChara)
{
if (Chara.mimicry != null)
if (Chara.mimicry != null && Chara.mimicry.Card != this)
{
_colorInt = Chara.mimicry.Card.RefreshColor();
}Chara โ
protected override void OnDeserialized()
public override string GetName(NameStyle style, int num = -1)
{
if (mimicry != null)
if (mimicry != null && mimicry.Card != this)
{
return mimicry.GetName(style, num);
}public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
}
if (IsPC)
{
if (renderer.anime == null && renderer.replacer != null)
if (renderer.anime == null && renderer.replacer != null && renderer.replacer.pccData == null)
{
renderer.PlayAnime(AnimeID.Hop);
}public override CardRenderer _CreateRenderer()
{
charaRenderer.replacer = rendererReplacer;
charaRenderer.data = rendererReplacer.data;
charaRenderer.pccData = rendererReplacer.pccData;
break;
}
}public override string GetHoverText()
{
return mimicry.GetHoverText();
}
string text = ((mimicry != null) ? mimicry.GetName(NameStyle.Full) : base.Name);
string text = ((mimicry != null && mimicry.Card != this) ? mimicry.GetName(NameStyle.Full) : base.Name);
if (IsFriendOrAbove())
{
text = text.TagColor(EClass.Colors.colorFriend);public bool ShouldThrowAway(Thing t, ClearInventoryType type)
switch (type)
{
case ClearInventoryType.SellAtTown:
switch (t.category.id)
if (!t.isGifted && !t.isNPCProperty)
{
default:
if (!t.isGifted && !t.isNPCProperty)
{
return false;
}
break;
case "fish":
case "junk":
case "garbage":
break;
return false;
}
break;
case ClearInventoryType.Purge:CharaBody โ
public void RefreshBodyParts()
int elementId = bodySlot.elementId;
if (elementId == 35)
{
if (slotMainHand == null)
if (slotMainHand == null || slotMainHand == bodySlot)
{
slotMainHand = bodySlot;
}public BodySlot GetSlot(Thing t, bool onlyEmpty = false, bool secondSlot = false
return null;
}
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool secondSlot = false)
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool getSecondSlot = false)
{
bool flag = true;
foreach (BodySlot slot in slots)
{
if (elementId == slot.elementId && (!onlyEmpty || slot.thing == null))
{
if (!(secondSlot && flag))
if (!(getSecondSlot && flag))
{
return slot;
}ConBuffStats โ
public class ConBuffStats : Condition
{
public override string Name => (isDebuff ? "debuff" : "buff").lang();
public override string Name => (IsDebuff ? "debuff" : "buff").lang();
public override ConditionType Type
{
get
{
if (!isDebuff)
if (!IsDebuff)
{
return ConditionType.Buff;
}public override ConditionType Type
}
}
public bool isDebuff => base.refVal2 == 222;
public bool IsDebuff => base.refVal2 == 222;
public override int MaxDuration
{
get
{
if (!IsDebuff)
{
return 0;
}
return base.MaxDuration;
}
}
public override bool AllowMultipleInstance => true;public override ConditionType Type
public override bool IsOverrideConditionMet(Condition c, int turn)
{
if ((c as ConBuffStats).isDebuff == isDebuff)
if ((c as ConBuffStats).IsDebuff == IsDebuff)
{
return base.IsOverrideConditionMet(c, turn);
}public override int GetPhase()
public override Color GetColor(SkinColorProfile c)
{
if (!isDebuff)
if (!IsDebuff)
{
return c.textGood;
}public override string GetText()
string[] list = Lang.GetList("buff_" + EClass.sources.elements.map[base.refVal].alias);
if (list != null)
{
if (!isDebuff)
if (!IsDebuff)
{
return list[0];
}public override void PlayEffect()
{
if (!Condition.ignoreEffect)
{
owner.PlaySound(isDebuff ? "debuff" : "buff");
owner.PlayEffect(isDebuff ? "debuff" : "buff");
owner.Say(isDebuff ? "buffStats_curse" : "buffStats", owner, EClass.sources.elements.map[base.refVal].GetName().ToLower());
owner.PlaySound(IsDebuff ? "debuff" : "buff");
owner.PlayEffect(IsDebuff ? "debuff" : "buff");
owner.Say(IsDebuff ? "buffStats_curse" : "buffStats", owner, EClass.sources.elements.map[base.refVal].GetName().ToLower());
}
}public override bool CanStack(Condition c)
public override void SetOwner(Chara _owner, bool onDeserialize = false)
{
base.SetOwner(_owner);
elements.SetBase(base.refVal, CalcValue() * ((!isDebuff) ? 1 : (-1)));
elements.SetBase(base.refVal, CalcValue() * ((!IsDebuff) ? 1 : (-1)));
elements.SetParent(owner);
}
public override void OnWriteNote(List<string> list)
{
list.Add((isDebuff ? "hintDebuffStats" : "hintBuffStats").lang(base.sourceElement.GetName(), CalcValue().ToString() ?? ""));
list.Add((IsDebuff ? "hintDebuffStats" : "hintBuffStats").lang(base.sourceElement.GetName(), CalcValue().ToString() ?? ""));
}
}ConMiasma โ
public class ConMiasma : TimeDebuff
{
public override bool IsElemental => true;
public void SetResistPenetrationLevel(Chara tc, Chara cc)
{
base.refVal2 = tc.GetResistPenetrationLevel(base.refVal, AttackSource.Condition, cc);
}
public override void Tick()
{
Dice dice = Dice.Create("miasma_", base.power);
try
{
owner.DamageHP(dice.Roll(), base.refVal, EClass.rnd(base.power / 2) + base.power / 4, AttackSource.Condition);
owner.DamageHP(dice.Roll(), base.refVal, EClass.rnd(base.power / 2) + base.power / 4, AttackSource.Condition, null, showEffect: true, null, null, base.refVal2);
if (owner.IsAliveInCurrentZone && base.value > 1)
{
for (int i = 0; i < 6; i++) {
con.givenByPcParty = base.givenByPcParty;
con.SetElement(base.refVal);
con.refVal2 = base.refVal2;
}));
if (condition != null)
{ConTransmuteHuman โ
public override bool ShouldEndMimicry(Act act)
public override RendererReplacer GetRendererReplacer()
{
if (chara.IsPCC)
{
return RendererReplacer.CreateFromPCC(chara.id, chara.pccData);
}
return RendererReplacer.CreateFrom(chara.id);
}public override void OnBeforeStart()
}
else
{
List<Chara> list2 = owner.pos.ListCharasInRadius(owner, 5, delegate(Chara c)
List<Chara> list2 = owner.pos.ListCharasInRadius(owner, 6, delegate(Chara c)
{
if (!c.IsMultisize && c.IsHumanSpeak)
{{
if (chara != null && chara.id != owner.id)
{
chara = CharaGen.Create(owner.id);
chara = owner;
}
else
{Condition โ
public static Condition Create(string alias, int power = 100, Action<Condition>
public virtual void OnStacked(int p)
{
base.value += EvaluateTurn(p);
if (MaxDuration != 0 && base.value > MaxDuration)
{
base.value = MaxDuration;
}
SetPhase();
}DNA โ
public Element GetInvalidAction(Chara c)
return null;
}
public int GetBodySlot()
{
for (int i = 0; i < vals.Count; i += 2)
{
Element element = Element.Create(vals[i], vals[i + 1]);
if (element.source.category == "slot")
{
return element.id;
}
}
return -1;
}
public void ReplaceBodySlot(int slot)
{
for (int i = 0; i < vals.Count; i += 2)
{
if (Element.Create(vals[i], vals[i + 1]).source.category == "slot")
{
vals[i] = slot;
}
}
}
public void MakeSlimeFood(Chara c)
{
int num = c.Evalue(6608) + 10;ElementContainerCard โ
public override void OnTrain(int ele)
public override void OnModTempPotential(Element e, int v, int threshMsg)
{
if (threshMsg == 0 || Mathf.Abs(v) >= threshMsg)
if ((threshMsg == 0 || Mathf.Abs(v) >= threshMsg) && v != 0)
{
string lang = ((v > 0) ? "potentialInc" : "potentialDec");
if (owner.IsPCFaction && v > 0)GoalCombat โ
public override IEnumerable<Status> Run()
{
CursorSystem.ignoreCount = 1;
}
if (tc.host != null && (tc.hp == 0 || EClass.rnd(5) == 0))
if (tc.host != null && (tc.hp == 0 || EClass.rnd(5) == 0 || tc.host.isRestrained))
{
tc = owner.SetEnemy(tc.host);
}RendererReplacer โ
public class RendererReplacer : EClass
public SourcePref pref;
public PCCData pccData;
public static RendererReplacer CreateFrom(string id, int shift = 0, int mat = -1)
{
CardRow cardRow = EClass.sources.cards.map.TryGetValue(id);public static RendererReplacer CreateFrom(string id, int shift = 0, int mat = -1
mat = mat
};
}
public static RendererReplacer CreateFromPCC(string id, PCCData pccData)
{
CardRow cardRow = EClass.sources.cards.map.TryGetValue(id);
if (cardRow == null)
{
cardRow = EClass.sources.cards.map["money2"];
}
return new RendererReplacer
{
data = cardRow.renderData,
pref = cardRow.pref,
pccData = pccData
};
}
}SourceStat โ
public string duration;
public int durationMax;
public int hexPower;
public string[] negate;public override Row CreateRow()
group = SourceData.GetString(5),
curse = SourceData.GetString(6),
duration = SourceData.GetString(7),
hexPower = SourceData.GetInt(8),
negate = SourceData.GetStringArray(9),
defenseAttb = SourceData.GetStringArray(10),
resistance = SourceData.GetStringArray(11),
gainRes = SourceData.GetInt(12),
elements = SourceData.GetStringArray(13),
nullify = SourceData.GetStringArray(14),
tag = SourceData.GetStringArray(15),
phase = SourceData.GetIntArray(16),
colors = SourceData.GetString(17),
element = SourceData.GetString(18),
effect = SourceData.GetStringArray(19),
strPhase_JP = SourceData.GetStringArray(20),
strPhase = SourceData.GetStringArray(21),
textPhase_JP = SourceData.GetString(22),
textPhase = SourceData.GetString(23),
textEnd_JP = SourceData.GetString(24),
textEnd = SourceData.GetString(25),
textPhase2_JP = SourceData.GetString(26),
textPhase2 = SourceData.GetString(27),
gradient = SourceData.GetString(28),
invert = SourceData.GetBool(29),
detail_JP = SourceData.GetString(30),
detail = SourceData.GetString(31)
durationMax = SourceData.GetInt(8),
hexPower = SourceData.GetInt(9),
negate = SourceData.GetStringArray(10),
defenseAttb = SourceData.GetStringArray(11),
resistance = SourceData.GetStringArray(12),
gainRes = SourceData.GetInt(13),
elements = SourceData.GetStringArray(14),
nullify = SourceData.GetStringArray(15),
tag = SourceData.GetStringArray(16),
phase = SourceData.GetIntArray(17),
colors = SourceData.GetString(18),
element = SourceData.GetString(19),
effect = SourceData.GetStringArray(20),
strPhase_JP = SourceData.GetStringArray(21),
strPhase = SourceData.GetStringArray(22),
textPhase_JP = SourceData.GetString(23),
textPhase = SourceData.GetString(24),
textEnd_JP = SourceData.GetString(25),
textEnd = SourceData.GetString(26),
textPhase2_JP = SourceData.GetString(27),
textPhase2 = SourceData.GetString(28),
gradient = SourceData.GetString(29),
invert = SourceData.GetBool(30),
detail_JP = SourceData.GetString(31),
detail = SourceData.GetString(32)
};
}WidgetSearch โ
public override void Search(string s)
{
foreach (Chara chara in EMono._map.charas)
{
if (chara.IsNeutralOrAbove() && (chara.Name.ToLower().Contains(s) || chara.sourceCard.GetSearchName(jp: false).Contains(s)))
if (!chara.IsNeutralOrAbove())
{
continue;
}
if (chara.mimicry != null && !chara.IsPCFactionOrMinion && !EMono.debug.showExtra)
{
if (chara.mimicry.Card.Name.ToLower().Contains(s) || chara.mimicry.Card.sourceCard.GetSearchName(jp: false).Contains(s))
{
newCards.Add(chara);
}
}
else if (chara.Name.ToLower().Contains(s) || chara.sourceCard.GetSearchName(jp: false).Contains(s))
{
newCards.Add(chara);
}Zone_Town โ
public override void OnRegenerate()
{
Add("mad_rich");
}
if (EClass.rnd(EClass.debug.enable ? 1 : 8) == 0)
bool flag = this is Zone_Kapul && IsFestival;
if (EClass.rnd((EClass.debug.enable || flag) ? 1 : 8) == 0)
{
Add((EClass.rnd(EClass.debug.enable ? 1 : 4) == 0) ? "unseenhand" : "murderer");
Add((EClass.rnd((EClass.debug.enable || flag) ? 1 : 4) == 0) ? "unseenhand" : "murderer").AddCondition<ConTransmuteHuman>();
}
void Add(string id)
Chara Add(string id)
{
Chara chara = CharaGen.Create(id);
chara.isSubsetCard = true;
EClass._zone.AddCard(chara, GetSpawnPos(chara));
return chara;
}
}
}