EA 23.287 Stable โ
March 20, 2026
19 files modified.
Important Changes โ
Possible breaking changes. Click the filename to view the chunk.
AIAct (1) โ
public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null) AI_Fuck (1) โ
public override void OnSetOwner() AI_Shear (1) โ
public override void OnSetOwner() AI_Slaughter (1) โ
public override void OnSetOwner() ListPeopleParty (1) โ
public override void OnCreate() TaskPlow (1) โ
public override void OnSetOwner() TaskPoint (1) โ
public override void OnSetOwner() AIAct โ
public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Fun
public Status DoGoto(Card card, Func<Status> _onChildFail = null)
{
return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail);
return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, ignoreConnection: false, _onChildFail);
}
public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null)
{
if (card != null && card == owner.held)
{public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
{
return _onChildFail?.Invoke() ?? Cancel();
}
SetChild(new AI_Goto(card, dist), _onChildFail);
SetChild(new AI_Goto(card, dist, ignoreConnection), _onChildFail);
return TickChild();
}AI_Fuck โ
public override IEnumerable<Status> Run()
int destDist = ((Type == FuckType.fuck) ? 1 : 1);
if (owner.host != target)
{
yield return DoGoto(target.pos, destDist);
yield return DoGoto(target.pos, destDist, ignoreConnection: true);
}
cc.Say((variation == Variation.Slime) ? "slime_start" : ((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc);
isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;public override IEnumerable<Status> Run()
progress = i;
if (owner.host != target)
{
yield return DoGoto(target.pos, destDist);
yield return DoGoto(target.pos, destDist, ignoreConnection: true);
}
switch (Type)
{static void SuccubusExp(Chara c, Chara tg)
}
}
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
}AI_Shear โ
public override bool Perform()
public override IEnumerable<Status> Run()
{
yield return DoGoto(target);
yield return DoGoto(target, 1, ignoreConnection: true);
int furLv = GetFurLv(target.Chara);
Progress_Custom seq = new Progress_Custom
{public override IEnumerable<Status> Run()
yield return Do(seq);
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
public static int GetFurLv(Chara c)
{
return Mathf.Clamp(c.c_fur / 10 + 1, 1, 5);AI_Slaughter โ
public override bool Perform()
public override IEnumerable<Status> Run()
{
yield return DoGoto(target);
yield return DoGoto(target, 1, ignoreConnection: true);
if (target != owner)
{
target.Chara.AddCondition<ConWait>(1000, force: true);public override void OnCancelOrSuccess()
target.SetCensored(enable: false);
}
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
}ActEffect โ
void AddCon<T>(int rate, int power) where T : Condition
{
CC.PlaySound("clean_floor");
Msg.Say("exterminate");
List<Chara> list2 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList();
if (list2.Count == 0)
List<Chara> list3 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList();
if (list3.Count == 0)
{
Msg.SayNothingHappen();
return;
}
foreach (Chara item in list2)
foreach (Chara item in list3)
{
item.Say("split_fail", item);
item.PlayEffect("vanish");void AddCon<T>(int rate, int power) where T : Condition
{
return;
}
Thing thing2 = ThingGen.Create("mine");
thing2.c_idRefCard = "dog_mine";
Thing thing3 = ThingGen.Create("mine");
thing3.c_idRefCard = "dog_mine";
Zone.ignoreSpawnAnime = true;
EClass._zone.AddCard(thing2, CC.pos).Install();
EClass._zone.AddCard(thing3, CC.pos).Install();
break;
}
case EffectId.LittleSisterMigration:
case EffectId.SilverCatMigration:
{
bool flag6 = id == EffectId.SilverCatMigration;
if (!EClass.game.IsSurvival && ((flag6 && EClass._zone.id != "startVillage2") || (!flag6 && !(EClass._zone is Zone_LittleGarden))))
bool flag3 = id == EffectId.SilverCatMigration;
if (!EClass.game.IsSurvival && ((flag3 && EClass._zone.id != "startVillage2") || (!flag3 && !(EClass._zone is Zone_LittleGarden))))
{
Msg.SayNothingHappen();
return;
}
List<Chara> list3 = new List<Chara>();
bool flag7 = false;
List<Chara> list2 = new List<Chara>();
bool flag4 = false;
foreach (Chara chara2 in EClass._map.charas)
{
if (!chara2.IsPCFactionOrMinion && chara2.id == (flag6 ? "cat_silver" : "littleOne"))
if (!chara2.IsPCFactionOrMinion && chara2.id == (flag3 ? "cat_silver" : "littleOne"))
{
if (flag7)
if (flag4)
{
flag7 = false;
flag4 = false;
continue;
}
list3.Add(chara2);
flag7 = true;
list2.Add(chara2);
flag4 = true;
}
}
if (list3.Count == 0)
if (list2.Count == 0)
{
Msg.SayNothingHappen();
return;
}
EClass.pc.PlaySound("chime_angel");
foreach (Chara item2 in list3)
foreach (Chara item2 in list2)
{
item2.PlayEffect("revive");
item2.Destroy();
}
Msg.Say(flag6 ? "cat_migration" : "little_migration", list3.Count.ToString() ?? "");
EClass._zone.ModInfluence(list3.Count);
if (flag6)
Msg.Say(flag3 ? "cat_migration" : "little_migration", list2.Count.ToString() ?? "");
EClass._zone.ModInfluence(list2.Count);
if (flag3)
{
EClass.player.stats.catDepart += list3.Count;
EClass.player.stats.catDepart += list2.Count;
}
else
{
EClass.player.stats.sistersDepart += list3.Count;
EClass.player.stats.sistersDepart += list2.Count;
}
break;
}void AddCon<T>(int rate, int power) where T : Condition
TC.PlaySound("curse3");
TC.PlayEffect("curse");
TC.Say("forgetItems", TC);
int num2 = power / 50 + 1 + EClass.rnd(3);
int num4 = power / 50 + 1 + EClass.rnd(3);
List<Thing> source = TC.things.List((Thing t) => t.c_IDTState == 0);
for (int i = 0; i < num2; i++)
for (int i = 0; i < num4; i++)
{
source.RandomItem().c_IDTState = 5;
}void AddCon<T>(int rate, int power) where T : Condition
case EffectId.EnchantArmorGreat:
{
bool armor = id == EffectId.EnchantArmor || id == EffectId.EnchantArmorGreat;
bool flag8 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat;
bool flag7 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat;
if (!tc.isThing)
{
LayerDragGrid.CreateEnchant(CC, armor, flag8, state);
LayerDragGrid.CreateEnchant(CC, armor, flag7, state);
return;
}
cc.PlaySound("identify");void AddCon<T>(int rate, int power) where T : Condition
tc.ModEncLv(-1);
break;
}
int num7 = (flag8 ? 4 : 2) + (blessed ? 1 : 0);
if (tc.encLV >= num7)
int num5 = (flag7 ? 4 : 2) + (blessed ? 1 : 0);
if (tc.encLV >= num5)
{
cc.Say("enc_resist", tc);
break;void AddCon<T>(int rate, int power) where T : Condition
case EffectId.Identify:
case EffectId.GreaterIdentify:
{
bool flag3 = id == EffectId.GreaterIdentify;
bool flag6 = id == EffectId.GreaterIdentify;
if (flag)
{
Redirect(EffectId.ForgetItems, flag3 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef));
Redirect(EffectId.ForgetItems, flag6 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef));
break;
}
if (!tc.isThing)
{
int count = ((!blessed) ? 1 : (flag3 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3))));
LayerDragGrid.CreateIdentify(CC, flag3, state, 0, count);
int count = ((!blessed) ? 1 : (flag6 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3))));
LayerDragGrid.CreateIdentify(CC, flag6, state, 0, count);
return;
}
cc.PlaySound("identify");
cc.PlayEffect("identify");
tc.Thing.Identify(cc.IsPCParty, (!flag3) ? IDTSource.Identify : IDTSource.SuperiorIdentify);
tc.Thing.Identify(cc.IsPCParty, (!flag6) ? IDTSource.Identify : IDTSource.SuperiorIdentify);
break;
}
case EffectId.Uncurse:void AddCon<T>(int rate, int power) where T : Condition
LayerDragGrid.CreateUncurse(CC, state);
return;
}
Thing thing = tc.Thing;
if (thing.blessedState == BlessedState.Cursed)
Thing thing2 = tc.Thing;
if (thing2.blessedState == BlessedState.Cursed)
{
thing.SetBlessedState(BlessedState.Normal);
thing2.SetBlessedState(BlessedState.Normal);
}
else if (thing.blessedState == BlessedState.Doomed)
else if (thing2.blessedState == BlessedState.Doomed)
{
thing.SetBlessedState(BlessedState.Normal);
thing2.SetBlessedState(BlessedState.Normal);
}
thing.GetRootCard()?.TryStack(thing);
LayerInventory.SetDirty(thing);
thing2.GetRootCard()?.TryStack(thing2);
LayerInventory.SetDirty(thing2);
break;
}
case EffectId.Lighten:void AddCon<T>(int rate, int power) where T : Condition
}
cc.PlaySound("offering");
cc.PlayEffect("buff");
int num = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight);
int num3 = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight);
tc.isWeightChanged = true;
Element orCreateElement = tc.elements.GetOrCreateElement(64);
Element orCreateElement2 = tc.elements.GetOrCreateElement(65);
Element orCreateElement3 = tc.elements.GetOrCreateElement(67);
Element orCreateElement4 = tc.elements.GetOrCreateElement(66);
bool flag2 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon;
bool flag5 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon;
if (flag)
{
num = (int)(0.01f * (float)num * (float)power * 0.75f + 500f);
if (num < 0 || num > 10000000)
num3 = (int)(0.01f * (float)num3 * (float)power * 0.75f + 500f);
if (num3 < 0 || num3 > 10000000)
{
num = 10000000;
flag2 = false;
num3 = 10000000;
flag5 = false;
}
if (flag2)
if (flag5)
{
if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
{void AddCon<T>(int rate, int power) where T : Condition
}
else
{
num = num * (100 - power / 10) / 100;
num3 = num3 * (100 - power / 10) / 100;
if (blessed)
{
power /= 4;
}
if (flag2)
if (flag5)
{
if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
{void AddCon<T>(int rate, int power) where T : Condition
}
cc.Say("lighten", tc);
}
tc.c_weight = num;
tc.c_weight = num3;
tc.SetDirtyWeight();
if (tc.parent == null)
{void AddCon<T>(int rate, int power) where T : Condition
cc.PlayEffect("identify");
cc.Say("reconstruct", tc);
EClass.game.cards.uidNext += EClass.rnd(30);
int num5 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
int num6 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
CardBlueprint.Set(new CardBlueprint
{
blesstedState = state
});
Thing thing3 = ThingGen.Create(tc.id, -1, (int)((long)num5 * (long)power / 400));
thing3.genLv = num5;
Thing thing4 = ThingGen.Create(tc.id, -1, (int)((long)num6 * (long)power / 400));
thing4.genLv = num6;
if (tc.c_uidAttune != 0)
{
thing3.c_uidAttune = tc.c_uidAttune;
if (thing3.id == "amulet_engagement" || thing3.id == "ring_engagement")
thing4.c_uidAttune = tc.c_uidAttune;
if (thing4.id == "amulet_engagement" || thing4.id == "ring_engagement")
{
if (tc.c_uidAttune != EClass.pc.uid)
{
thing3.elements.ModBase(484, 3);
thing4.elements.ModBase(484, 3);
}
if (thing3.rarity < Rarity.Mythical)
if (thing4.rarity < Rarity.Mythical)
{
thing3.rarity = Rarity.Mythical;
thing4.rarity = Rarity.Mythical;
}
}
}
tc.Destroy();
CC.Pick(thing3, msg: false);
CC.Pick(thing4, msg: false);
if (!CC.IsPC)
{
CC.TryEquip(thing3);
CC.TryEquip(thing4);
}
break;
}void AddCon<T>(int rate, int power) where T : Condition
{
tc = tc.Split(1);
}
string name = tc.Name;
string name2 = tc.Name;
if (row == null)
{
bool num3 = id == EffectId.ChangeMaterialGreater;
bool flag4 = id == EffectId.ChangeMaterialLesser;
bool num7 = id == EffectId.ChangeMaterialGreater;
bool flag8 = id == EffectId.ChangeMaterialLesser;
string text2 = tc.Thing.source.tierGroup;
Dictionary<string, SourceMaterial.TierList> tierMap = SourceMaterial.tierMap;
int num4 = 1;
int num8 = 1;
if (flag)
{
num4 -= 2;
num8 -= 2;
}
if (blessed)
{
num4++;
num8++;
}
if (num3)
if (num7)
{
num4++;
num8++;
}
if (flag4)
if (flag8)
{
num4 -= 2;
num8 -= 2;
}
num4 = Mathf.Clamp(num4 + EClass.rnd(2), 0, 4);
num8 = Mathf.Clamp(num8 + EClass.rnd(2), 0, 4);
if (EClass.rnd(10) == 0)
{
text2 = ((text2 == "metal") ? "leather" : "metal");void AddCon<T>(int rate, int power) where T : Condition
SourceMaterial.TierList tierList = (text2.IsEmpty() ? tierMap.RandomItem() : tierMap[text2]);
for (int j = 0; j < 1000; j++)
{
row = tierList.tiers[num4].Select();
row = tierList.tiers[num8].Select();
if (row != tc.material)
{
break;void AddCon<T>(int rate, int power) where T : Condition
DNA.Type type = DNA.GetType(tc.material.alias);
tc.c_DNA.Generate(type);
}
cc.Say("materialChanged", name, row.GetName());
cc.Say("materialChanged", name2, row.GetName());
if (CC != null)
{
if (tc.parent == null)void AddCon<T>(int rate, int power) where T : Condition
{
tc = tc.Split(1);
}
string name2 = tc.Name;
string name = tc.Name;
cc.PlaySound("offering");
cc.PlayEffect("buff");
bool flag5 = tc.rarity == Rarity.Legendary;
bool flag2 = tc.rarity == Rarity.Legendary;
CardBlueprint.Set(new CardBlueprint
{
rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary),
rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary),
generation = CardBlueprint.Generation.GarokkHammer
});
Rand.SetBaseSeed(tc.uid + 1);
Rand.SetSeed(tc.uid + 2);
Thing thing4 = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv);
Thing thing = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv);
Rand.SetSeed();
Rand.SetBaseSeed();
int num6 = 0;
foreach (Element item4 in thing4.elements.dict.Values.ToList().Shuffle())
thing.SetEncLv(tc.encLV);
thing.SetBlessedState(tc.blessedState);
int num = 0;
foreach (Element item4 in thing.elements.dict.Values.ToList().Shuffle())
{
if (tc.elements.Has(item4.id) && tc.elements.GetElement(item4.id).vBase == item4.vBase)
int num2 = (tc.elements.Has(item4.id) ? tc.elements.GetElement(item4.id).vBase : 0);
if (num2 != 0 && (Mathf.Abs(item4.vBase) <= Mathf.Abs(num2) || !MathEx.IsSameSign(item4.vBase, num2)))
{
continue;
}
tc.elements.SetBase(item4.id, item4.vBase);
Debug.Log(item4.Name + "/" + item4.vBase);
int id2 = item4.id;
if ((uint)(id2 - 64) > 3u)
if (id2 != 11)
{
num6++;
if (flag5)
if ((uint)(id2 - 64) > 3u)
{
num++;
}
tc.elements.SetBase(item4.id, item4.vBase);
Debug.Log(item4.Name + "/" + item4.vBase);
if (flag2 && num >= 2)
{
_ = 2;
break;
}
}
}
tc.rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary);
EClass.pc.Say("reconstruct", name2);
tc.isCrafted = false;
tc.rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary);
EClass.pc.Say("reconstruct", name);
break;
}
case EffectId.ChangeAlias:
{
Chara c2 = CC;
if (!c2.IsPC && !c2.trait.UseRandomAlias && blessed)
{
c2._alias = null;
c2.Say("reconstruct", c2);
SE.Change();
c2.PlayEffect("mutation");
break;
}
EClass.ui.AddLayer<LayerList>().SetStringList(delegate
{
List<string> list11 = new List<string>();
for (int num16 = 0; num16 < 10; num16++)
for (int num17 = 0; num17 < 10; num17++)
{
list11.Add(AliasGen.GetRandomAlias());
}void AddCon<T>(int rate, int power) where T : Condition
{
break;
}
int num13 = 0;
int num14 = 0;
foreach (Condition condition5 in TC.conditions)
{
if (condition5.Type == ConditionType.Debuff)
{
num13++;
num14++;
}
}
if (num13 == 0)
if (num14 == 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> list10 = TC.pos.ListCharasInRadius(TC, 4, (Chara c) => c == TC || c.IsHostile(CC));
for (int m = 0; m < num13; m++)
for (int m = 0; m < num14; m++)
{
TweenUtil.Delay((float)m * 0.1f, delegate
{void AddCon<T>(int rate, int power) where T : Condition
{
effect.Play(center, 0f, pos);
});
int num14 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num14, 919, power, AttackSource.None, CC, showEffect: false);
int num15 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num15, 919, power, AttackSource.None, CC, showEffect: false);
}
}
}void AddCon<T>(int rate, int power) where T : Condition
List<Thing> list = new List<Thing>();
TC.things.Foreach(delegate(Thing t)
{
int num15 = 0;
int num16 = 0;
if ((t.isEquipped || t.IsRangedWeapon || blessed) && t.blessedState < BlessedState.Normal)
{
if (t.blessedState == BlessedState.Cursed)
{
num15 = EClass.rnd(200);
num16 = EClass.rnd(200);
}
if (t.blessedState == BlessedState.Doomed)
{
num15 = EClass.rnd(1000);
num16 = EClass.rnd(1000);
}
if (blessed)
{
num15 /= 2;
num16 /= 2;
}
if (id == EffectId.UncurseEQGreater)
{
num15 /= 10;
num16 /= 10;
}
if (power >= num15)
if (power >= num16)
{
TC.Say("uncurseEQ_success", t);
t.SetBlessedState(BlessedState.Normal);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 condition3 = TC.GetCondition<ConHolyVeil>();
if (condition3 != null)
{
num11 += condition3.power * 5;
num12 += condition3.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
{
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:void AddCon<T>(int rate, int power) where T : Condition
{
bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
int num10 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
int num11 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
if (id == EffectId.Weaken)
{
flag12 = EClass.rnd(2) == 0;
mind2 = !flag12;
num10 = 1;
num11 = 1;
}
else
{void AddCon<T>(int rate, int power) where T : Condition
TC.PlaySound("debuff");
}
TC.Say(flag12 ? "damageBody" : "damageMind", TC);
for (int l = 0; l < num10; l++)
for (int l = 0; l < num11; l++)
{
TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken);
}void AddCon<T>(int rate, int power) where T : Condition
{
EClass.game.religions.Healing.Talk("ability");
}
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();
int num10 = 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;
num10 = num10 * (100 + actRef.refThing.Evalue(750) * 10) / 100;
}
if (flag)
{
TC.DamageHP(num9 / 2, 919, power);
TC.DamageHP(num10 / 2, 919, power);
break;
}
TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
TC.HealHPHost(num10, (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
if (TC.HasElement(1211))
{
TC.Say("drinkSaltWater_snail", TC);
int num8 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num8, AttackSource.None, CC);
int num9 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num9, AttackSource.None, CC);
}
else if (TC.IsPC)
{ActPlan โ
Item item = list[0];
return delegate
{
if (item.act is AIAct)
{
(item.act as AIAct).owner = EClass.pc;
}
if (performed && !item.act.CanPressRepeat)
{
return false;ActZap โ
public override bool Perform()
Act.TC = Act.CC;
EffectId idEffect = trait.IdEffect;
long a = trait.Power * (100 + (long)Act.CC.Evalue(305) * 10L + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100;
ActEffect.ProcAt(idEffect, MathEx.Min(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
ActEffect.ProcAt(idEffect, MathEx.ClampToInt(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
{
refThing = trait.owner.Thing,
aliasEle = trait.aliasEle,AttackProcess โ
public class AttackProcess : EClass
public long toHitBase;
public long evasion;
public int dNum;
public int dDim;public class AttackProcess : EClass
public int toHitFix;
public int evasion;
public int penetration;
public int distMod;public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
toolRange = weapon?.trait as TraitToolRange;
attackType = AttackType.Slash;
attackStyle = AttackStyle.Default;
evasion = 0;
evasion = 0L;
penetration = 0;
distMod = 100;
attackIndex = _attackIndex;public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
evasion = EClass.curve(TC.PER / 3 + TC.Evalue(150), 50, 10) + TC.DV + 25;
if (TC.isChara && TC.Chara.isBlind)
{
evasion /= 2;
evasion /= 2L;
}
if (TC.HasCondition<ConDim>())
{
evasion /= 2;
evasion /= 2L;
}
if (TC.isChara && TC.Chara.HasHigherGround(CC))
{public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =
continue;
}
int num10 = 25;
int num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5);
long num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5);
num11 = num11 * (100 + GetTwoHandEncBonus(CC, weapon)) / 100;
if (num11 >= 0)
{Chara โ
public override void OnCreate(int genLv)
num = tuple.Item3 + base.LV - source.LV;
}
}
if (source.name == "*r")
if (trait.UseRandomName)
{
base.c_altName = NameGen.getRandomName();
}
if (source.GetText("aka") == "*r" || trait.UseRandomAlias)
if (trait.UseRandomAlias)
{
_alias = AliasGen.GetRandomAlias();
}EClass โ
public static int rndSeed(int a, int seed)
public static int rnd(long a)
{
return Rand.rnd((int)a);
return Rand.rnd(MathEx.ClampToInt(a));
}
public static int rnd(int a)GrowSystem โ
}
}
public static SourceObj.Row[] sourceSnowTree = new SourceObj.Row[2]
{
EClass.sources.objs.map[54],
EClass.sources.objs.map[55]
};
private static SourceObj.Row[] _sourceSnowTree;
public const int DivStage = 30;
public string idHarvestThing;
public static SourceObj.Row[] SourceSnowTree
{
get
{
object obj = _sourceSnowTree;
if (obj == null)
{
obj = new SourceObj.Row[2]
{
EClass.sources.objs.map[54],
EClass.sources.objs.map[55]
};
_sourceSnowTree = (SourceObj.Row[])obj;
}
return (SourceObj.Row[])obj;
}
}
public virtual RenderData RenderHarvest => source.renderData;
public virtual int Step => 5;ListPeopleParty โ
public class ListPeopleParty : BaseListPeople
{
public override void OnCreate()
{
list.sorts = new UIList.SortMode[3]
{
UIList.SortMode.ByFeat,
UIList.SortMode.ByJob,
UIList.SortMode.ByRace
};
list.sortMode = UIList.SortMode.ByFeat;
}
public bool CanJoinParty(Chara c)
{
if (!c.IsPC)Recipe โ
public virtual void Build(Chara chara, Card t, Point pos, int mat, int dir, int
EClass._map.SetBlock(pos.x, pos.z, mat, ramp, dir);
if (tileType.IsBlockPass && pos.HasChara)
{
foreach (Chara item in pos.ListCharas())
foreach (Chara item in pos.ListCharas().Copy())
{
chara.Kick(item, ignoreSelf: false, karmaLoss: false);
}TaskBuild โ
public override void OnProgressComplete()
{
bridgeHeight = 150;
}
Chara chara = owner;
recipe.Build(this);
owner = chara;
resources.Clear();
EClass.player.flags.OnBuild(recipe);
if (owner.IsPC)
{
EClass.player.flags.OnBuild(recipe);
}
EClass._map.RefreshShadow(pos.x, pos.z);
EClass._map.RefreshShadow(pos.x, pos.z - 1);
EClass._map.RefreshFOV(pos.x, pos.z);TaskPlow โ
public class TaskPlow : TaskDesignation
{
public override CursorInfo CursorIcon => CursorSystem.Dig;
public override bool destIgnoreConnection => false;
public override bool CanPressRepeat => true;
public override int destDistpublic override HitResult GetHitResult()
}
return HitResult.Valid;
}
public override void OnSetOwner()
{
}
}TaskPoint โ
public class TaskPoint : Task, IInspect
public virtual int destDist => 0;
public virtual bool destIgnoreConnection => false;
public virtual bool destIgnoreConnection => true;
public virtual bool isBlock => false;public override IEnumerable<Status> Run()
while (Loop);
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
public void OnInspect()
{
}Trait โ
public void OnBarter(bool reroll = false)
{
AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(10));
}
Add("scroll_alias", 1, 0);
Add("scroll_biography", 1, 0);
Add("scroll_alias", 10, 0);
Add("scroll_biography", 10, 0);
Add("1329", 1, 0);
break;
}TraitChara โ
public virtual bool CanGiveRandomQuest
}
}
public virtual bool UseRandomAlias => false;
public virtual bool UseRandomName => owner.source.name == "*r";
public virtual bool UseRandomAlias => owner.source.GetText("aka") == "*r";
public virtual bool IsWearingPanty => EClass.pc.faction.IsWearingPanty(owner);UIMultiList โ
public void Build(UIList.SortMode m = UIList.SortMode.ByNone)
{
foreach (ListOwner owner in owners)
{
owner.list.sortMode = ((owner is ListPeopleParty) ? UIList.SortMode.ByFeat : m);
owner.list.sortMode = m;
}
if (Double)
{