EA 23.117 Patch 1
March 31, 2025
36 files modified. 1 new file created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Card (1)
public void SetHidden(bool hide = true)
public Card SetHidden(bool hide = true)
ThingGen (2)
public static Thing CreateSkillbook(int ele, int num = 1)
public static Thing CreateSpellbook(int ele, int num = 1)
public static Thing CreateSpellbook(int ele, int num = 1)
public static Thing CreateSkillbook(int ele, int num = 1)
ActEffect
@@ -60,6 +60,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
foreach (Point p in points)
{
bool flag2 = true;
AttackSource attackSource = AttackSource.None;
switch (id)
{
case EffectId.Explosive:
{
continue;
}
if ((uint)(id - 250) <= 1u && c.isChara && CC.isChara)
if (((uint)(id - 250) <= 1u || id == EffectId.Sword) && c.isChara && CC.isChara)
{
c.Chara.RequestProtection(CC.Chara, delegate(Chara a)
{
c = a;
});
}
if (id == EffectId.Sword)
{
attackSource = AttackSource.MagicSword;
}
int num4 = 0;
bool isChara = CC.isChara;
if (id == EffectId.Suicide)
@@ -217,8 +222,9 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
Debug.Log(text2);
}
num4 = dice.Roll();
if (id == EffectId.Earthquake)
switch (id)
{
case EffectId.Earthquake:
if (c.HasCondition<ConGravity>())
{
num4 = dice.RollMax() * 2;
{
num4 /= 2;
}
break;
case EffectId.Sword:
num4 = num4 * (int)Mathf.Min(70f + Mathf.Sqrt(CC.Evalue(101)) * 3f, 200f) / 100;
break;
}
if (id == EffectId.Ball || id == EffectId.BallBubble || id == EffectId.Explosive)
{
num4 = num4 * 100 / (90 + point.Distance(p) * 10);
}
}
if (id == EffectId.Sword)
{
c.PlaySound("ab_magicsword");
c.PlayEffect("hit_slash");
}
if ((actref.noFriendlyFire && !CC.Chara.IsHostile(c as Chara)) || (flag && c == CC))
{
continue;
@@ -306,7 +321,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
num4 = num4 * 100 / (100 + RapidCount * 50);
}
num4 = num4 * Act.powerMod / 100;
c.DamageHP(num4, e.id, power * num / 100, AttackSource.None, chara ?? CC);
c.DamageHP(num4, e.id, power * num / 100, attackSource, chara ?? CC);
if (c.IsAliveInCurrentZone && CC.IsAliveInCurrentZone && id == EffectId.DrainMana && c.isChara && CC.isChara && c.Chara.mana.value > 0)
{
int num6 = num4 * num / 100;
{
case EffectId.Earthquake:
{
List<Point> list4 = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false);
if (list4.Count == 0)
List<Point> list3 = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false);
if (list3.Count == 0)
{
list4.Add(CC.pos.Copy());
list3.Add(CC.pos.Copy());
}
CC.Say("spell_earthquake", CC, element.Name.ToLower());
TryDelay(delegate
@@ -423,7 +438,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
Shaker.ShakeCam("ball");
}
EClass.Wait(1f, CC);
DamageEle(CC, id, power, element, list4, actRef, "spell_earthquake");
DamageEle(CC, id, power, element, list3, actRef, "spell_earthquake");
break;
}
case EffectId.Meteor:
EffectMeteor.Create(cc.pos, 6, 10, delegate
{
});
List<Point> list3 = EClass._map.ListPointsInCircle(CC.pos, 10f);
if (list3.Count == 0)
List<Point> list4 = EClass._map.ListPointsInCircle(CC.pos, 10f);
if (list4.Count == 0)
{
list3.Add(CC.pos.Copy());
list4.Add(CC.pos.Copy());
}
CC.Say("spell_ball", CC, element.Name.ToLower());
TryDelay(delegate
Shaker.ShakeCam("ball");
}
EClass.Wait(1f, CC);
DamageEle(CC, id, power, element, list3, actRef, "spell_ball");
DamageEle(CC, id, power, element, list4, actRef, "spell_ball");
return;
}
case EffectId.Hand:
case EffectId.DrainBlood:
case EffectId.DrainMana:
case EffectId.Sword:
{
List<Point> list5 = new List<Point>();
list5.Add(tp.Copy());
{
CC.PlaySound("spell_hand");
});
if (!DamageEle(CC, id, power, element, list5, actRef, (id == EffectId.DrainBlood || id == EffectId.DrainMana) ? "" : "spell_hand"))
Chara cC = CC;
EffectId id3 = id;
Element e = element;
ActRef actref = actRef;
object lang;
switch (id)
{
default:
lang = "spell_hand";
break;
case EffectId.Sword:
lang = "spell_sword";
break;
case EffectId.DrainBlood:
case EffectId.DrainMana:
lang = "";
break;
}
if (!DamageEle(cC, id3, power, e, list5, actref, (string)lang))
{
CC.Say("spell_hand_miss", CC, element.Name.ToLower());
}
@@ -487,7 +521,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
CC.Say("summon_ally_fail", CC);
return;
}
string id3 = actRef.n1;
string id4 = actRef.n1;
int num3 = 1;
int num4 = -1;
int radius = 3;
@@ -504,7 +538,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
num3 = 1 + EClass.rnd(2);
break;
case "special_force":
id3 = "army_palmia";
id4 = "army_palmia";
num3 = 4 + EClass.rnd(2);
num5 = EClass._zone.DangerLv;
break;
@@ -540,7 +574,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
"monster" => CharaGen.CreateFromFilter("c_dungeon", power / 10),
"animal" => CharaGen.CreateFromFilter("c_animal", power / 15),
"fire" => CharaGen.CreateFromElement("Fire", power / 10),
_ => CharaGen.Create(id3, power / 10),
_ => CharaGen.Create(id4, power / 10),
};
if (chara2 == null)
{
ActMelee
@@ -286,6 +286,8 @@ void Attack(Card _tc, Point _tp, float mtp, bool subAttack)
break;
}
}
Act.TC = _tc;
Act.TP = _tp;
if (w != null && w.c_ammo > 0 && !Act.CC.HasCondition<ConReload>())
{
bool flag2 = true;
+ActSword
File Created
public class ActSword : ActHand
{
}
AttackSource
@@ -18,5 +18,6 @@ public enum AttackSource
Wrath,
ManaBackfire,
DeathSentense,
Shockwave
Shockwave,
MagicSword
}
BaseTileMap
@@ -1660,17 +1660,24 @@ public virtual void DrawTile()
else
{
param.liquidLv = liquidLv;
if (chara.Pref.Float && liquidLv > 0 && !hasBridge && !flag)
{
float num16 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
orgY += 0.01f * floatY - num16;
_actorPos.y += 0.01f * floatY - num16;
int num17 = TileType.FloorWaterShallow.LiquidLV * 10;
num17 -= (int)(floatY * 0.5f);
param.liquidLv = num17;
}
if (param.liquidLv > 0)
if (liquidLv > 0)
{
if (chara.Pref.Float && !flag && !hasBridge)
{
if (liquidLv > 20)
{
float num16 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
orgY += 0.01f * floatY - num16;
_actorPos.y += 0.01f * floatY - num16;
int num17 = TileType.FloorWaterShallow.LiquidLV * 10;
num17 -= (int)(floatY * 0.5f);
param.liquidLv = num17;
}
else
{
param.liquidLv -= 20;
}
}
param.liquidLv += chara.Pref.liquidMod;
if (param.liquidLv < 1)
{
Card
@@ -3059,11 +3059,11 @@ public void RemoveThings()
public void RemoveThing(Thing thing)
{
if ((GetRootCard() as Chara)?.held == thing)
Card rootCard = GetRootCard();
if (rootCard != null && rootCard.isChara && (rootCard.Chara.held == thing || (rootCard.IsPC && thing.things.Find((Thing t) => EClass.pc.held == t) != null)))
{
Chara obj = GetRootCard() as Chara;
obj.held = null;
if (obj.IsPC)
rootCard.Chara.held = null;
if (rootCard.IsPC)
{
WidgetCurrentTool instance = WidgetCurrentTool.Instance;
if ((bool)instance && instance.selected != -1 && instance.selectedButton.card != null && instance.selectedButton.card == thing)
}
if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
{
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), (origin != null) ? origin.Evalue(1238) : 0);
int num = ((origin != null) ? origin.Evalue(1238) : 0);
if (attackSource == AttackSource.MagicSword)
{
num += 2;
}
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), num);
dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200));
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;
}
}
if (EClass.game.principal.enableDamageReduction && IsPCFaction)
{
int num = ((origin != null) ? origin.LV : EClass._zone.DangerLv);
if (num > 50)
int num2 = ((origin != null) ? origin.LV : EClass._zone.DangerLv);
if (num2 > 50)
{
dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num - 50))) / 100;
dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num2 - 50))) / 100;
}
}
dmg = dmg * Mathf.Max(0, 100 - Evalue((e == Element.Void || e.id == 926) ? 55 : 56)) / 100;
}
if (EClass.pc.HasElement(1207) && isChara)
{
int num2 = 0;
int num3 = 0;
int num4 = 0;
foreach (Condition condition2 in Chara.conditions)
{
if (condition2.Type == ConditionType.Buff)
{
num2++;
num3++;
}
else if (condition2.Type == ConditionType.Debuff)
{
num3++;
num4++;
}
}
if (IsPCParty)
{
dmg = dmg * 100 / Mathf.Min(100 + num2 * 5, 120);
dmg = dmg * 100 / Mathf.Min(100 + num3 * 5, 120);
}
else
{
dmg = dmg * Mathf.Min(100 + num3 * 5, 120) / 100;
dmg = dmg * Mathf.Min(100 + num4 * 5, 120) / 100;
}
}
if (IsPCParty && EClass.pc.ai is GoalAutoCombat)
}
if (dmg >= MaxHP / 10 && Evalue(68) > 0)
{
int num4 = MaxHP / 10;
int num5 = dmg - num4;
num5 = num5 * 100 / (200 + Evalue(68) * 10);
dmg = num4 + num5;
int num5 = MaxHP / 10;
int num6 = dmg - num5;
num6 = num6 * 100 / (200 + Evalue(68) * 10);
dmg = num5 + num6;
}
}
if (origin != null && origin.IsPC && EClass.pc.Evalue(654) > 0)
{
dmg = 0;
}
int num6 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0);
int num7 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0);
if (Evalue(1421) > 0)
{
int num7 = 0;
int num8 = dmg;
int num8 = 0;
int num9 = dmg;
if (hp > 0)
{
num8 = dmg - hp;
num9 = dmg - hp;
hp -= dmg;
num7 += dmg;
num8 += dmg;
if (hp < 0 && Chara.mana.value >= 0)
{
num7 += hp;
num8 += hp;
hp = 0;
}
}
{
if (Evalue(1421) >= 2)
{
num8 /= 2;
num9 /= 2;
}
dmg = num8;
dmg = num9;
if (Chara.mana.value > 0)
{
num8 -= Chara.mana.value;
num9 -= Chara.mana.value;
Chara.mana.value -= dmg;
num7 += dmg;
num8 += dmg;
}
if (Chara.mana.value <= 0)
{
hp -= num8;
num7 += num8;
hp -= num9;
num8 += num9;
}
}
dmg = num7;
dmg = num8;
}
else
{
if (e != Element.Void)
{
c2 = EClass.Colors.elementColors.TryGetValue(e.source.alias);
float num15 = (c2.r + c2.g + c2.b) / 3f;
num15 = ((num15 > 0.5f) ? 0f : (0.6f - num15));
c2 = new Color(c2.r + num15, c2.g + num15, c2.b + num15, 1f);
float num16 = (c2.r + c2.g + c2.b) / 3f;
num16 = ((num16 > 0.5f) ? 0f : (0.6f - num16));
c2 = new Color(c2.r + num16, c2.g + num16, c2.b + num16, 1f);
}
popper.SetText(dmg.ToString() ?? "", c2);
}
if (EClass.player.invlunerable)
{
EvadeDeath();
goto IL_0b19;
goto IL_0b2d;
}
}
if (IsPC && Evalue(1220) > 0 && Chara.stamina.value >= Chara.stamina.max / 2)
}
}
}
goto IL_0b19;
IL_0b19:
goto IL_0b2d;
IL_0b2d:
if (trait.CanBeAttacked)
{
renderer.PlayAnime(AnimeID.HitObj);
}
if (!isDestroyed)
{
Debug.Log(EClass.player.invlunerable);
Debug.Log(EClass.pc.ai?.ToString() + "/" + EClass.pc.ai.IsRunning);
Die(e, origin, attackSource);
if (trait.CanBeSmashedToDeath)
{
Rand.SetSeed(uid);
if (EClass.rnd(3) == 0)
if (EClass.rnd(3) == 0 && !isCrafted && !isCopy)
{
string text2 = new int[18]
{
{
text2 = "money2";
}
if (EClass.rnd(20) == 0)
if (EClass.rnd(20) == 0 || EClass.debug.enable)
{
text2 = "medal";
}
EClass._zone.AddCard(ThingGen.Create(text2).SetNum((!(text2 == "money")) ? 1 : EClass.rndHalf(100)), pos);
EClass._zone.AddCard(ThingGen.Create(text2).SetNum((!(text2 == "money")) ? 1 : EClass.rndHalf(100)).SetHidden(hide: false), pos);
}
Rand.SetSeed();
}
ProcAbsorb();
if (EClass.pc.Evalue(1355) > 0 && (IsPCFactionOrMinion || (origin != null && origin.IsPCParty)))
if (EClass.pc.Evalue(1355) > 0 && isChara && (IsPCFactionOrMinion || (origin != null && origin.IsPCParty)))
{
ConStrife conStrife = (EClass.pc.AddCondition<ConStrife>() as ConStrife) ?? EClass.pc.GetCondition<ConStrife>();
if (conStrife != null && isChara)
{
conStrife.AddKill(Chara);
}
((EClass.pc.AddCondition<ConStrife>() as ConStrife) ?? EClass.pc.GetCondition<ConStrife>())?.AddKill(Chara);
}
}
if (origin != null && origin.isChara)
}
else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null)
{
(IsPC ? EClass.pc : origin).Say("dmgMelee" + num6 + (IsPC ? "pc" : ""), origin, this);
(IsPC ? EClass.pc : origin).Say("dmgMelee" + num7 + (IsPC ? "pc" : ""), origin, this);
}
else if (isChara)
{
int num9 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2);
if (num6 >= num9)
int num10 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2);
if (num7 >= num10)
{
if (e != Element.Void)
{
Say("dmg_" + e.source.alias, this);
}
if (e == Element.Void || num6 >= 2)
if (e == Element.Void || num7 >= 2)
{
Say("dmg" + num6, this);
Say("dmg" + num7, this);
}
}
}
elements.ModExp(123, a3);
}
}
int num10 = ((EClass.rnd(2) == 0) ? 1 : 0);
int num11 = ((EClass.rnd(2) == 0) ? 1 : 0);
if (attackSource == AttackSource.Condition)
{
num10 = 1 + EClass.rnd(2);
num11 = 1 + EClass.rnd(2);
}
if (num10 > 0)
if (num11 > 0)
{
bool flag = Chara.HasCondition<ConPoison>() || ((e.id == 915 || e.id == 923) && ResistLv(Evalue(955)) < 4);
AddBlood(num10, flag ? 6 : (-1));
AddBlood(num11, flag ? 6 : (-1));
}
bool flag2 = true;
switch (e.id)
}
if (IsPC)
{
float num11 = (float)hp / (float)MaxHP;
float num12 = (float)hp / (float)MaxHP;
if (Evalue(1421) > 0)
{
num11 = (float)Chara.mana.value / (float)Chara.mana.max;
num12 = (float)Chara.mana.value / (float)Chara.mana.max;
}
if (num11 < 0.3f)
if (num12 < 0.3f)
{
PlaySound("heartbeat", 1f - num11 * 2f);
PlaySound("heartbeat", 1f - num12 * 2f);
}
}
if (!IsPC && hp < MaxHP / 5 && Evalue(423) <= 0 && dmg * 100 / MaxHP + 10 > EClass.rnd(IsPowerful ? 400 : 150) && !HasCondition<ConFear>())
@@ -4495,29 +4494,29 @@ void ProcAbsorb()
int valueOrDefault2 = (origin.Evalue(661) + weapon?.Evalue(661, ignoreGlobalElement: true)).GetValueOrDefault();
if (valueOrDefault > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara))
{
int num12 = EClass.rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10));
origin.Chara.stamina.Mod(num12);
int num13 = EClass.rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10));
origin.Chara.stamina.Mod(num13);
if (IsAliveInCurrentZone)
{
Chara.stamina.Mod(-num12);
Chara.stamina.Mod(-num13);
}
}
if (origin.HasElement(1350) && attackSource == AttackSource.Melee)
{
int num13 = EClass.rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10));
origin.Chara.mana.Mod(num13);
int num14 = EClass.rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10));
origin.Chara.mana.Mod(num14);
if (IsAliveInCurrentZone)
{
Chara.mana.Mod(-num13);
Chara.mana.Mod(-num14);
}
}
if (valueOrDefault2 > 0 && attackSource == AttackSource.Melee)
{
int num14 = EClass.rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10));
origin.Chara.mana.Mod(num14);
int num15 = EClass.rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10));
origin.Chara.mana.Mod(num15);
if (IsAliveInCurrentZone)
{
Chara.mana.Mod(-num14);
Chara.mana.Mod(-num15);
}
}
}
@@ -5191,10 +5190,11 @@ public void MakeRefFrom(Card c1, Card c2 = null)
c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.c_extraNameRef);
}
public void SetHidden(bool hide = true)
public Card SetHidden(bool hide = true)
{
isHidden = hide;
pos.cell.Refresh();
return this;
}
public virtual MoveResult _Move(Point p, MoveType type = MoveType.Walk)
{
p *= 0.5;
}
if ((uint)(priceType - 1) <= 1u && (category.IsChildOf("vegi") || category.IsChildOf("fruit")))
if ((uint)(priceType - 1) <= 1u)
{
p *= ((EClass.pc.faith == EClass.game.religions.Harvest) ? 3f : 2f);
if (category.IsChildOf("fish"))
{
p *= ((EClass.pc.faith == EClass.game.religions.Luck) ? 1.5f : 1f);
}
if (category.IsChildOf("vegi") || category.IsChildOf("fruit"))
{
p *= ((EClass.pc.faith == EClass.game.religions.Harvest) ? 3f : 2f);
}
}
}
if (id == "rod_wish")
Chara
@@ -1246,7 +1246,7 @@ public void OnBanish()
return;
}
memberType = FactionMemberType.Default;
foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)))
foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)).ToList())
{
EClass.pc.PickOrDrop(EClass.pc.pos, item);
}
@@ -6445,7 +6445,7 @@ public void ShowDialog()
if (questDebt != null && questDebt.paid)
{
questDebt.stage++;
if (questDebt.stage > 6)
if (questDebt.stage > 7)
{
questDebt.stage = 1;
}
ConStrife
@@ -26,10 +26,6 @@ public override bool CanStack(Condition c)
public void AddKill(Chara c)
{
if (c == null)
{
return;
}
if (c.IsPCFactionOrMinion)
{
if (c.IsMinion)
CoreDebug
@@ -924,6 +924,9 @@ public void UpdateInput()
}
if (Input.GetKeyDown(KeyCode.F2))
{
EClass.pc.Pick(ThingGen.CreateSpellbook(8550));
EClass.pc.Pick(ThingGen.CreatePotion(8550));
EClass.pc.Pick(ThingGen.CreateSpellbook(9004));
Chara targetChara = EClass.scene.mouseTarget.TargetChara;
if (targetChara != null)
{
ELEMENT
@@ -1116,13 +1116,16 @@ public static int GetResistLv(int v)
public static int GetResistDamage(int dmg, int v, int power = 0)
{
int resistLv = GetResistLv(v);
resistLv -= power;
if (resistLv >= 4)
int num = GetResistLv(v);
if (power > 0 && num > 0)
{
num = Mathf.Max(num - power, 0);
}
if (num >= 4)
{
return 0;
}
return resistLv switch
return num switch
{
3 => dmg / 4,
2 => dmg / 3,
ENC
@@ -50,7 +50,7 @@ public class ENC
public const int mod_chaser = 620;
public const int bane_machine = 465;
public const int loving = 417;
public const int mod_splash = 608;
@@ -70,17 +70,17 @@ public class ENC
public const int negateBlind = 421;
public const int innocence = 418;
public const int negatePoison = 420;
public const int loving = 417;
public const int innocence = 418;
public const int seeInvisible = 416;
public const int invisibility = 415;
public const int encHit = 414;
public const int breathing = 429;
public const int slowCorruption = 412;
public const int encHit = 414;
public const int encSpell = 411;
@@ -92,7 +92,7 @@ public class ENC
public const int travelSpeed = 407;
public const int resMutation = 406;
public const int mod_talisman = 609;
public const int slowDecay = 405;
@@ -106,16 +106,16 @@ public class ENC
public const int negateTeleport = 400;
public const int mod_talisman = 609;
public const int breathing = 429;
public const int slowCorruption = 412;
public const int sustain_STR = 440;
public const int negatePoison = 420;
public const int resMutation = 406;
public const int sustain_DEX = 442;
public const int sustain_END = 441;
public const int mod_scatter = 607;
public const int mod_drill = 606;
@@ -124,8 +124,6 @@ public class ENC
public const int mod_ammo_recover = 604;
public const int sustain_END = 441;
public const int mod_rapid = 602;
public const int mod_reload = 601;
@@ -148,38 +146,40 @@ public class ENC
public const int mod_ammo_knockback = 603;
public const int sustain_WIL = 445;
public const int sustain_MAG = 446;
public const int bane_man = 464;
public const int bane_god = 466;
public const int bane_animal = 463;
public const int sustain_LER = 444;
public const int bane_fairy = 462;
public const int sustain_WIL = 445;
public const int bane_undead = 461;
public const int sustain_CHA = 447;
public const int bane_dragon = 460;
public const int sustain_CHA = 447;
public const int sustain_PER = 443;
public const int sustain_MAG = 446;
public const int bane_fairy = 462;
public const int bane_god = 466;
public const int bane_animal = 463;
public const int sustain_LER = 444;
public const int bane_man = 464;
public const int sustain_PER = 443;
public const int bane_machine = 465;
public const int bane_undead = 461;
public static readonly int[] IDS = new int[85]
{
653, 652, 651, 650, 624, 622, 623, 640, 654, 641,
655, 851, 660, 661, 662, 663, 664, 665, 666, 850,
621, 865, 852, 656, 620, 465, 608, 428, 427, 426,
425, 424, 423, 422, 421, 418, 417, 416, 415, 414,
412, 411, 410, 409, 408, 407, 406, 405, 404, 403,
402, 401, 400, 609, 429, 440, 420, 442, 607, 606,
605, 604, 441, 602, 601, 600, 484, 483, 482, 481,
480, 468, 467, 603, 445, 464, 463, 462, 461, 460,
447, 446, 466, 444, 443
621, 865, 852, 656, 620, 417, 608, 428, 427, 426,
425, 424, 423, 422, 421, 420, 418, 416, 415, 429,
414, 411, 410, 409, 408, 407, 609, 405, 404, 403,
402, 401, 400, 412, 440, 406, 442, 441, 607, 606,
605, 604, 602, 601, 600, 484, 483, 482, 481, 480,
468, 467, 603, 446, 466, 444, 445, 447, 460, 443,
462, 463, 464, 465, 461
};
}
EffectId
@@ -114,5 +114,6 @@ public enum EffectId
DropMine = 290,
ThrowPotion = 291,
DrainMana = 292,
Swarm = 293
Swarm = 293,
Sword = 294
}
FACTION
public class FACTION
{
public const int bfCave = 3500;
public const int bfRuin = 3702;
public const int bfPlain = 3600;
public const int bfGeyser = 3701;
public const int bfForest = 3601;
public const int bfFertile = 3700;
public const int bfSnow = 3602;
public const int bfCave = 3500;
public const int fConstruction = 2003;
public const int bfSea = 3605;
public const int bfBeach = 3604;
public const int fRation = 2207;
public const int bfHill = 3603;
public const int bfSea = 3605;
public const int bfSnow = 3602;
public const int bfFertile = 3700;
public const int bfForest = 3601;
public const int bfGeyser = 3701;
public const int bfPlain = 3600;
public const int bfHill = 3603;
public const int fTaxEvasion = 2119;
public const int fPromo = 2202;
public const int fAttraction = 2206;
public const int fElec = 2201;
public const int fSafety = 2205;
public const int fFood = 2204;
public const int fMoral = 2203;
public const int fPromo = 2202;
public const int fElec = 2201;
public const int fSoil = 2200;
public const int fHeirloom = 2120;
public const int fTaxEvasion = 2119;
public const int fLuck = 2118;
public const int fLoyal = 2117;
public const int fAdmin = 2115;
public const int fEducation = 2116;
public const int bfTranquil = 3703;
public const int bfRuin = 3702;
public const int fLuck = 2118;
public const int fSafety = 2205;
public const int fRation = 2207;
public const int bfTranquil = 3703;
public const int bfVolcano = 3704;
public const int bfBasin = 3709;
public const int bfGum = 3803;
public const int bfHunt = 3705;
public const int bfFish = 3706;
public const int bfVolcano = 3704;
public const int actBuildInspect = 4006;
public const int actBuildRecipe = 4005;
public const int fEducation = 2116;
public const int actBuildCollect = 4004;
public const int actBuildAnywhere = 4003;
@@ -80,9 +78,7 @@ public class FACTION
public const int bfIce = 3804;
public const int bfGum = 3803;
public const int actBuildInspect = 4006;
public const int bfSilica = 3802;
public const int bfMushroom = 3801;
@@ -100,22 +96,26 @@ public class FACTION
public const int bfBreed = 3710;
public const int bfBasin = 3709;
public const int bfFreshAir = 3708;
public const int bfMonster = 3707;
public const int bfFish = 3706;
public const int bfHunt = 3705;
public const int bfSilica = 3802;
public const int fAdmin = 2115;
public const int fConstruction = 2003;
public static readonly int[] IDS = new int[52]
{
3500, 3600, 3601, 3602, 2003, 3604, 2207, 3605, 3700, 3701,
3603, 2206, 2201, 2204, 2203, 2202, 2200, 2120, 2119, 2118,
2117, 2115, 2116, 3702, 2205, 3703, 3709, 3705, 3704, 4005,
4004, 4003, 4002, 4001, 4000, 3900, 3805, 3804, 3803, 4006,
3801, 3800, 3784, 3783, 3782, 3781, 3780, 3710, 3708, 3707,
3706, 3802
3702, 3701, 3700, 3500, 3605, 3604, 3603, 3602, 3601, 3600,
2119, 2202, 2206, 2205, 2204, 2203, 2201, 2200, 2120, 2117,
3703, 2118, 2207, 3704, 3803, 3706, 4006, 4005, 2116, 4004,
4003, 4002, 4001, 4000, 3900, 3805, 3804, 3802, 3801, 3800,
3784, 3783, 3782, 3781, 3780, 3710, 3709, 3708, 3707, 3705,
2115, 2003
};
}
public class Faction : EClass
FEAT
public class FEAT
{
public const int featSTR = 1620;
public const int featDEX = 1621;
public const int featEND = 1622;
public const int featLuck = 1628;
public const int featLER = 1624;
public const int featMAG = 1625;
public const int featManaPrecision = 1214;
public const int featWIL = 1626;
public const int featSleeper = 1642;
public const int featCHA = 1627;
public const int featResCurse = 1641;
public const int featPER = 1623;
public const int featAnimalLover = 1640;
public const int featStamina = 1612;
public const int featFaith = 1636;
public const int featMilitant = 1419;
public const int featMartial = 1635;
public const int featLife = 1610;
public const int featNegotiate = 1634;
public const int featManaMeat = 1421;
public const int featSpotting = 1633;
public const int featExecutioner = 1420;
public const int featEvade = 1632;
public const int featSwordsage = 1418;
public const int featDefense = 1631;
public const int featWitch = 1417;
public const int featHardy = 1630;
public const int featInquisitor = 1416;
public const int featSPD = 1629;
public const int featFoxMaid = 1415;
public const int featSorter = 1643;
public const int featWhiteVixen = 1414;
public const int featLuck = 1628;
public const int featFairysan = 1413;
public const int featWIL = 1626;
public const int featSPD = 1629;
public const int featMAG = 1625;
public const int featMana = 1611;
public const int featLER = 1624;
public const int featHardy = 1630;
public const int featPER = 1623;
public const int featLonelySoul = 1646;
public const int featEND = 1622;
public const int featEvade = 1632;
public const int featDEX = 1621;
public const int featLuckyCat = 1412;
public const int featSTR = 1620;
public const int featManaCost = 1657;
public const int featStamina = 1612;
public const int featScavenger = 1656;
public const int featMana = 1611;
public const int featModelBeliever = 1655;
public const int featLife = 1610;
public const int featHeavyCasting = 1654;
public const int featManaMeat = 1421;
public const int featDreamWaker = 1653;
public const int featCHA = 1627;
public const int featRapidArrow = 1652;
public const int featBodyParts = 1644;
public const int featMagicManner = 1651;
public const int featParty = 1645;
public const int featGourmet = 1650;
public const int featLonelySoul = 1646;
public const int featDefender = 1649;
public const int featElea = 1213;
public const int featDefense = 1631;
public const int featSlowFood = 1200;
public const int featRapidMagic = 1648;
public const int featManaBond = 1201;
public const int featParty = 1645;
public const int featFastLearner = 1202;
public const int featBodyParts = 1644;
public const int featGrowParts = 1203;
public const int featSorter = 1643;
public const int featFairyWeak = 1204;
public const int featSleeper = 1642;
public const int featCannibalism = 1205;
public const int featResCurse = 1641;
public const int featMelilithCurse = 1206;
public const int featAnimalLover = 1640;
public const int featFoxBless = 1207;
public const int featFaith = 1636;
public const int featFoxLearn = 1208;
public const int featMartial = 1635;
public const int featFluffyTail = 1209;
public const int featNegotiate = 1634;
public const int featUndead = 1210;
public const int featSpotting = 1633;
public const int featSnail = 1211;
public const int featSummoner = 1647;
public const int featChef = 1658;
public const int featEarthStrength = 1411;
public const int featManaCost = 1657;
public const int featChef = 1658;
public const int featScavenger = 1656;
public const int featBoost = 1409;
public const int featModelBeliever = 1655;
public const int featLoyal = 1225;
public const int featHeavyCasting = 1654;
public const int featUnderground = 1226;
public const int featDreamWaker = 1653;
public const int featServant = 1227;
public const int featRapidArrow = 1652;
public const int featDemigod = 1228;
public const int featMagicManner = 1651;
public const int featLittleOne = 1229;
public const int featGourmet = 1650;
public const int featAdam = 1230;
public const int featDefender = 1649;
public const int featNirvana = 1231;
public const int featRapidMagic = 1648;
public const int featBaby = 1232;
public const int featSummoner = 1647;
public const int featCosmicHorror = 1233;
public const int featExecutioner = 1420;
public const int featLightEater = 1235;
public const int featMilitant = 1419;
public const int featNorland = 1236;
public const int featFairyResist = 1212;
public const int featRoran = 1237;
public const int featWitch = 1417;
public const int featElder = 1238;
@@ -145,49 +135,39 @@ public class FEAT
public const int featGod_harvest1 = 1325;
public const int featGod_luck1 = 1330;
public const int featShiva = 1224;
public const int featAcidBody = 1223;
public const int featSplit = 1222;
public const int featSpike = 1221;
public const int featReboot = 1410;
public const int featGod_harmony1 = 1335;
public const int featSlowFood = 1200;
public const int featRoran = 1237;
public const int featManaBond = 1201;
public const int featGod_oblivion1 = 1340;
public const int featFastLearner = 1202;
public const int featGod_moonshadow1 = 1350;
public const int featGrowParts = 1203;
public const int featGod_strife1 = 1355;
public const int featFairyWeak = 1204;
public const int featWarrior = 1400;
public const int featCannibalism = 1205;
public const int featThief = 1401;
public const int featMelilithCurse = 1206;
public const int featWizard = 1402;
public const int featFoxBless = 1207;
public const int featFarmer = 1403;
public const int featFoxLearn = 1208;
public const int featArcher = 1404;
public const int featGod_harmony1 = 1335;
public const int featPianist = 1405;
public const int featFluffyTail = 1209;
public const int featTourist = 1406;
public const int featSnail = 1211;
public const int featGod_trickery1 = 1345;
public const int featFairyResist = 1212;
public const int featPaladin = 1407;
public const int featElea = 1213;
public const int featNorland = 1236;
public const int featManaPrecision = 1214;
public const int featHeavyEater = 1234;
public const int featDwarf = 1215;
public const int featSwordsage = 1418;
public const int featSuccubus = 1216;
@@ -199,50 +179,70 @@ public class FEAT
public const int featFate = 1220;
public const int featUndead = 1210;
public const int featSpike = 1221;
public const int featGod_oblivion1 = 1340;
public const int featSplit = 1222;
public const int featHeavyEater = 1234;
public const int featAcidBody = 1223;
public const int featGod_moonshadow1 = 1350;
public const int featLightEater = 1235;
public const int featGod_trickery1 = 1345;
public const int featShiva = 1224;
public const int featWarrior = 1400;
public const int featUnderground = 1226;
public const int featThief = 1401;
public const int featServant = 1227;
public const int featWizard = 1402;
public const int featDwarf = 1215;
public const int featFarmer = 1403;
public const int featDemigod = 1228;
public const int featPianist = 1405;
public const int featLittleOne = 1229;
public const int featTourist = 1406;
public const int featAdam = 1230;
public const int featPaladin = 1407;
public const int featNirvana = 1231;
public const int featArcher = 1404;
public const int featBaby = 1232;
public const int featCosmicHorror = 1233;
public const int featLoyal = 1225;
public const int featPaladin2 = 1408;
public const int featGod_strife1 = 1355;
public const int featGod_luck1 = 1330;
public const int featReboot = 1410;
public const int featBoost = 1409;
public const int featInquisitor = 1416;
public const int featWhiteVixen = 1414;
public const int featFoxMaid = 1415;
public const int featLuckyCat = 1412;
public const int featFairysan = 1413;
public const int featEarthStrength = 1411;
public static readonly int[] IDS = new int[113]
{
1620, 1621, 1622, 1628, 1624, 1625, 1626, 1627, 1623, 1612,
1419, 1610, 1421, 1420, 1418, 1417, 1416, 1415, 1414, 1413,
1629, 1611, 1630, 1646, 1632, 1412, 1657, 1656, 1655, 1654,
1653, 1652, 1651, 1650, 1649, 1631, 1648, 1645, 1644, 1643,
1642, 1641, 1640, 1636, 1635, 1634, 1633, 1647, 1411, 1658,
1409, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233,
1235, 1236, 1237, 1238, 1239, 1300, 1305, 1310, 1315, 1320,
1325, 1330, 1224, 1223, 1222, 1221, 1410, 1200, 1201, 1202,
1203, 1204, 1205, 1206, 1207, 1208, 1335, 1209, 1211, 1212,
1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1210, 1340,
1234, 1350, 1345, 1400, 1401, 1402, 1403, 1405, 1406, 1407,
1404, 1408, 1355
1214, 1642, 1641, 1640, 1636, 1635, 1634, 1633, 1632, 1631,
1630, 1629, 1643, 1628, 1626, 1625, 1624, 1623, 1622, 1621,
1620, 1612, 1611, 1610, 1421, 1627, 1644, 1645, 1646, 1213,
1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
1210, 1211, 1658, 1657, 1656, 1655, 1654, 1653, 1652, 1651,
1650, 1649, 1648, 1647, 1420, 1419, 1212, 1417, 1238, 1239,
1300, 1305, 1310, 1315, 1320, 1325, 1335, 1237, 1340, 1350,
1355, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1345, 1407,
1236, 1234, 1418, 1216, 1217, 1218, 1219, 1220, 1221, 1222,
1223, 1235, 1224, 1226, 1227, 1215, 1228, 1229, 1230, 1231,
1232, 1233, 1225, 1408, 1330, 1410, 1409, 1416, 1414, 1415,
1412, 1413, 1411
};
}
public class Feat : Element
FOOD
public class FOOD
{
public const int food_cat = 701;
public const int food_god = 758;
public const int food_love = 703;
public const int justcooked = 757;
public const int food_bug = 704;
public const int loseWeight = 706;
public const int gainWeight = 705;
public const int loseWeight = 706;
public const int justcooked = 757;
public const int food_bug = 704;
public const int food_god = 758;
public const int food_love = 703;
public const int food_poison = 702;
public const int food_cat = 701;
public const int food_CHA = 700;
public static readonly int[] IDS = new int[9] { 701, 703, 704, 705, 706, 757, 758, 702, 700 };
public static readonly int[] IDS = new int[9] { 758, 757, 706, 705, 704, 703, 702, 701, 700 };
}
MUTATION
public class MUTATION
{
public const int mutationRegenN = 1517;
public const int mutationStrN = 1521;
public const int mutationRegen = 1516;
public const int mutationStr = 1520;
public const int mutationSpeedN = 1519;
public const int mutationSpeed = 1518;
public const int mutationEye = 1512;
public const int mutationDexN = 1515;
public const int mutationSkin = 1510;
public const int mutationDex = 1514;
public const int mutationEyeN = 1513;
public const int mutationSkinN = 1511;
public const int mutationSpeed = 1518;
public const int mutationSkin = 1510;
public const int mutationDex = 1514;
public const int mutationCha = 1522;
public const int mutationSpeedN = 1519;
public const int mutationRegen = 1516;
public const int mutationEye = 1512;
public const int mutationChaN = 1523;
public const int mutationStrN = 1521;
public const int mutationRegenN = 1517;
public const int mutationBrainN = 1525;
public const int etherPoisonHand = 1565;
public const int etherManaBattery = 1564;
public const int mutationBrain = 1524;
public const int etherProvoke = 1563;
public const int mutationStr = 1520;
public const int etherArmor = 1562;
public const int etherStupid = 1561;
@@ -44,44 +52,36 @@ public class MUTATION
public const int etherNeck = 1555;
public const int etherWing = 1554;
public const int etherManaBattery = 1564;
public const int etherEye = 1553;
public const int etherArmor = 1562;
public const int mutationChaN = 1523;
public const int mutationCha = 1522;
public const int mutationBrain = 1524;
public const int mutationBrainN = 1525;
public const int mutationCold = 1526;
public const int mutationColdN = 1527;
public const int etherWing = 1554;
public const int mutationLightning = 1528;
public const int mutationCold = 1526;
public const int mutationLightningN = 1529;
public const int mutationBody = 1530;
public const int mutationBodyN = 1531;
public const int mutationColdN = 1527;
public const int etherGravity = 1550;
public const int etherUgly = 1551;
public const int mutationLightningN = 1529;
public const int etherFeet = 1552;
public const int mutationBodyN = 1531;
public static readonly int[] IDS = new int[38]
{
1517, 1516, 1515, 1510, 1513, 1511, 1518, 1514, 1519, 1512,
1521, 1565, 1564, 1563, 1520, 1561, 1560, 1559, 1558, 1557,
1556, 1555, 1554, 1553, 1562, 1523, 1522, 1524, 1525, 1527,
1528, 1526, 1530, 1531, 1550, 1551, 1529, 1552
1521, 1520, 1519, 1518, 1512, 1515, 1514, 1513, 1511, 1510,
1522, 1516, 1523, 1517, 1525, 1565, 1524, 1563, 1562, 1561,
1560, 1559, 1558, 1557, 1556, 1555, 1564, 1553, 1526, 1554,
1528, 1529, 1530, 1527, 1550, 1551, 1552, 1531
};
}
public class Mutation : Feat
POLICY
public class POLICY
{
public const int suite_room = 2813;
public const int store_premium = 2817;
public const int store_ripoff = 2816;
public const int tourist_safety = 2811;
public const int platinum_ticket = 2815;
public const int bed_quality = 2812;
public const int mass_exhibition = 2814;
public const int suite_room = 2813;
public const int home_discount = 2800;
public const int mass_exhibition = 2814;
public const int tourist_safety = 2811;
public const int platinum_ticket = 2815;
public const int open_business = 2810;
public const int store_premium = 2817;
public const int bed_quality = 2812;
public const int store_ripoff = 2816;
public const int license_food = 2818;
public const int milk_fan = 2825;
public const int legendary_exhibition = 2823;
public const int license_general = 2820;
@@ -31,39 +29,41 @@ public class POLICY
public const int celeb = 2822;
public const int legendary_exhibition = 2823;
public const int license_stolen = 2824;
public const int milk_fan = 2825;
public const int egg_fan = 2826;
public const int breed_season = 2827;
public const int license_slaver = 2828;
public const int home_discount = 2800;
public const int license_furniture = 2819;
public const int livestock_priv = 2715;
public const int self_sufficient = 2511;
public const int taxfree = 2514;
public const int incomeTransfer = 2711;
public const int wealth_tax = 2500;
public const int human_right = 2506;
public const int faith_tax = 2501;
public const int prohibition = 2503;
public const int food_for_people = 2502;
public const int prohibition = 2503;
public const int faith_tax = 2501;
public const int impressment = 2504;
public const int wealth_tax = 2500;
public const int legal_drug = 2505;
public const int forcePanty = 2712;
public const int human_right = 2506;
public const int legal_drug = 2505;
public const int forcePanty = 2712;
public const int inquisition = 2507;
public const int nocturnal_life = 2508;
@@ -71,48 +71,48 @@ public class POLICY
public const int ban_radio = 2510;
public const int resident_tax = 2512;
public const int self_sufficient = 2511;
public const int resident_wanted = 2513;
public const int resident_tax = 2512;
public const int inquisition = 2507;
public const int impressment = 2504;
public const int stop_growth = 2515;
public const int border_watch = 2704;
public const int auto_farm = 2707;
public const int resident_wanted = 2513;
public const int taxfree = 2514;
public const int demon_invocation = 2706;
public const int noDM = 2708;
public const int auto_farm = 2707;
public const int taxTransfer = 2705;
public const int noAnimal = 2709;
public const int noMother = 2710;
public const int noDM = 2708;
public const int weed_no = 2703;
public const int taxTransfer = 2705;
public const int demon_invocation = 2706;
public const int trash_no = 2702;
public const int speed_growth = 2516;
public const int trash_sort = 2701;
public const int energy_conservation = 2700;
public const int trash_sort = 2701;
public const int speed_growth = 2516;
public const int trash_no = 2702;
public const int noMother = 2710;
public static readonly int[] IDS = new int[51]
{
2813, 2816, 2815, 2814, 2800, 2811, 2810, 2817, 2812, 2818,
2825, 2820, 2821, 2822, 2823, 2824, 2826, 2827, 2828, 2819,
2715, 2511, 2711, 2500, 2501, 2502, 2503, 2504, 2505, 2506,
2712, 2508, 2509, 2510, 2512, 2513, 2507, 2515, 2704, 2707,
2514, 2708, 2709, 2710, 2703, 2705, 2706, 2516, 2700, 2701,
2702
2817, 2811, 2812, 2813, 2814, 2815, 2810, 2816, 2818, 2823,
2820, 2821, 2822, 2824, 2825, 2826, 2827, 2828, 2800, 2819,
2715, 2514, 2711, 2506, 2503, 2502, 2501, 2500, 2712, 2505,
2507, 2508, 2509, 2510, 2511, 2512, 2504, 2515, 2704, 2513,
2706, 2707, 2705, 2709, 2708, 2703, 2702, 2701, 2700, 2516,
2710
};
}
public class Policy : EClass
Player
@@ -1586,6 +1586,7 @@ public void DreamSpell()
case "weapon":
case "funnel":
case "miasma":
case "sword":
flag = true;
break;
}
QuestDebt
@@ -41,7 +41,7 @@ public override string GetTextProgress()
public bool CanGiveBill()
{
return stage < 6;
return stage < 7;
}
public int GetBillAmount()
@@ -89,6 +89,10 @@ public void GiveReward()
EClass.player.flags.loytelMartLv = 1;
Msg.Say("upgradeLoytelMart");
break;
case 7:
EClass.player.flags.loytelMartLv = 2;
Msg.Say("upgradeLoytelMart");
break;
}
}
RenderRow
@@ -273,7 +273,6 @@ public Sprite GetSprite(int dir = 0, int skin = 0, bool snow = false)
{
dir = skin;
skin = 0;
Debug.Log(idString + "/" + dir + "/" + skin);
}
if (skin != 0 && skin >= sprites.GetLength(0))
{
SKILL
public class SKILL
{
public const int digging = 230;
public const int twohand = 130;
public const int climbing = 242;
public const int shield = 123;
public const int music = 241;
public const int armorHeavy = 122;
public const int acidproof = 51;
public const int armorLight = 120;
public const int fireproof = 50;
public const int fishing = 245;
public const int weaponScythe = 110;
public const int weaponCrossbow = 109;
public const int travel = 240;
public const int twowield = 131;
public const int weaponScythe = 110;
public const int acidproof = 51;
public const int weaponBlunt = 111;
public const int armorLight = 120;
public const int tactics = 132;
public const int armorHeavy = 122;
public const int evasion = 150;
public const int shield = 123;
public const int eyeofmind = 134;
public const int twohand = 130;
public const int climbing = 242;
public const int twowield = 131;
public const int music = 241;
public const int travel = 240;
public const int taming = 237;
public const int milking = 235;
public const int digging = 230;
public const int parasite = 227;
public const int riding = 226;
public const int lumberjack = 225;
public const int mining = 220;
public const int spotting = 210;
public const int weightlifting = 207;
public const int milking = 235;
public const int fireproof = 50;
public const int swimming = 200;
public const int evasionPlus = 151;
public const int evasion = 150;
public const int stealth = 152;
public const int taming = 237;
public const int evasionPlus = 151;
public const int eyeofmind = 134;
public const int strategy = 135;
public const int marksman = 133;
public const int tactics = 132;
public const int stealth = 152;
public const int lumberjack = 225;
public const int strategy = 135;
public const int martial = 100;
public const int weaponDagger = 107;
public const int weaponPolearm = 106;
public const int DEX = 72;
public const int END = 71;
@@ -74,11 +76,11 @@ public class SKILL
public const int HIT = 66;
public const int PV = 65;
public const int PER = 73;
public const int DEX = 72;
public const int PV = 65;
public const int DV = 64;
public const int vigor = 62;
public const int mana = 61;
@@ -90,15 +92,15 @@ public class SKILL
public const int PDR = 55;
public const int fishing = 245;
public const int vigor = 62;
public const int DV = 64;
public const int throwing = 108;
public const int PER = 73;
public const int LER = 74;
public const int WIL = 75;
public const int MAG = 76;
public const int weaponPolearm = 106;
public const int weaponGun = 105;
@@ -110,11 +112,11 @@ public class SKILL
public const int weaponSword = 101;
public const int antiMagic = 93;
public const int WIL = 75;
public const int LER = 74;
public const int antiMagic = 93;
public const int penetration = 92;
public const int vopal = 91;
public const int critical = 90;
@@ -126,13 +128,11 @@ public class SKILL
public const int CHA = 77;
public const int MAG = 76;
public const int vopal = 91;
public const int penetration = 92;
public const int gathering = 250;
public const int martial = 100;
public const int weightlifting = 207;
public const int blacksmith = 256;
@@ -204,7 +204,7 @@ public class SKILL
public const int eleLightning = 912;
public const int alchemy = 257;
public const int eleDarkness = 913;
public const int sculpture = 258;
@@ -222,7 +222,7 @@ public class SKILL
public const int farming = 286;
public const int eleDarkness = 913;
public const int cooking = 287;
public const int building = 288;
@@ -234,23 +234,23 @@ public class SKILL
public const int investing = 292;
public const int cooking = 287;
public const int alchemy = 257;
public const int regeneration = 300;
public const int eleFire = 910;
public const int eleCold = 911;
public const int disarmTrap = 293;
public const int eleFire = 910;
public const int env = 313;
public const int fun = 312;
public const int bladder = 311;
public const int hygine = 310;
public const int memorization = 307;
public const int bladder = 311;
public const int fun = 312;
public const int magicDevice = 305;
@@ -264,24 +264,24 @@ public class SKILL
public const int faith = 306;
public const int eleCold = 911;
public const int disarmTrap = 293;
public static readonly int[] IDS = new int[133]
{
230, 242, 241, 51, 50, 109, 240, 110, 111, 120,
122, 123, 130, 131, 227, 226, 225, 220, 210, 207,
235, 200, 151, 150, 237, 134, 133, 132, 152, 135,
107, 106, 71, 70, 68, 67, 66, 65, 72, 64,
61, 60, 57, 56, 55, 245, 62, 108, 73, 75,
105, 104, 103, 102, 101, 93, 74, 92, 90, 80,
79, 78, 77, 76, 91, 250, 100, 256, 916, 917,
130, 123, 122, 120, 245, 110, 109, 131, 51, 111,
132, 150, 134, 242, 241, 240, 237, 235, 230, 227,
226, 220, 210, 50, 200, 152, 151, 135, 133, 225,
100, 107, 72, 71, 70, 68, 67, 66, 73, 65,
62, 61, 60, 57, 56, 55, 64, 108, 74, 76,
106, 105, 104, 103, 102, 101, 75, 93, 91, 90,
80, 79, 78, 77, 92, 250, 207, 256, 916, 917,
918, 919, 920, 921, 922, 923, 924, 925, 926, 950,
951, 952, 915, 953, 955, 956, 957, 958, 959, 960,
961, 962, 963, 964, 965, 970, 972, 255, 954, 914,
971, 912, 257, 258, 259, 260, 261, 280, 281, 285,
286, 913, 288, 289, 290, 291, 292, 287, 300, 910,
293, 313, 312, 310, 307, 311, 305, 304, 303, 302,
301, 306, 911
971, 912, 913, 258, 259, 260, 261, 280, 281, 285,
286, 287, 288, 289, 290, 291, 292, 257, 300, 911,
910, 313, 311, 310, 307, 312, 305, 304, 303, 302,
301, 306, 293
};
}
public class Skill : Element
SLOT
public class SLOT
{
public const int back = 33;
public const int tool = 40;
public const int torso = 32;
public const int range = 41;
public const int lightsource = 45;
public const int finger = 36;
public const int leg = 38;
public const int arm = 34;
public const int leg = 38;
public const int neck = 31;
public const int hand = 35;
public const int toolbelt = 44;
public const int waist = 37;
public const int hand = 35;
public const int foot = 39;
public const int back = 33;
public const int neck = 31;
public const int waist = 37;
public const int toolbelt = 44;
public const int head = 30;
public const int range = 41;
public const int tool = 40;
public const int token = 43;
public const int head = 30;
public const int foot = 39;
public const int ammo = 42;
public const int finger = 36;
public const int torso = 32;
public static readonly int[] IDS = new int[16]
{
33, 40, 32, 45, 36, 34, 38, 35, 37, 39,
31, 44, 41, 43, 30, 42
41, 45, 38, 34, 31, 44, 35, 33, 37, 30,
40, 43, 39, 42, 36, 32
};
}
SPELL
public class SPELL
{
public const int hand_Poison = 50405;
public const int funnel_Sound = 50607;
public const int arrow_Mind = 50504;
public const int hand_Sound = 50407;
public const int miasma_Sound = 50707;
public const int bolt_Sound = 50307;
public const int weapon_Sound = 50807;
public const int puddle_Sound = 50907;
public const int ball_Nerve = 50108;
public const int arrow_Sound = 50507;
public const int hand_Mind = 50404;
public const int miasma_Nerve = 50708;
public const int bolt_Nerve = 50308;
@@ -20,10 +24,6 @@ public class SPELL
public const int funnel_Nerve = 50608;
public const int bolt_Mind = 50304;
public const int miasma_Nerve = 50708;
public const int weapon_Nerve = 50808;
public const int puddle_Nerve = 50908;
@@ -32,25 +32,39 @@ public class SPELL
public const int bolt_Holy = 50309;
public const int arrow_Holy = 50509;
public const int ball_Nerve = 50108;
public const int hand_Holy = 50409;
public const int arrow_Holy = 50509;
public const int hand_Poison = 50405;
public const int puddle_Nether = 50906;
public const int funnel_Holy = 50609;
public const int miasma_Sound = 50707;
public const int bolt_Mind = 50304;
public const int funnel_Sound = 50607;
public const int hand_Mind = 50404;
public const int hand_Sound = 50407;
public const int arrow_Mind = 50504;
public const int bolt_Poison = 50305;
public const int funnel_Mind = 50604;
public const int miasma_Mind = 50704;
public const int weapon_Mind = 50804;
public const int puddle_Mind = 50904;
public const int ball_Poison = 50105;
public const int arrow_Poison = 50505;
public const int bolt_Poison = 50305;
public const int funnel_Poison = 50605;
public const int ball_Sound = 50107;
public const int arrow_Poison = 50505;
public const int miasma_Poison = 50705;
@@ -60,12 +74,6 @@ public class SPELL
public const int ball_Nether = 50106;
public const int puddle_Mind = 50904;
public const int weapon_Mind = 50804;
public const int arrow_Sound = 50507;
public const int bolt_Nether = 50306;
public const int hand_Nether = 50406;
@@ -78,15 +86,7 @@ public class SPELL
public const int weapon_Nether = 50806;
public const int puddle_Nether = 50906;
public const int funnel_Mind = 50604;
public const int ball_Sound = 50107;
public const int bolt_Sound = 50307;
public const int miasma_Mind = 50704;
public const int funnel_Poison = 50605;
public const int miasma_Holy = 50709;
@@ -206,10 +206,12 @@ public class SPELL
public const int puddle_Darkness = 50903;
public const int weapon_Void = 50816;
public const int ball_Fire = 50100;
public const int miasma_Darkness = 50703;
public const int SpMutation = 8380;
public const int SpWish = 8390;
public const int SpHealLight = 8400;
@@ -258,16 +260,14 @@ public class SPELL
public const int SpSilence = 8700;
public const int SpWeakness = 8702;
public const int SpMutation = 8380;
public const int SpLevitate = 8300;
public const int SpReconstruction = 8288;
public const int SpChangeMaterialG = 8286;
public const int SpChangeMaterial = 8285;
public const int ball_ = 7001;
public const int bolt_ = 7002;
@@ -282,6 +282,8 @@ public class SPELL
public const int weapon_ = 7007;
public const int sword_ = 7008;
public const int puddle_ = 7800;
public const int SpTeleport = 8200;
@@ -290,11 +292,11 @@ public class SPELL
public const int SpGate = 8202;
public const int SpReturn = 8220;
public const int SpWeakness = 8702;
public const int SpWeakResEle = 8704;
public const int SpReturn = 8220;
public const int SpEvac = 8221;
public const int SpIdentify = 8230;
public const int SpIdentifyG = 8232;
@@ -318,15 +320,15 @@ public class SPELL
public const int SpChangeMaterialLesser = 8284;
public const int SpChangeMaterial = 8285;
public const int SpIdentify = 8230;
public const int SpEvac = 8221;
public const int weapon_Darkness = 50803;
public const int SpWeakResEle = 8704;
public const int SpNightmare = 8705;
public const int SpGravity = 8708;
public const int SpBane = 8706;
public const int arrow_Fire = 50500;
public const int funnel_Fire = 50600;
@@ -350,9 +352,9 @@ public class SPELL
public const int weapon_Cold = 50801;
public const int puddle_Cold = 50901;
public const int hand_Fire = 50400;
public const int ball_Lightning = 50102;
public const int puddle_Cold = 50901;
public const int bolt_Lightning = 50302;
@@ -378,13 +380,15 @@ public class SPELL
public const int funnel_Darkness = 50603;
public const int arrow_Fire = 50500;
public const int ball_Lightning = 50102;
public const int hand_Fire = 50400;
public const int weapon_Darkness = 50803;
public const int bolt_Fire = 50300;
public const int ball_Fire = 50100;
public const int SpDrawBacker = 9503;
public const int SpGravity = 8708;
public const int SpSpeedDown = 8710;
@@ -408,11 +412,11 @@ public class SPELL
public const int SpSummonUndeadSister = 9001;
public const int SpSummonFire = 9002;
public const int weapon_Void = 50816;
public const int SpBane = 8706;
public const int SpSummonFire = 9002;
public const int SpSummonTentacle = 9003;
public const int SpSummonMonster = 9004;
public const int SpSummonPawn = 9005;
@@ -436,37 +440,35 @@ public class SPELL
public const int SpDrawMetal = 9502;
public const int SpDrawBacker = 9503;
public const int SpSummonMonster = 9004;
public const int SpSummonTentacle = 9003;
public const int puddle_Void = 50916;
public static readonly int[] IDS = new int[221]
public static readonly int[] IDS = new int[222]
{
50405, 50504, 50807, 50907, 50108, 50404, 50308, 50408, 50508, 50608,
50304, 50708, 50808, 50908, 50109, 50309, 50409, 50509, 50609, 50707,
50607, 50407, 50305, 50105, 50505, 50605, 50705, 50805, 50905, 50106,
50904, 50804, 50507, 50306, 50406, 50506, 50606, 50706, 50806, 50906,
50604, 50107, 50307, 50704, 50709, 50713, 50909, 50104, 50813, 50913,
50607, 50407, 50707, 50307, 50807, 50907, 50507, 50708, 50308, 50408,
50508, 50608, 50808, 50908, 50109, 50309, 50509, 50108, 50409, 50405,
50906, 50609, 50304, 50404, 50504, 50604, 50704, 50804, 50904, 50105,
50305, 50107, 50505, 50705, 50805, 50905, 50106, 50306, 50406, 50506,
50606, 50706, 50806, 50605, 50709, 50713, 50909, 50104, 50813, 50913,
50114, 50314, 50414, 50514, 50614, 50714, 50814, 50914, 50115, 50315,
50415, 50515, 50615, 50715, 50815, 50915, 50116, 50316, 50416, 50516,
50616, 50716, 50613, 50809, 50513, 50313, 50110, 50310, 50410, 50510,
50610, 50710, 50810, 50910, 50111, 50311, 50411, 50511, 50611, 50711,
50811, 50911, 50112, 50312, 50412, 50512, 50612, 50712, 50812, 50912,
50113, 50413, 50903, 50816, 50703, 8390, 8400, 8401, 8402, 8403,
8404, 8405, 8406, 8430, 8450, 8470, 8471, 8480, 8490, 8491,
8500, 8501, 8502, 8503, 8504, 8506, 8510, 8550, 8700, 8702,
8380, 8300, 8288, 8286, 7001, 7002, 7003, 7004, 7005, 7006,
7007, 7800, 8200, 8201, 8202, 8220, 8704, 8221, 8232, 8240,
8241, 8250, 8251, 8255, 8256, 8260, 8280, 8281, 8284, 8285,
8230, 50803, 8705, 8708, 50600, 50700, 50800, 50900, 50101, 50301,
50401, 50501, 50601, 50701, 50801, 50901, 50102, 50302, 50402, 50502,
50602, 50702, 50802, 50902, 50103, 50303, 50403, 50503, 50603, 50500,
50400, 50300, 50100, 8710, 8770, 8775, 8776, 8780, 8790, 8791,
8800, 8801, 9000, 9001, 9002, 8706, 9003, 9005, 9006, 9007,
9050, 9150, 9151, 9160, 9200, 9500, 9501, 9502, 9503, 9004,
50916
50113, 50413, 50903, 50100, 50703, 8380, 8390, 8400, 8401, 8402,
8403, 8404, 8405, 8406, 8430, 8450, 8470, 8471, 8480, 8490,
8491, 8500, 8501, 8502, 8503, 8504, 8506, 8510, 8550, 8700,
8300, 8288, 8286, 8285, 7001, 7002, 7003, 7004, 7005, 7006,
7007, 7008, 7800, 8200, 8201, 8202, 8702, 8220, 8230, 8232,
8240, 8241, 8250, 8251, 8255, 8256, 8260, 8280, 8281, 8284,
8221, 8704, 8705, 8706, 50500, 50600, 50700, 50800, 50900, 50101,
50301, 50401, 50501, 50601, 50701, 50801, 50400, 50901, 50302, 50402,
50502, 50602, 50702, 50802, 50902, 50103, 50303, 50403, 50503, 50603,
50102, 50803, 50300, 9503, 8708, 8710, 8770, 8775, 8776, 8780,
8790, 8791, 8800, 8801, 9000, 9001, 50816, 9002, 9004, 9005,
9006, 9007, 9050, 9150, 9151, 9160, 9200, 9500, 9501, 9502,
9003, 50916
};
}
public class Spell : Ability
SourceElement
@@ -380,6 +380,7 @@ public override void OnAfterImportData()
AddRow(ele, num + num2 + 700, "miasma_");
AddRow(ele, num + num2 + 800, "weapon_");
AddRow(ele, num + num2 + 900, "puddle_");
AddRow(ele, num + num2 + 1000, "sword_");
num2++;
}
}
ThingGen
@@ -153,16 +153,16 @@ public static Thing CreateSpellbook(string alias, int num = 1)
return CreateSpellbook(EClass.sources.elements.alias[alias].id, num);
}
public static Thing CreateSkillbook(int ele, int num = 1)
public static Thing CreateSpellbook(int ele, int num = 1)
{
Thing thing = Create("book_skill").SetNum(num);
thing.refVal = ele;
Thing thing = Create("spellbook").SetNum(num);
TraitSpellbook.Create(thing, ele);
return thing;
}
public static Thing CreateSpellbook(int ele, int num = 1)
public static Thing CreateSkillbook(int ele, int num = 1)
{
Thing thing = Create("spellbook").SetNum(num);
Thing thing = Create("book_skill").SetNum(num);
thing.refVal = ele;
return thing;
}
@@ -170,21 +170,28 @@ public static Thing CreateSpellbook(int ele, int num = 1)
public static Thing CreateScroll(int ele, int num = 1)
{
Thing thing = Create("scroll_random").SetNum(num);
thing.refVal = ele;
TraitSpellbook.Create(thing, ele);
return thing;
}
public static Thing CreateRod(int ele)
{
Thing thing = Create("rod");
TraitRod.Create(thing, ele);
return thing;
}
public static Thing CreatePotion(int ele, int num = 1)
{
Thing thing = Create("1163").SetNum(num);
thing.refVal = ele;
TraitPotion.Create(thing, ele);
return thing;
}
public static Thing CreatePerfume(int ele, int num = 1)
{
Thing thing = Create("perfume").SetNum(num);
thing.refVal = ele;
TraitPotion.Create(thing, ele);
return thing;
}
Trait
@@ -61,6 +61,8 @@ public string[] Params
public virtual bool IsFloating => false;
public virtual bool IsNoShop => false;
public virtual bool IsGround => false;
public virtual bool IsOnlyUsableByPc => false;
@@ -1782,7 +1784,7 @@ public void OnBarter()
for (int i = 0; (float)i < num; i++)
{
Thing thing = CreateStock();
if ((!(thing.trait is TraitRod) || thing.c_charges != 0) && thing.GetPrice() > 0)
if ((!thing.trait.IsNoShop || (ShopType == ShopType.LoytelMart && EClass.player.flags.loytelMartLv >= 2)) && (!(thing.trait is TraitRod) || thing.c_charges != 0) && thing.GetPrice() > 0)
{
t.AddThing(thing);
}
@@ -2169,7 +2171,9 @@ public Thing CreateStock()
case ShopType.Drug:
return FromFilter("shop_drug");
case ShopType.LoytelMart:
if (EClass.player.flags.loytelMartLv >= 1)
{
int loytelMartLv = EClass.player.flags.loytelMartLv;
if (loytelMartLv >= 1)
{
if (EClass.rnd(10) == 0)
{
@@ -2192,7 +2196,9 @@ public Thing CreateStock()
return Create("1165");
}
}
_ = 2;
return FromFilter("shop_junk");
}
case ShopType.Junk:
return FromFilter("shop_junk");
case ShopType.Souvenir:
TraitBaseSpellbook
@@ -45,7 +45,7 @@ public override void OnCreate(int lv)
switch (BookType)
{
case Type.RandomSpell:
owner.refVal = selecter.Select(lv);
TraitSpellbook.Create(owner, selecter.Select(lv));
break;
case Type.Ancient:
{
TraitDemitas
@@ -52,6 +52,10 @@ public override ShopType ShopType
public override bool CanCopy(Thing t)
{
if (t.HasElement(759))
{
return false;
}
return t.trait is TraitSpellbook;
}
}
TraitDrink
@@ -30,6 +30,18 @@ public virtual int IdEle
public virtual SourceElement.Row source => null;
public override bool IsNoShop
{
get
{
if (source != null)
{
return source.tag.Contains("noShop");
}
return false;
}
}
public virtual string AliasEle => N1;
public virtual string N1 => GetParam(3);
TraitPotion
public class TraitPotion : TraitDrink
{
public static void Create(Card owner, int ele)
{
owner.refVal = ele;
if (EClass.sources.elements.map[ele].tag.Contains("noCopy"))
{
owner.elements.SetBase(759, 10);
}
}
}
TraitPotionRandom
@@ -30,7 +30,7 @@ public override int GetValue()
public override void OnCreate(int lv)
{
owner.refVal = selecter.Select(lv);
TraitPotion.Create(owner, selecter.Select(lv));
}
public override string GetName()
TraitRod
@@ -6,6 +6,18 @@ public class TraitRod : TraitTool
public virtual string aliasEle => null;
public override bool IsNoShop
{
get
{
if (source != null)
{
return source.tag.Contains("noShop");
}
return false;
}
}
public virtual SourceElement.Row source => null;
public virtual int Power
@@ -49,6 +61,7 @@ public override void OnCreate(int lv)
if (owner.id == "rod_wish")
{
owner.c_charges = 1;
owner.elements.SetBase(759, 30);
}
}
@@ -59,4 +72,15 @@ public override void TrySetHeldAct(ActPlan p)
trait = this
}, owner);
}
public static void Create(Card owner, int ele)
{
owner.refVal = ele;
SourceElement.Row row = EClass.sources.elements.map[ele];
owner.c_charges = EClass.rnd(row.charge * 150 / 100);
if (row.tag.Contains("noCopy"))
{
owner.elements.SetBase(759, 10);
}
}
}
TraitRodRandom
@@ -30,8 +30,7 @@ public override bool IsNegative
public override void OnCreate(int lv)
{
owner.c_charges = EClass.rnd(source.charge * 150 / 100);
owner.refVal = selecter.Select(lv);
TraitRod.Create(owner, selecter.Select(lv));
}
public override string GetName()
TraitSalesTag
@@ -34,6 +34,10 @@ public static bool CanTagSale(Card t, bool insideContainer = false)
{
return false;
}
if (t.trait is TraitMannequin)
{
return false;
}
}
if (t.GetPrice(CurrencyType.Money, sell: true, PriceType.PlayerShop) == 0)
{
TraitScroll
@@ -20,6 +20,18 @@ public virtual int eleParent
public virtual bool UseSourceValue => true;
public override bool IsNoShop
{
get
{
if (source != null)
{
return source.tag.Contains("noShop");
}
return false;
}
}
public override SourceElement.Row GetRefElement()
{
return source;
TraitSpellbook
public class TraitSpellbook : TraitBaseSpellbook
{
public override int Difficulty => 10 + source.LV;
public static void Create(Card owner, int ele)
{
owner.refVal = ele;
SourceElement.Row row = EClass.sources.elements.map[ele];
if (row.tag.Contains("noCopy"))
{
owner.elements.SetBase(759, 10);
}
if (row.charge == 1)
{
owner.c_charges = 1;
}
}
}
TraitWrench
@@ -117,7 +117,7 @@ public bool Upgrade(Thing t)
public override void TrySetHeldAct(ActPlan p)
{
p.pos.Things.ForEach(delegate(Thing t)
p.pos.Things.ForeachReverse(delegate(Thing t)
{
if (IsValidTarget(t))
{