2using System.Collections.Generic;
13 private static List<Hobby>
listHobby =
new List<Hobby>();
15 public static string[]
IDTimeTable =
new string[2] {
"default",
"owl" };
42 [JsonProperty(PropertyName =
"T1")]
45 [JsonProperty(PropertyName =
"T2")]
48 [JsonProperty(PropertyName =
"T3")]
51 [JsonProperty(PropertyName =
"T4")]
54 [JsonProperty(PropertyName =
"T5")]
57 [JsonProperty(PropertyName =
"T6")]
60 [JsonProperty(PropertyName =
"T7")]
63 [JsonProperty(PropertyName =
"T8")]
66 [JsonProperty(PropertyName =
"1")]
69 [JsonProperty(PropertyName =
"2")]
72 [JsonProperty(PropertyName =
"3")]
75 [JsonProperty(PropertyName =
"4")]
78 [JsonProperty(PropertyName =
"8")]
79 public string[]
_strs =
new string[5];
81 [JsonProperty(PropertyName =
"9")]
190 private static List<Chara>
_pts =
new List<Chara>();
480 if (base.c_originalHostility == (
Hostility)0)
482 if (!
source.hostility.IsEmpty())
488 return base.c_originalHostility;
498 if (
source.idActor.Length <= 1)
530 return "CharaActorPCC";
542 if (base.dir != 1 && base.dir != 2)
558 return base.dir == 2;
572 return base.ExistsOnMap;
618 if (base.c_love !=
null)
620 return base.c_love.dateMarriage != 0;
650 return base.c_uidMaster != 0;
726 public override int MaxHP => (int)Mathf.Clamp(((
long)(base.END * 2 + base.STR + base.WIL / 2) * (
long)Mathf.Min(base.LV, 25) / 25 + base.END + 10) *
Evalue(60) / 100 * ((base.IsPCFactionOrMinion ? 100 : (100 + (int)base.rarity * 300)) + (
IsPC ? (
EClass.
player.
lastEmptyAlly *
Evalue(1646)) : 0)) / 100, 1f, 1E+09f);
728 public override int WeightLimit => (int)Mathf.Clamp(((
long)base.STR * 500L + base.END * 250 +
Evalue(207) * 2000) * ((!
HasElement(1411)) ? 1 : 5) + 45000, 1000f, 1.0737418E+09f);
732 public int MaxSummon => Mathf.Max((
int)Mathf.Sqrt(base.CHA), 1) +
Evalue(1647) + ((!base.IsPCFactionOrMinion) ? ((
int)base.rarity * 5) : 0);
738 if (base.c_idMainElement == 0)
746 public override int DV
757 num = 50 + (num - 50) / 10;
760 int WeaknessMod(
int a)
762 if (HasCondition<ConWeakness>())
775 public override int PV
786 num = 50 + (num - 50) / 10;
789 int WeaknessMod(
int a)
791 if (HasCondition<ConWeakness>())
812 spriteReplacer.data.tryFixPrefNotLoadedAtStart =
true;
869 if (!
race.tag.Contains(
"ride"))
871 if (!
race.tag.Contains(
"noRide"))
891 if (!
IsGlobal && !base.isSubsetCard)
1037 if (!(
race.id ==
"cat") && !(
race.id ==
"catsister"))
1039 return race.id ==
"catgod";
1055 return race.id ==
"mutant";
1079 return EClass.Branch.uidMaid == base.uid;
1105 if (!
source.works.Contains(
"Rich"))
1107 return source.hobbies.Contains(
"Rich");
1133 if (base.c_genes !=
null)
1135 return base.c_genes.GetGeneSlot(
this);
1161 if (!
race.tag.Contains(
"mofu"))
1188 if (!h.
source.elements.IsEmpty())
1190 for (
int i = 0; i < h.
source.elements.Length; i += 2)
1192 int ele = h.
source.elements[i];
1193 int v = h.
source.elements[i + 1];
1223 if (base.rarity >=
Rarity.Legendary)
1238 if (
host ==
null || includeRide)
1242 return base.hp <
MaxHP / 5;
1257 return num > num2 + 0.1f;
1354 return p.cell.room.data.accessType
switch
1357 BaseArea.AccessType.Private =>
false,
1384 for (
int i = 0; i < slots.Count; i++)
1393 _cbits1.Bits = (uint)
_cints[0];
1404 pccData.state = (base.isCensored ? PCCState.Naked : PCCState.Normal);
1413 if (
source.tag.Contains(
"boss"))
1434 string text = base.c_altName ??
source.GetName(
this);
1435 if (HasCondition<ConTransmuteShadow>())
1442 if (base.c_bossType ==
BossType.Evolved)
1444 text =
"_evolved".lang(text.ToTitleCase(wholeText:
true));
1447 if (text.Length > 0 &&
char.IsLower(text[0]))
1449 if (base.rarity >=
Rarity.Legendary)
1451 text = text.ToTitleCase();
1455 text = text.AddArticle();
1462 int num2 = ((base.rarity ==
Rarity.Mythical) ? 3 : ((base.rarity >=
Rarity.Mythical) ? 2 : ((base.rarity >=
Rarity.Legendary) ? 2 : ((!
_alias.IsEmpty()) ? 1 : (-1)))));
1467 text = (
Aka.IsEmpty() ? text.Bracket(num2) : (num2
switch
1472 }).lang((num2 == -1) ?
Aka :
Aka.ToTitleCase(wholeText:
true), text.Bracket(num2)));
1474 return text + text2;
1479 if (r != base.rarity)
1507 Hostility hostility2 = (base.c_originalHostility = h);
1508 this.hostility = hostility2;
1524 if (uniqueData !=
null)
1563 base.isSubsetCard =
false;
1565 base.c_uidMaster = 0;
1597 if (
source.tag.Contains(
"boss"))
1601 int num = ((bp.lv != -999) ?
bp.
lv : base.LV);
1623 if (
source.idActor.Length > 2)
1632 if (
source.mainElement.Length != 0)
1634 int _genLv = Mathf.Min(
genLv, 100);
1635 List<Tuple<string, int, int>> list =
new List<Tuple<string, int, int>>();
1636 string[] mainElement =
source.mainElement;
1637 for (
int i = 0; i < mainElement.Length; i++)
1639 string[] array = mainElement[i].Split(
'/');
1641 int num2 = source.LV * row.eleP / 100;
1642 if (list.Count == 0 || num2 < _genLv || array[0] ==
bp.
idEle)
1644 list.Add(
new Tuple<string, int, int>(array[0], (array.Length > 1) ?
int.Parse(array[1]) : 0, num2));
1647 Tuple<string, int, int> tuple = list.RandomItemWeighted((Tuple<string, int, int> a) => 10000 / Mathf.Max(100 + (_genLv - a.Item3) * 25, 1));
1650 tuple = list.Where((Tuple<string, int, int> a) => a.Item1 == bp.idEle ||
"ele" + a.Item1 ==
bp.
idEle).FirstOrDefault() ?? tuple;
1652 SetMainElement(tuple.Item1, (tuple.Item2 == 0) ? 10 : tuple.Item2, elemental:
true);
1653 if (list.Count >= 2)
1655 num = tuple.Item3 + base.LV -
source.LV;
1660 base.c_altName = NameGen.getRandomName();
1664 _alias = AliasGen.GetRandomAlias();
1677 if (base.LV > 5 &&
race.id ==
"mutant")
1679 for (
int j = 0; j < Mathf.Min(1 + base.LV / 5, 20); j++)
1686 case "putty_mech_b":
1695 if (
race.EQ.Length != 0 || !
source.equip.IsEmpty())
1713 case "olderyoungersister":
1716 case "sister_undead":
1720 if (
id ==
"sister_undead" &&
EClass.
rnd(10) == 0)
1739 if (!
source.faith.IsEmpty())
1800 Debug.LogError(
"source is null");
1820 base.isHidden =
false;
1842 string text =
"marshmallow_king";
1843 string text2 =
"fusion";
1844 if (
id ==
"imotoroid")
1846 text =
"imotomaton";
1853 if (!text2.IsEmpty())
1861 chara.PlayAnime(
AnimeID.FallSky);
1862 chara.pos.PlaySound(
"fuse");
1863 chara.pos.PlayEffect(
"vanish");
1881 if (c.
c_bossType != 0 || base.c_bossType != 0)
1911 if (con !=
DuplicateCondition.Water && con !=
DuplicateCondition.Quantum && (HasCondition<ConPoison>() || HasCondition<ConConfuse>() || HasCondition<ConDim>() || HasCondition<ConParalyze>() || HasCondition<ConSleep>() || HasCondition<ConBurning>() || HasCondition<ConFreeze>() || HasCondition<ConMiasma>()))
1939 dest = dest.
GetRandomPoint(2, requireLos:
false, allowChara:
false, allowBlocked:
false, 200);
1940 if (dest ==
null || dest.Equals(
pos) || !dest.IsValid || !
CanDuplicate(con))
1942 Say(
"split_fail",
this);
1947 if (inheritHostility)
1962 if (
item.Key != 1275)
1964 Element orCreateElement = chara.elements.GetOrCreateElement(
item.Key);
1965 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.
vSource;
1968 chara.SetFaith(
faith);
1969 chara.bio = IO.DeepCopy(
bio);
1971 chara.c_daysWithGod = base.c_daysWithGod;
1972 chara.RefreshFaithElement();
1973 chara.hp = (int)Mathf.Clamp((
float)chara.MaxHP * ((float)base.hp / (
float)
MaxHP) * 0.99f, 0f, chara.MaxHP);
1974 chara.isCopy =
true;
1975 chara.isScaled = base.isScaled;
1976 chara.c_altName = base.c_altName;
1980 chara.pccData = IO.DeepCopy(
pccData);
1991 int num2 = (base.ChildrenWeight + ((t !=
null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 /
WeightLimit;
2000 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
2010 int num = base.ChildrenWeight * 100 / Mathf.Max(1,
WeightLimit);
2026 Say(flag ?
"dmgBurdenStairs" :
"dmgBurdenFallDown",
this);
2032 long num2 = (num * (base.ChildrenWeight * 100 /
WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
2060 info?.AddText(
"rideSpeed".lang(
_Speed.ToString() ??
""));
2062 else if (
host !=
null)
2091 info?.AddText(
_Speed - speed,
"parasiteSpeed".lang());
2103 num3 = 50 + Mathf.Clamp((
int)Mathf.Sqrt(num4) * 5 -
EClass.
_zone.
DangerLv / 50, (num5 > 0) ? 50 : ((base.IsPowerful ||
IsMultisize) ? 40 : 0), 50) + Mathf.Clamp((
int)Mathf.Sqrt(num4), 0, 25);
2104 if (info !=
null && num3 != 100)
2131 num3 -= (
IsPC ? 50 : 100);
2171 num3 += EClass.player.lastEmptyAlly *
Evalue(1646);
2176 num3 += EClass.player.lastEmptyAlly * 10 - 10;
2182 num3 +=
EClass.
curve((base.LV - 900) / 100 * 10, 500, 100);
2183 info?.AddFix(
EClass.
curve((base.LV - 900) / 100 * 10, 500, 100),
"enemySpeedBuff".lang());
2185 if (HasCondition<ConGravity>())
2188 info?.AddFix(-30, GetCondition<ConGravity>().
Name);
2198 info?.AddText(
"minSpeed".lang(10.
ToString() ??
""));
2209 if (value.
source.category ==
"skill")
2229 this.hostility = hostility2;
2235 this.hostility = hostility2;
2241 this.hostility = hostility2;
2256 base.ApplyEditorTags(tag);
2264 Debug.LogWarning(
"Chara " +
id +
" not found");
2273 if (!
id.StartsWith(
"ele"))
2282 if (base.c_idMainElement != 0)
2284 SetElements(base.c_idMainElement,
remove:
true);
2285 base.c_idMainElement = 0;
2290 SetElements(
id,
remove:
false);
2291 base.c_idMainElement =
id;
2294 base.isElemental =
true;
2297 base.c_lightColor = (byte)Mathf.Clamp(colorSprite.r * 3f, 1f, 31f) * 1024 + (byte)Mathf.Clamp(colorSprite.g * 3f, 1f, 31f) * 32 + (byte)Mathf.Clamp(colorSprite.b * 3f, 1f, 31f);
2301 void SetElements(
int idEle,
bool remove)
2361 base.c_idJob = idNew;
2389 int ele =
new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2393 Say(
"gain_bodyparts",
this,
Element.
Get(ele).GetName().ToLower());
2414 for (
int num =
body.
slots.Count - 1; num >= 0; num--)
2423 string[] array =
race.figure.Split(
'|');
2424 foreach (
string s
in array)
2437 string[] array =
race.figure.Split(
'|');
2438 foreach (
string s
in array)
2463 bool flag =
id ==
"chara" ||
id ==
"player";
2464 if (
race.id ==
"bike" &&
id !=
"bike_cub")
2481 base.c_idRace = idNew;
2497 Debug.Log(
"Creating Replacement NPC for:" +
this);
2525 this.hostility = hostility2;
2527 base.c_summonDuration = 0;
2528 base.isSummon =
false;
2549 owner?.
Say(
"summon_vanish",
this);
2559 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.
hostility));
2560 this.hostility = hostility2;
2561 base.c_uidMaster = _master.
uid;
2562 base.c_minionType = type;
2569 base.c_uidMaster = 0;
2574 if (chara.
enemy ==
this)
2586 List<Chara> list =
new List<Chara>();
2614 base.c_summonDuration = duration;
2615 base.isSummon =
true;
2662 int num = ((p.z >=
pos.
z) ? ((p.
x >
pos.
x) ? 1 : ((p.z >
pos.
z) ? 2 : 3)) : 0);
2681 int num2 = ((z >=
pos.
z) ? ((x >
pos.
x) ? 1 : ((z >
pos.
z) ? 2 : 3)) : 0);
2690 num2 = ((z >= p.
z) ? ((x > p.
x) ? 1 : ((z > p.
z) ? 2 : 3)) : 0);
2697 num2 = ((z >=
pos.
z) ? ((x >
pos.
x) ? 1 : ((z >
pos.
z) ? 2 : 3)) : 0);
2706 num2 = ((z >= p.
z) ? ((x > p.
x) ? 1 : ((z > p.
z) ? 2 : 3)) : 0);
2732 if (detail !=
null && detail.
charas.Count > 0)
2767 int num = ((p.z >=
pos.
z) ? ((p.
x >
pos.
x) ? 1 : ((p.z >
pos.
z) ? 2 : 3)) : 0);
2777 int num2 = ((z >=
pos.
z) ? ((x >
pos.
x) ? 1 : ((z >
pos.
z) ? 2 : 3)) : 0);
2782 num2 = ((z >= p.
z) ? ((x > p.
x) ? 1 : ((z > p.
z) ? 2 : 3)) : 0);
2789 num2 = ((z >=
pos.
z) ? ((x >
pos.
x) ? 1 : ((z >
pos.
z) ? 2 : 3)) : 0);
2794 num2 = ((z >= p.
z) ? ((x > p.
x) ? 1 : ((z > p.
z) ? 2 : 3)) : 0);
2825 List<Point> list =
new List<Point>();
2873 if (pathProgress.
HasPath && pathProgress.
nodes.Count < num + 4)
2882 if (pathProgress.
HasPath && pathProgress.
nodes.Count < num + 4)
2891 if (pathProgress.
HasPath && pathProgress.
nodes.Count < num + 25)
2900 if (pathProgress.
HasPath && pathProgress.
nodes.Count < num + 25)
2915 if (!condition.
TryMove(newPoint))
2920 if (base.isRestrained)
2926 base.isRestrained =
false;
2928 if (!
CanMoveTo(newPoint, allowDestroyPath))
2932 return _Move(newPoint);
2983 EClass.player.lastZonePos =
null;
2986 for (
int i = 0; i < num2 * 4; i++)
2997 EClass.player.regionMoveWarned =
true;
2998 Msg.
Say(
"regionAbortMove");
3009 AddCondition<ConSuffocation>((
Evalue(200) != 0) ? (2000 / (100 +
EvalueMax(200, -5) * 10)) : 30, force:
true);
3011 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
3018 ModExp(200, ((!flag) ? 1 : 10) + num4 * 12);
3021 EClass.player.regionMoveWarned =
false;
3029 num = EClass.setting.defaultActPace * 3f;
3057 if (
CanMoveTo(randomNeighbor, allowDestroyPath:
false))
3059 newPoint = randomNeighbor;
3067 if (newPoint.
x !=
pos.
x || newPoint.
z !=
pos.
z)
3072 if (effect !=
null && effect.
id == 7)
3077 Say(
"abWeb_caught",
this);
3079 effect2.power = effect2.power * 3 / 4;
3083 Say(
"abWeb_pass",
this);
3088 EClass.player.renderExtraTime = 0f;
3093 else if ((newPoint.
x >
pos.
x && newPoint.
z >
pos.
z) || (newPoint.
x <
pos.
x && newPoint.
z <
pos.
z))
3102 if (
item.mimicry !=
null &&
item.IsHostile(
this))
3104 if (
item.mimicry.ShouldRevealOnPush)
3106 item.mimicry.Reveal(
this, surprise:
true);
3122 traitDoor.TryOpenLock(
this);
3132 bool flag4 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.
isClearSnow;
3135 bool flag5 = cell.IsTopWater && !cell.
isFloating;
3165 string text = ((flag3 || flag5) ?
"water" : tileRow.
soundFoot.IsEmpty(row.
soundFoot.IsEmpty(
"default")));
3166 if (cell.
obj != 0 && cell.
sourceObj.tileType.IsPlayFootSound && !cell.
matObj.soundFoot.IsEmpty())
3168 text = cell.
matObj.soundFoot;
3180 if (!text.IsEmpty())
3182 SoundManager.altLastData =
IsPC;
3189 bool flag6 = scene.actionMode.gameSpeed > 1f;
3190 scene.psFoot.transform.position = renderer.position + pcOrbit.
footPos;
3191 scene.psFoot.startColor = row.
matColor;
3195 scene.psSmoke.transform.position = renderer.position + pcOrbit.
smokePos;
3219 Say(
"replace_pc", chara, chara2);
3230 traitDoor2.TryOpen(
this);
3269 if ((dataPick.
noRotten && item2.
IsDecayed) || (dataPick.onlyRottable && item2.trait.Decay == 0))
3286 foreach (
int cat
in dataPick.
cats)
3294 else if (!dataPick.
flag.HasFlag(containerFlag))
3336 num6 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3353 EClass.player.flags.isShoesOff =
false;
3360 EClass.player.flags.isShoesOff =
true;
3390 AddExp(Mathf.Clamp((
int)Mathf.Sqrt(base.ExpToNext / 100), 1, 1000));
3410 EClass._map.MineBlock(_p, recoverBlock: false, this);
3413 EClass._map.MineObj(_p, null, this);
3419 EClass._map.MineObj(_p, null, this);
3426 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3432 t.SetPlaceState(PlaceState.roaming);
3448 if (list.Count == 0)
3452 list.Copy().ForeachReverse(delegate(
Chara c)
3456 List<Point> list2 = new List<Point>();
3457 for (int i = point.x - 1; i <= point.x + 1; i++)
3459 for (int j = point.z - 1; j <= point.z + 1; j++)
3461 if (i != point.x || j != point.z)
3463 Point point2 = new Point(i, j);
3464 if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
3471 if (list2.Count > 0)
3473 if (list2.Count > 1)
3475 list2.ForeachReverse(delegate(Point p)
3477 if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
3483 Point newPoint = list2.RandomItem();
3486 Say(
"displace",
this, c);
3496 int num =
EClass.
rndHalf(10 + Mathf.Min(GetCurrency() / 100, 1000));
3498 Say(
"pushed_money",
this, c);
3563 if (z == currentZone)
3572 state = ZoneTransition.EnterState.Return
3575 if (HasCondition<ConInvulnerable>())
3577 RemoveCondition<ConInvulnerable>();
3581 EClass.player.nextZone = z;
3589 EClass.player.returnInfo.turns += 5;
3596 EClass.player.deathZoneMove =
false;
3598 currentZone.events.OnLeaveZone();
3599 if (currentZone.instance !=
null)
3613 EClass.player.uidLastZone = currentZone.uid;
3616 if (currentZone.IsRegion)
3624 Msg.
Say(
"leaveZone", currentZone.Name);
3626 else if (z.
id != currentZone.id)
3630 EClass.player.lastZonePos = pos.Copy();
3632 EClass.player.lastTransition = transition;
3654 if (party !=
null && party.
leader ==
this)
3666 Debug.Log(base.Name);
3669 transition.uidLastZone = currentZone?.uid ?? 0;
3670 global.transition = transition;
3674 global.transition =
null;
3677 EClass.player.lastTransition =
null;
3680 if (IsBranchMember())
3691 public void MoveHome(
string id,
int x = -1,
int z = -1)
3706 CureCondition<ConSuspend>();
3733 orgPos =
new Point(x, z);
3734 if (factionBranch !=
null)
3736 RefreshWorkElements();
3748 state = ZoneTransition.EnterState.Fall,
3758 renderer.RefreshSprite();
3761 public override void Rotate(
bool reverse =
false)
3763 if (renderer.hasActor)
3765 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop:
true);
3769 base.dir = ((base.dir == 0) ? 1 : 0);
3772 renderer.RefreshSprite();
3782 angle =
Util.GetAngle(p.
x - pos.x, p.
z - pos.z);
3785 if (angle > 100f && angle < 170f)
3789 else if (angle > 170f && angle < 190f)
3793 else if (angle > 190f || (angle < -10f && angle > -100f))
3803 else if (angle > 170f && angle < 235f)
3807 else if (angle > 80f && angle < 145f)
3811 else if (angle > -100f && angle < -35f)
3815 else if (angle > -10f && angle < 55f)
3819 renderer.RefreshSprite();
3830 else if (base.dir == 1)
3834 else if (base.dir == 2)
3838 else if (base.dir == 3)
3843 else if (base.dir == 0)
3847 else if (base.dir == 1)
3851 else if (base.dir == 2)
3855 else if (base.dir == 3)
3864 if (!renderer.hasActor)
3866 if (angle == 0f || angle == 45f || angle == 90f)
3870 if (angle == -135f || angle == 180f || angle == -90f)
3880 return renderer.actor.currentDir;
3886 for (
int i = -num; i < num + 1; i++)
3888 for (
int j = -num; j < num + 1; j++)
3890 shared.
Set(pos.x + i, pos.z + j);
3901 for (
int num = conditions.Count - 1; num >= 0; num--)
3903 if (conditions[num].ConsumeTurn)
3913 if (_cooldowns !=
null)
3918 consumeTurn =
false;
3919 preventRegen =
false;
3920 emoIcon =
Emo2.none;
3923 base.c_summonDuration--;
3924 if (base.c_summonDuration <= 0)
3932 AddCondition<ConWet>(20);
3937 happiness = (hunger.value + stamina.value + depression.value + bladder.value + hygiene.
value) / 5;
3942 if (
EClass.
rnd(2) == 0 && !HasCondition<ConAwakening>())
3957 if (parasite !=
null)
3970 num = ((!IsPC) ? ((phase > 3) ? 50 : 0) : ((phase > 3) ? 50 : 0));
3987 AddCondition<ConBurning>(1000, force:
true);
3991 if (HasElement(1250))
3993 if (!HasCondition<ConVampire>())
3995 AddCondition<ConVampire>();
3997 if (!IsPC && !HasCooldown(8793))
4000 flag = ((!HasCondition<ConTransmuteBat>()) ? (!HasElement(431) && pos.IsSunLit) : (body.
HasElement(431) || (EClass.world.date.IsNight && !pos.IsSunLit)));
4007 UseAbility(
"SpTransmuteBat",
this);
4011 if (HasElement(1423) && !HasCondition<ConPeaky>())
4013 AddCondition<ConPeaky>();
4017 if (turn % 200 == 0)
4019 DiminishTempElements();
4031 preventRegen =
true;
4035 Say(
"dmgBurden",
this);
4036 DamageHP(MaxHP * (base.ChildrenWeight * 100 / WeightLimit) / 1000 + 1,
AttackSource.Burden);
4048 ModExp(207, 1 + phase2 * phase2);
4076 preventRegen =
true;
4080 if (
EClass.
rnd(100) == 0 && !isConfused)
4083 AddCondition<ConConfuse>(500);
4088 AddCondition<ConBlind>(200);
4091 if (turn % (200000 / Mathf.Max(100 + Evalue(409) * 10, 50)) == 0)
4099 int num2 = Evalue(409);
4100 if (num2 > 0 && turn % (200000 / Mathf.Max(100 + num2 * 10, 50)) == 0)
4105 for (
int num3 = conditions.Count - 1; num3 >= 0; num3--)
4107 if (num3 < conditions.Count)
4122 preventRegen =
true;
4137 case "cocoon_alien":
4147 if (elements.Base(79) >= 30)
4151 elements.SetTo(79, elements.Base(79) * 3 / 4);
4158 if (pos.IsBlocked && pos.HasBlock)
4160 preventRegen =
true;
4164 if (
EClass.
rnd(25) == 0 && base.hp < MaxHP)
4166 HealHP(
EClass.
rnd(Evalue(300) / 3 + 1) + 1);
4167 elements.ModExp(300, 8f);
4172 elements.ModExp(301, 8f);
4191 if (parasite !=
null)
4203 Debug.LogError(
"exception: pos is not valid:" + pos?.ToString() +
"/" +
this);
4214 ignoreSPAbsorb =
false;
4217 if (hasMovedThisTurn)
4219 pos.Things.ForeachReverse(delegate(
Thing t)
4223 AI_Goto aI_Goto = ai.Current as AI_Goto;
4224 if ((aI_Goto == null && !(ai is GoalManualMove)) || (aI_Goto != null && !aI_Goto.dest.Equals(pos)))
4235 hasMovedThisTurn =
false;
4238 EClass.player.haltMove =
false;
4272 EClass.player.safeTravel = 5 +
EClass.
rnd(5);
4283 if (!tileInfo.
shore)
4288 int num2 = (tileInfo.isRoad ? 22 : 12);
4291 num2 = (tileInfo.isRoad ? 16 : 10);
4295 num2 *= (flag2 ? 2 : 20);
4306 EClass.player.safeTravel = 5 +
EClass.
rnd(5);
4319 EClass.player.pickupDelay = 0f;
4327 EClass.player.returnInfo =
null;
4350 Msg.
Say(
"returnComplete");
4351 EClass.player.uidLastTravelZone = 0;
4353 EClass.player.lastZonePos =
null;
4355 EClass.player.returnInfo =
null;
4358 EClass.player.returnInfo =
null;
4359 Msg.
Say(
"returnOverweight");
4363 if ((HasNoGoal || !ai.
IsRunning) && !WillConsumeTurn())
4371 RecipeUpdater.dirty =
true;
4377 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (
float)
EClass.
pc.
Speed / (
float)Speed);
4378 hasMovedThisTurn =
false;
4381 if (!IsAliveInCurrentZone)
4385 renderer.RefreshStateIcon();
4386 if (host !=
null && !consumeTurn)
4388 if (host.
ride ==
this && ((host.
hasMovedThisTurn && IsInCombat) || (enemy !=
null && turn % 3 != 0)))
4394 if (Dist(enemy) < 3 &&
EClass.
rnd(2) == 0)
4396 Say(
"parasite_fail",
this, host);
4397 if (
EClass.
rnd(2) == 0 && GetInt(106) == 0)
4399 Talk(
"parasite_fail");
4414 if (base.isRestrained)
4435 Cell cell = base.Cell;
4438 AddCondition<ConWet>(50);
4439 if (pos.IsHotSpring)
4446 AddCondition<ConBurning>();
4450 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force:
true);
4466 AddCondition<ConWet>(50);
4470 PlaySound(
"fire_step");
4471 AddCondition<ConBurning>(30);
4476 PlaySound(
"bubble");
4477 AddCondition<ConWet>(30);
4482 if (hasMovedThisTurn)
4484 Say(
"abMistOfDarkness_step",
this);
4486 AddCondition<ConDark>(e.
power);
4508 aliasEle = EClass.sources.elements.map[e.idEle].alias,
4538 if (rootCard !=
this && things.IsFull(c.
Thing))
4545 public void PickOrDrop(
Point p,
string idThing,
int idMat = -1,
int num = 1,
bool msg =
true)
4555 if (things.GetDest(t).IsValid)
4576 t = TryPoisonPotion(t);
4584 Say(
"backpack_full_drop", t);
4591 Say(
"backpack_full", t);
4595 if (dest.
stack !=
null)
4599 PlaySound(
"pick_thing");
4600 Say(
"pick_thing",
this, t);
4608 PlaySound(
"pick_thing");
4609 Say(
"pick_thing",
this, t);
4611 TryReservePickupTutorial(t);
4621 Say(
"poisonDrip",
this);
4635 Say(
"absorbRod",
this, t);
4638 if (
rod.source !=
null)
4641 if (enumerator.MoveNext())
4673 if (t.
id ==
"pasture")
4685 foreach (
Card item in pos.ListCards())
4690 if (thing !=
null && !IsPC)
4692 thing.isNPCProperty =
true;
4737 t.isNPCProperty =
false;
4741 pos.TryWitnessCrime(
this);
4751 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition ||
EClass.
rnd(2) == 0;
4755 if (num == -1 || num > t.
Num)
4766 t =
Pick(t.
Thing, msg:
false, tryStack:
false);
4781 WidgetHotbar.dirtyCurrentItem =
true;
4792 if (IsPC && held.
invY == 1)
4794 WidgetHotbar.dirtyCurrentItem =
true;
4806 Say(
"canOnlyCarry", held);
4811 if (!flag && things.IsOverflowing())
4815 Say(
"backpack_full_drop", held);
4823 PlaySound(
"pick_thing");
4824 Say(
"pick_held",
this,
card);
4825 if (IsPC &&
card.id ==
"statue_weird")
4832 WidgetHotbar.dirtyCurrentItem =
true;
4847 return held.
Split(a);
4870 WidgetHotbar.dirtyCurrentItem =
true;
4875 if (
card.trait.CanOnlyCarry)
4886 Msg.
Say(
"markedImportant");
4901 t.ignoreAutoPick =
true;
4912 int num = Evalue(131);
4913 int num2 = Evalue(130);
4914 int num3 = Evalue(123);
4915 if (num > num2 && num > num3)
4919 if (num2 > num && num2 > num3)
4923 if (num3 > num && num3 > num2)
4937 if (elements.Value(122) > elements.Value(120))
4939 return elements.GetElement(122);
4941 return elements.GetElement(120);
4946 isOnCreate = onCreate;
4951 RestockInventory(onCreate);
4956 string equip = source.
equip;
4957 if (equip.IsEmpty())
4961 if (equip ==
"none")
4972 EQ_ID(
"staff_long", 1);
4980 EQ_ID(
"tail_snowleopard");
4986 EQ_ID(
"sword_zephir");
4989 case "adv_mesherada":
4992 EQ_ID(
"dagger_hathaway");
4998 EQ_ID(
"staff_long", -1,
Rarity.Legendary);
5002 EQ_ID(
"cloak_wing", -1,
Rarity.Mythical);
5008 EQ_ID(
"sword_muramasa");
5014 EQ_ID(
"dagger_gaki");
5018 EQ_ID(
"dagger_ninto");
5022 EQ_ID(
"dagger", -1,
Rarity.Legendary);
5028 EQ_ID(
"staff_Cat", -1,
Rarity.Mythical);
5037 EQ_ID(
"lightsaber_double", -1,
Rarity.Mythical);
5040 EQ_ID(
"cloak_mani2");
5042 AddThing(
"gun_gravity2");
5043 AddThing(
"gun_mani");
5049 AddThing(
"gun_gravity2");
5055 AddThing(
"bow_vindale");
5061 EQ_ID(
"martial_ring");
5067 EQ_ID(
"EtherDagger2");
5070 case "keeper_garden":
5073 EQ_ID(
"sword_ragnarok");
5079 EQ_ID(
"axe_destruction");
5085 EQ_ID(
"ribbon_duponne");
5091 EQ_ID(
"helm_seeker");
5094 EQ_ID(
"sword_katana");
5096 EQ_ID(
"sword_katana");
5099 EQ_ID(
"boots_seven");
5103 for (
int i = 0; i < 20; i++)
5108 AddThing(
"plat").SetNum(6);
5114 AddThing(
"guitar_efrond");
5120 AddThing(
"guitar_ash");
5126 EQ_ID(
"EtherDagger");
5134 thing.rarity =
Rarity.Normal;
5146 EQ_ID(
"staff_magius");
5152 EQ_ID(
"staff_insanity");
5158 EQ_ID(
"sword_katana");
5164 EQ_ID(
"staff_leek");
5170 EQ_ID(
"dagger_hocho");
5181 if (!TryEquipRanged())
5188 AddThing(
"gun_laser");
5193 Thing thing2 = AddThing(
"panzerfaust");
5202 EQ_CAT((
EClass.
rnd(4) == 0) ?
"crossbow" :
"bow");
5212 int num = ((base.rarity >=
Rarity.Mythical) ? (base.LV * 3) : ((base.rarity >=
Rarity.Legendary) ? (base.LV * 2) : base.LV));
5217 if (race.
id ==
"asura")
5219 for (
int j = 0; j < 4; j++)
5221 EQ_CAT(job.
weapon.RandomItem());
5224 for (
int k = 0; k < ((!(race.id ==
"mutant")) ? 1 : (2 + base.LV / 30)); k++)
5232 else if (!job.
weapon.IsEmpty())
5236 EQ_CAT(job.
weapon.RandomItem());
5238 if (race.
id ==
"mutant" || (Evalue(131) > 0 &&
EClass.
rnd(2) == 0))
5240 EQ_CAT(job.
weapon.RandomItem());
5283 EQ_ID(
"shield_lute");
5286 if (HasTag(
CTAG.shield))
5297 if (ShouldRestock(
"_meat"))
5303 Restock(
"book_story", 1);
5305 case "rock_thrower":
5313 Restock(
"book_story_home", 1);
5318 void Restock(
string id,
int num)
5320 if (ShouldRestock(
id))
5325 bool ShouldRestock(
string id)
5327 return things.Find(
id) ==
null;
5335 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
5336 Rarity rarity2 = base.rarity;
5337 if (
id ==
"big_sister")
5339 num = (isOnCreate ? 8 : 4);
5347 rarity =
Rarity.Superior;
5349 else if (rarity2 ==
Rarity.Legendary)
5353 else if (rarity2 >=
Rarity.Mythical)
5359 rarity =
Rarity.Legendary;
5361 CardBlueprint.current.rarity = rarity;
5369 CardBlueprint.current.rarity = r;
5372 if (body.
GetSlot(thing, onlyEmpty:
true) ==
null)
5377 if (!body.
Equip(thing))
5388 if ((slot == 0 || bodySlot !=
null) && (slot != 37 || !HasElement(1209)))
5393 if (bodySlot !=
null && !body.
Equip(thing, bodySlot))
5429 if (!IsPC && (!trait.CanJoinPartyResident || !trait.CanJoinParty || memberType != 0))
5433 Msg.
Say(
"returnHome",
this, homeZone.Name);
5450 base.hp = MaxHP / 3;
5453 if (hunger.
value > 30)
5457 sleepiness.value = 0;
5458 hostility = OriginalHostility;
5459 RemoveCondition<StanceTaunt>();
5460 if (
id ==
"keeper_garden")
5468 Msg.
Say(
"noDeathPenalty2",
this);
5472 Msg.
Say(
"noDeathPenalty",
this);
5478 List<Thing> dropList =
new List<Thing>();
5483 t.ignoreAutoPick = true;
5486 }, onlyAccessible:
false);
5492 EClass.player.preventDeathPenalty =
false;
5494 if (IsPCFaction && homeBranch !=
null)
5496 homeBranch.
Log(
"bRevive",
this);
5509 PlayEffect(
"revive");
5511 SetCensored(enable:
false);
5517 ModCorruption(-100000);
5518 if (base.LV < 10000000)
5520 SetLv(base.LV * 10 + 9);
5524 mana.value = mana.
max;
5525 stamina.value = stamina.
max;
5533 List<string> list =
new List<string> {
"930",
"931",
"947",
"948",
"949",
"950",
"951",
"952" };
5536 list =
new List<string> {
"944",
"946",
"backerGrave",
"backerGrave2" };
5540 if (!lastword.IsEmpty())
5542 thing.c_note = lastword;
5544 thing.isModified =
true;
5590 if (HasCondition<ConAnorexia>())
5596 else if (base.c_vomit > 10)
5598 AddCondition<ConAnorexia>();
5600 AddCondition<ConDim>();
5601 if (HasCondition<ConAnorexia>())
5622 if ((uint)(attackSource - 17) > 1u)
5624 AddCondition<ConFaint>(200, force:
true);
5629 bool isInActiveZone = IsInActiveZone;
5632 if (
id ==
"putty" && origin !=
null && origin.IsPCParty)
5642 if (
id ==
"tsunami")
5644 pos.PlaySound(
"water");
5648 Say(
"summon_vanish",
this);
5649 pos.PlayEffect(
"vanish");
5650 pos.PlaySound(
"vanish");
5655 if ((uint)(attackSource - 17) <= 1u)
5665 PlayEffect(
"revive");
5666 PlaySound(
"chime_angel");
5673 PlaySound(base.material.GetSoundDead(source));
5675 renderer.RefreshSprite();
5676 renderer.RefreshStateIcon();
5685 string text2 = ((origin ==
null) ?
"" : origin.GetName(
NameStyle.Full));
5688 text =
"dead_" + attackSource;
5694 text =
"dead_" + e.
source.alias;
5703 EClass._zone.isDeathLocation =
true;
5704 string s = ((origin ==
null) ? text :
"dead_by");
5716 AI_PlayMusic.keepPlaying =
false;
5722 Msg.
Say(
"goto_heaven",
this);
5726 if (originalTarget !=
null || origin ==
null || !origin.isSynced || (attackSource !=
AttackSource.Melee && attackSource !=
AttackSource.Range))
5728 Msg.
Say(text,
this,
"", text2);
5730 string text3 = TalkTopic(
"dead");
5731 if (!text3.IsEmpty())
5733 text3 = text3.StripBrackets();
5735 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5750 if (homeBranch !=
null)
5752 homeBranch.
Log(text,
this,
"");
5764 if (
id ==
"mandrake" || HasElement(488))
5766 Say(
"a_scream",
this);
5771 ClearTempElements();
5774 base.isSale =
false;
5786 EClass.player.returnInfo =
null;
5787 EClass.player.uidLastTravelZone = 0;
5796 chara3.enemy =
null;
5801 EClass.player.preventDeathPenalty =
true;
5806 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5815 currentZone.RemoveCard(
this);
5817 if ((origin !=
null && origin.IsPCParty) || IsPCFaction)
5820 if (IsPCFaction && !IsPCParty && (origin ==
null || !origin.IsPCParty))
5824 ModAffinity(
EClass.
pc, a, show:
false);
5826 if (!(text4 ==
"quru"))
5828 if (text4 ==
"corgon")
5840 if (origin.IsPCParty || origin.IsPCPartyMinion)
5847 else if (OriginalHostility >=
Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5851 else if (race.
id ==
"cat" && OriginalHostility >=
Hostility.Neutral)
5858 num = num * 30 / 100;
5869 else if (origin.IsPCFaction)
5871 origin.Chara.ModAffinity(
EClass.
pc, 1, show:
false);
5872 origin.Chara.ShowEmo(
Emo.love);
5875 if (base.sourceBacker !=
null && origin !=
null && origin.IsPCParty)
5879 if (base.IsPCFactionOrMinion)
5883 Msg.
Say(
"abort_allyDead");
5888 Msg.
Say(
"abort_enemyDead");
5890 if (IsPCParty && !IsPC)
5893 base.c_wasInPcParty =
true;
5899 if (attackSource !=
AttackSource.Euthanasia && !IsPCFaction)
5901 EClass.player.flags.little_killed =
true;
5915 case "shark_sister":
5924 if (attackSource ==
AttackSource.Finish && origin !=
null && origin.Evalue(665) > 0)
5928 if (chara2.
LV < base.LV)
5930 chara2.
SetLv(base.LV);
5932 chara2.
MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara,
MinionType.Friend);
5933 Msg.
Say(
"plant_pop",
this, chara2);
5941 if (IsPCFaction || IsPCFactionMinion)
5948 Point point = pos.
GetNearestPoint(allowBlock:
true, allowChara:
false, allowInstalled:
false, ignoreCenter:
true) ?? pos;
5954 flag = (flag2 =
true);
5955 EClass._zone.Boss =
null;
5960 EClass.player.flags.KilledBossInVoid =
true;
5966 SE.Play(
"Jingle/fanfare2");
5976 flag = (flag2 =
true);
5986 flag = (flag2 =
true);
5998 flag = (flag2 =
true);
6003 EClass.player.flags.killedDuponne =
true;
6009 flag = (flag2 =
true);
6015 case "melilith_boss":
6017 flag = (flag2 =
true);
6024 if (questCurry !=
null)
6027 flag = (flag2 =
true);
6037 bool num2 =
EClass.
_map.
FindChara((
id ==
"fairy_raina") ?
"fairy_poina" :
"fairy_raina") ==
null;
6039 if (num2 && questNasu !=
null && questNasu.
phase <= 1)
6041 if (questNasu.
phase == 0)
6046 flag = (flag2 =
true);
6057 flag = (flag2 =
true);
6059 if (questExploration !=
null)
6061 SE.Play(
"kill_boss");
6071 SE.Play(
"kill_boss");
6072 SoundManager.ForceBGM();
6078 SE.Play(
"kill_boss");
6092 EClass.player.willAutoSave =
true;
6107 return UseAbility(elements.GetElement(idAct)?.act ??
ACT.
Create(idAct), tc, pos, pt);
6112 return UseAbility(elements.GetElement(idAct)?.act ??
ACT.
Create(idAct), tc, pos, pt);
6117 if (HasCooldown(a.
id))
6125 if (a.
source.proc.TryGet(0) ==
"Heal" && HasElement(1422) && !IsPC)
6127 List<int> list =
new List<int> { 8400, 8401, 8402, 8403, 8404, 8405 };
6128 int num = list.IndexOf(a.
id);
6131 int num2 = list.TryGet(num + Evalue(1422));
6132 a = elements.GetElement(num2)?.
act ??
ACT.
Create(num2);
6141 bool flag2 = ability.
Has(a.
id);
6142 if (IsPC && HasCondition<StanceManaCost>())
6144 num4 = Evalue(1657);
6156 ForeachEnemy(delegate
6163 ForeachParty(delegate
6179 num5 = (IsPC ? (i * 100) : (50 + i * 50));
6181 int num6 = cost.cost * num5 / 100;
6184 num6 = num6 * 100 / (100 + (int)Mathf.Sqrt(Evalue(483) * 10) * 3);
6194 if (!IsPC && cost.
type ==
Act.
CostType.MP && mana.
value < 0 && (
EClass.
rnd(4) != 0 || IsPCFaction || (base.IsPowerful && mana.value < -20)))
6203 ActPlan.warning =
true;
6206 EClass.scene.mouseTarget.card = cardBk;
6207 if (UseAbility(a, tc, pos, pt))
6216 if ((isConfused &&
EClass.
rnd(4) == 0) || (isBlind && (pt || (pos !=
null && !pos.Equals(base.pos)) || (tc !=
null && tc.pos !=
null && !tc.pos.Equals(base.pos))) &&
EClass.
rnd(2) == 0))
6218 Say(
"shakeHead",
this);
6221 if (tc !=
null && tc !=
this)
6225 if (pos !=
null && !base.pos.Equals(pos))
6231 num3 = 1 + Evalue(1648);
6233 if (IsPC && cost.
cost > 0 && a.
Value == 0 && !flag2)
6240 string s = (isConfused ?
"_cast_confuse" : (HasCondition<ConDim>() ?
"_cast_dim" :
""));
6241 if (!a.
source.tag.Contains(
"useHand"))
6243 Say(race.
castStyle.IsEmpty(
"cast"),
this, a.
source.GetName().ToLower(), s.lang());
6254 if (num4 > 0 && (a.
vPotential >= i * 2 || flag2))
6258 a.vPotential -= i * 2;
6260 num6 = num6 * (100 - num4 * 20) / 100;
6271 if (IsPC && HasElement(1274) && a.vPotential < 0 && !flag2 && !a.
HasTag(
"dontForget"))
6277 if (a.
source.langAct.Length != 0 && tc !=
null)
6279 string text = a.
source.langAct[0];
6280 string text2 = ((a.source.langAct.Length >= 2) ? a.
source.langAct[1] :
"");
6281 if (text ==
"spell_hand")
6284 string @ref = text2.lang(list2[4]);
6285 Say(tc.IsPCParty ?
"cast_hand_ally" :
"cast_hand",
this, tc, @ref, tc.IsPCParty ? list2[1] : list2[2]);
6289 Say(text,
this, tc, text2.IsEmpty() ?
"" : text2.lang());
6293 Talk(
"insult_" + (base.IsMale ?
"m" :
"f"));
6300 if (Evalue(1421) >= 2 && base.hp <= MaxHP / Mathf.Max(1, 9 - Evalue(1421) * 2))
6313 elements.ModExp(304, Mathf.Clamp(num6 * 2, 1, 200));
6317 ignoreSPAbsorb =
true;
6320 if (a is
Spell && GetCondition<ConSilence>() !=
null)
6322 Say(
"cast_silence",
this);
6329 int spellExp = elements.GetSpellExp(
this, a, num5);
6332 Say(
"fizzle",
this);
6333 PlayEffect(
"fizzle");
6334 PlaySound(
"fizzle");
6337 ModExp(a.
id, spellExp / 5);
6339 RemoveCondition<ConInvisibility>();
6343 if (a.
source.cooldown > 0 && (!IsPC || !a.
source.tag.Contains(
"CD_npc")))
6345 AddCooldown(a.
id, a.
source.cooldown);
6347 if (HasTalk(
"phrase_" + a.
source.alias))
6349 EClass.player.forceTalk =
true;
6350 Talk(
"phrase_" + a.
source.alias);
6357 ForeachEnemy(delegate(
Chara c)
6364 ForeachParty(delegate(
Chara c)
6369 Act.forcePt =
false;
6373 for (
int j = 0; j < num3; j++)
6379 ActEffect.RapidCount = j;
6381 flag3 = a.
Perform(
this, tc, pos);
6384 if (flag3 && !isDead)
6388 elements.ModBase(a.
id, 1);
6392 ModExp(a.
id, spellExp);
6395 ActEffect.RapidCount = 0;
6396 if (flag3 && !a.
source.tag.Contains(
"keepInvisi") &&
EClass.
rnd(2) == 0)
6398 RemoveCondition<ConInvisibility>();
6399 RemoveCondition<ConDark>();
6401 if (!base.IsPCFactionOrMinion && a.
HasTag(
"specialAbility") && renderer.isSynced)
6403 string name = a.
Name;
6404 renderer.Say(
"| " + name +
" ");
6407 void ForeachEnemy(Action<Chara> action)
6409 if (_pts.Count == 0)
6414 if (chara3 !=
this && CanSeeLos(chara3) && chara3.
IsHostile(
this))
6420 for (
int num11 = _pts.Count - 1; num11 >= 0; num11--)
6422 action(_pts[num11]);
6425 void ForeachParty(Action<Chara> action)
6427 if (_pts.Count == 0)
6434 if (chara ==
this || chara.
host !=
null || CanSeeLos(chara))
6445 if ((chara2 ==
this || (chara2.
IsFriendOrAbove(
this) && CanSeeLos(chara2))) && (chara2 == tc || _pts.Count < 3 ||
EClass.
rnd(_pts.Count * _pts.Count) > 6))
6452 for (
int num9 = _pts.Count - 1; num9 >= 0; num9--)
6463 return 25 + Evalue(226) * 125 / 100;
6479 if (host.
ride ==
this)
6481 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.
EvalueRiding()));
6485 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.
Evalue(227)));
6490 int num3 = Evalue(304);
6493 num3 = Mathf.Max(num3, base.LV + 5);
6497 bool num6 = GetArmorSkill() == 122;
6501 num4 = 20 - Evalue(122) / 5;
6502 num5 += 10 - Evalue(1654) * 4;
6506 num4 = 10 - Evalue(120) / 5;
6516 if (parasite !=
null)
6527 num5 += 20 - Evalue(1654) * 8;
6533 if (HasCondition<ConDim>())
6535 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
6545 return Mathf.Clamp(100 + e.
Value - 10 - e.
source.LV * e.
source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
6548 public void DoAI(
int wait, Action onPerform)
6563 Say(headpat ?
"headpat" :
"cuddle",
this, c);
6569 if (headpat &&
this != c)
6580 if (!member.
IsPC && CanSeeLos(member))
6590 if (c.
id ==
"hedgehog_ether")
6594 Say(
"reflect_thorne",
this, c);
6601 EClass.player.forceTalk =
true;
6602 Talk(
"kiss",
null,
null, IsPC);
6604 renderer.PlayAnime(
AnimeID.Kiss, c);
6607 if (num > 0 &&
EClass.
rnd(IsPC ? 100 : 5000) == 0)
6611 if (IsPC &&
this != c)
6623 Effect.
Get(
"love").
_Play(pos, isSynced ? renderer.position : pos.Position(), 0f, c.
pos);
6628 if (
id ==
"olderyoungersister")
6633 Say(
"slap",
this, c);
6670 if (enemy ==
null && !IsPC)
6672 if (GetInt(106) == 0)
6676 if (OriginalHostility !=
Hostility.Enemy)
6680 SetEnemy(_tg.
Chara);
6694 if (_tg ==
null || !_tg.
isChara)
6701 EClass.pc.combatCount = 10;
6709 chara.
Say(
"frown",
this, chara);
6721 chara.
Say(
"frown",
this, chara);
6728 bool flag = chara.id ==
"fanatic";
6731 chara.
Say(
"callHelp", chara);
6803 if (mimicry !=
null && mimicry.
IsThing)
6807 bool flag = enemy !=
null || ai is
GoalCombat;
6808 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6810 bool flag3 = !IsPCParty;
6816 if (chara2 ==
this || !IsHostile(chara2) || !CanSee(chara2) || (chara2.mimicry !=
null && chara2.
mimicry.
IsThing))
6820 int num3 = Dist(chara2);
6821 int num4 = GetSightRadius() + (flag ? 1 : 0);
6828 if (
this == pos.FirstChara)
6830 chara2.
ModExp(152, Mathf.Clamp((num - chara2.
Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6838 DoHostileAction(chara2);
6851 DoHostileAction(chara);
6863 if (chara !=
this && chara != enemy && (chara.
mimicry ==
null || !chara.
mimicry.
IsThing) && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.
pos))
6865 DoHostileAction(chara);
6884 if (base.IsPCFactionOrMinion)
6897 if (OriginalHostility >=
Hostility.Friend)
6913 if (
id ==
"unicorn" && (Evalue(418) < 0 || (c.
HasElement(1216) && c.
Evalue(418) < 1)))
6946 return EClass.game.activeZone == currentZone;
6953 foreach (
Point item2
in item.ListPoints())
6955 if (pos.Equals(item2))
6976 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
7000 charaRenderer.pccData = PCCData.Create(
"ride");
7001 string idPart = base.c_idRidePCC.IsEmpty(
EClass.
core.
pccs.sets[
"ride"].map[
"body"].map.Keys.First());
7002 charaRenderer.
pccData.SetPart(
"body",
"ride", idPart);
7003 charaRenderer.pccData.ride =
EClass.
core.
pccs.GetRideData(idPart);
7007 foreach (
Condition condition
in conditions)
7010 if (rendererReplacer !=
null)
7012 charaRenderer.replacer = rendererReplacer;
7013 charaRenderer.data = rendererReplacer.
data;
7014 charaRenderer.pccData = rendererReplacer.
pccData;
7018 if (charaRenderer.
replacer ==
null)
7020 charaRenderer.pccData = pccData;
7023 renderer = charaRenderer;
7025 if (cardRenderer !=
null)
7027 renderer.SetFirst(first:
false, cardRenderer.
position);
7029 return charaRenderer;
7036 PCC.Get(pccData).Build(state);
7042 string str = GetStr(
"sprite_override");
7045 Sprite sprite = ModUtil.LoadSprite(str);
7053 PCC pCC = PCC.Get(pccData);
7055 return pCC.variation.idle[0, 0];
7059 if (spriteReplacer?.data !=
null)
7061 Sprite sprite2 = spriteReplacer.
GetSprite(dir, skin, snow);
7067 if (sourceCard.
tiles.Length > 1)
7069 skin = ((base.idSkin == 0 && !source.
staticSkin) ? (base.uid % sourceCard.
tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)) : base.idSkin);
7071 return sourceCard.
GetSprite(dir, skin, snow);
7092 else if (conSleep !=
null && host ==
null && pos.Equals(
EClass.
pc.
pos) && IsHuman && (GetBool(123) || affinity.
CanSleepBeside()))
7101 p.mat = base.material;
7102 p.matColor = base.colorInt;
7103 if (!renderer.usePass)
7107 if (renderer.replacer !=
null)
7109 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
7110 if (renderer.replacer.mat != -1)
7114 p.color -= 1048576f;
7121 int num = ((base.idSkin != 0 || source.
staticSkin) ? base.idSkin : (base.uid % source.
_tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
7130 p.tile = source.
_tiles_snow[0] * ((!flipX) ? 1 : (-1));
7133 else if (sourceCard.
_tiles.Length > 1)
7135 int num2 = ((base.idSkin != 0 || source.
staticSkin) ? base.idSkin : (base.uid % sourceCard.
_tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
7140 p.tile = sourceCard.
_tiles[(num2 >= 0 && num2 < sourceCard.
_tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
7144 p.tile = sourceCard.
_tiles[0] * ((!flipX) ? 1 : (-1));
7151 if (mimicry !=
null && mimicry.
IsThing)
7155 string text = ((mimicry !=
null && mimicry.Card !=
this) ? mimicry.
GetName(
NameStyle.Full) : base.Name);
7156 if (IsFriendOrAbove())
7160 else if (IsHostile())
7166 if (base.LV >= lV * 5)
7170 else if (base.LV >= lV * 2)
7174 else if (base.LV <= lV / 4)
7178 else if (base.LV <= lV / 2)
7184 string s = (IsFriendOrAbove() ?
"HostilityAlly" : (IsNeutral() ?
"HostilityNeutral" :
"HostilityEnemy"));
7185 s = (
" (" + s.lang() +
") ").TagSize(14);
7189 s += (
" (" +
"guest".lang() +
") ").TagSize(14);
7193 s += (
" (" +
"livestock".lang() +
") ").TagSize(14);
7199 text2 +=
"lowerGround".lang();
7201 else if (HasHigherGround(
EClass.
pc))
7203 text2 +=
"higherGround".lang();
7206 if (Evalue(1232) > 0)
7208 text2 =
"milkBaby".lang().TagSize(14) + text2;
7212 text2 =
"hasBounty".lang().TagSize(14) + text2;
7216 text2 += (
"(" + faith.Name +
")").TagSize(14);
7222 return text + text2 + s;
7227 if (mimicry !=
null && mimicry.
IsThing)
7234 text += Environment.NewLine;
7235 text = text +
"<size=14>" +
"favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) +
"</size>";
7240 text2 += Environment.NewLine;
7241 text2 = text2 +
"Lv:" + base.LV +
" HP:" + base.hp +
"/" + MaxHP +
" MP:" + mana.value +
"/" + mana.max +
" DV:" + DV +
" PV:" + PV +
" Hunger:" + hunger.
value;
7242 text2 += Environment.NewLine;
7244 text2 += Environment.NewLine;
7245 text2 = text2 + base.uid + IsMinion +
"/" + base.c_uidMaster +
"/" + master;
7246 text2 = text2 +
" dir:" + base.dir +
" skin:" + base.idSkin +
" scaled:" + base.
isScaled;
7250 text2 += Environment.NewLine;
7251 text2 +=
"<size=14>";
7254 text2 = text2 + item.Name +
", ";
7256 foreach (
Hobby item2
in ListHobbies())
7258 text2 = text2 + item2.Name +
", ";
7260 text2 = text2.TrimEnd(
", ".ToCharArray()) +
"</size>";
7263 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ?
new BaseStats[0] :
new BaseStats[2] { hunger, stamina });
7264 if (enumerable.Count() > 0)
7266 text3 += Environment.NewLine;
7267 text3 +=
"<size=14>";
7276 if (text4.IsEmpty() || text4 ==
"#")
7281 switch (item3.
source.group)
7294 text4 = text4 +
"(" + item3.
GetValue() +
")";
7295 if (resistCon !=
null && resistCon.ContainsKey(item3.
id))
7297 text4 = text4 +
"{" + resistCon[item3.
id] +
"}";
7301 text3 = text3 + text4.TagColor(c) +
", ";
7310 text3 = text3.TrimEnd(
", ".ToCharArray()) +
"</size>";
7315 text3 += Environment.NewLine;
7318 text3 = text3 + item4.act.Name +
", ";
7320 text3 = text3.TrimEnd(
", ".ToCharArray());
7322 return text + text2 + text3;
7328 string key = ((condition ==
null) ? source : condition.
chara.
source).idText.IsEmpty((condition ==
null) ? id : condition.
chara.
id);
7338 string text = row.GetText(topic, returnNull:
true);
7343 if (text.StartsWith(
"@"))
7350 text = row.GetText(topic, returnNull:
true);
7356 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
7361 if (host ==
null && !IsInActiveZone)
7365 if (!isSynced && (host ==
null || !host.
isSynced) && topic !=
"dead")
7371 int num = EClass.pc.party.members.Count - 1;
7396 string topicText = GetTopicText(topic);
7397 if (topicText.IsEmpty())
7401 HashSet<string> obj =
new HashSet<string>
7403 "_bracketTalk".lang(),
7408 bool flag = topicText.StartsWith(
"*");
7409 bool flag2 = topicText.StartsWith(
"(");
7410 bool flag3 = obj.Any(topicText.StartsWith);
7411 topicText = ApplyTone(topicText);
7412 topicText = topicText.Replace(
'~',
'*');
7414 Msg.
Say(StripTalkSpecialCharacters(topicText.Replace(
"&",
"")));
7415 if (topic ==
"dead")
7419 else if (flag || flag3 || flag2)
7421 (host ??
this).renderer.Say(ApplyNewLine(topicText.StripBrackets()),
default(
Color), IsPCParty ? 0.6f : 0f);
7439 if (conSuspend !=
null && IsPCParty)
7441 RemoveCondition<ConSuspend>();
7445 if (IsDeadOrSleeping)
7447 ShowDialog(
"_chara",
"sleep");
7452 ShowDialog(
"_chara",
"invisible");
7458 ShowDialog(
"_chara",
"give_card");
7467 if (GetInt(71) == -2)
7469 ShowDialog(
"_chara",
"give_lunch");
7475 if (base.isRestrained)
7477 ShowDialog(
"_chara",
"strain");
7482 ShowDialog(
"_chara",
"escort");
7487 string step = ((!(EClass._zone is
Zone_Wedding)) ?
"party" : (IsPCParty ?
"wedding_love" : ((IsMarried || affinity.
IsWeddingHater) ?
"wedding_hater" :
"wedding")));
7490 step =
"wedding_cutter";
7492 base.c_love.gaveCutter =
true;
7494 ShowDialog(
"_chara", step);
7512 EClass.player.flags.loytelEscaped =
false;
7514 ShowDialog(
"loytel",
"loytelEscaped");
7518 if (questDebt !=
null && questDebt.
paid)
7521 if (questDebt.
stage > 7)
7523 questDebt.stage = 7;
7525 ShowDialog(
"loytel",
"debt" + questDebt.
stage);
7533 ShowDialog(
"farris");
7539 ShowDialog(
"farris",
"nymelle_noQuest");
7542 ShowDialog(
"farris",
"nymelle_first");
7545 ShowDialog(
"farris",
"home_first");
7548 ShowDialog(
"farris");
7553 ShowDialog(
"ashland");
7558 SoundManager.ForceBGM();
7565 EClass.player.flags.fiamaFirstDream =
true;
7566 ShowDialog(
"fiama",
"firstDream");
7570 ShowDialog(
"fiama",
"giveStoryBook").SetOnKill(delegate
7572 EClass.player.flags.fiamaStoryBookGiven =
true;
7578 ShowDialog(
"fiama");
7583 ShowDialog(
"fiama");
7589 ShowDialog(
"big_sister",
"little_saved");
7590 EClass.player.flags.little_saved =
false;
7595 ShowDialog(
"big_sister",
"little_dead");
7596 EClass.player.flags.little_killed =
false;
7604 ShowDialog(
"guild_doorman",
"main", tag);
7610 ShowDialog(
"guild_clerk",
"main", tag2);
7619 string book =
"_chara";
7622 string text = GetStr(
"drama_override").IsEmpty(
id);
7623 if (File.Exists(PackageIterator.GetFiles(
"Dialog/Drama/" + text +
".xlsx").LastOrDefault()?.FullName ?? (
CorePath.
DramaData +
id +
".xlsx")))
7633 return _ShowDialog(
book,
null, step, tag);
7639 if (
book ==
"_chara" && IsPC)
7657 return base.LV / 2 + 4;
7663 if (FindBed() !=
null)
7672 return GetHappiness().ToString() ??
"";
7677 string result =
"?????";
7690 uIItem.
text2.
SetText(race.GetText().ToTitleCase(wholeText:
true) +
" " + job.GetText().ToTitleCase(wholeText:
true));
7700 sortVal = job._index * 10000 + sourceCard.
_index;
7703 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard.
_index;
7706 sortVal = -GetTotalFeat();
7712 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7719 sortVal -= 100000000;
7729 foreach (
Card item in map.props.installed.all)
7733 traitBed.RemoveHolder(
this);
7752 if (!IsPCFaction && !IsGuest())
7761 Msg.
Say(
"claimBed",
this);
7770 if (GetInt(113) != 0)
7775 Thing bestRangedWeapon = GetBestRangedWeapon();
7776 foreach (
Thing thing
in things)
7782 _ListItems.Add(thing);
7786 _ListItems.Add(thing);
7790 if (_ListItems.Count == 0)
7794 List<Thing> containers2 = containers.ToList();
7795 foreach (
Thing listItem
in _ListItems)
7820 bool flag = GetInt(113) == 0;
7829 foreach (
Thing thing3
in things)
7831 if (CanEat(thing3, shouldEat))
7847 if (thing3.
id ==
"polish_powder")
7861 foreach (
Thing container
in containers)
7871 if (num4 > 0 && thing4.
id ==
"polish_powder")
7873 _ListItems.Add(thing4);
7878 _ListItems.Add(thing4);
7883 _ListItems.Add(thing4);
7888 _ListItems.Add(thing4);
7891 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.
c_isImportant)
7893 _ListItems.Add(thing4);
7898 _ListItems.Add(thing4);
7903 _ListItems.Add(thing4);
7908 if (_ListItems.Count == 0)
7912 _ListItems.ForeachReverse(delegate(
Thing t)
7917 int slot = t.category.slot;
7918 int equipValue = t.GetEquipValue();
7919 foreach (Thing listItem in _ListItems)
7921 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
7929 _ListItems.Remove(t);
7934 foreach (
Thing listItem2
in _ListItems)
7936 Thing thing = listItem2;
7937 if (things.IsFull(thing))
7946 thing = thing.
Split(1);
7949 else if (thing.
Num > 2)
7951 thing = thing.
Split(2);
7958 if (ShouldEquip(thing, useFav:
true) && thing.
category.slot != 0)
7960 TryEquip(thing, useFav:
true);
7966 TryPutSharedItems(containers);
7972 Thing result =
null;
7980 int num2 = CountNumEaten(
item);
7981 int num3 = 100 - num2 + (
item.HasElement(757) ? 10 : 0);
7995 t = FindBestFoodToEat();
8007 Say(
"eat_start",
this, t.Duplicate(1));
8041 if (!CanEquipRanged(t))
8046 foreach (
Thing thing
in things)
8067 if (bodySlot ==
null)
8073 switch (GetFavAttackStyle())
8112 if (!base.IsPCFactionOrMinion)
8117 if (value.
Value <= 0)
8134 num2 += value.Value * num3 / 100;
8151 if (!ShouldEquip(t, useFav))
8162 switch (GetFavAttackStyle())
8178 body.
Equip(t, slot);
8184 Say(
"equip",
this, t);
8200 return FindThrowable(hotbar:
true);
8204 things.Foreach(delegate(
Thing t)
8206 if (t.
HasTag(
CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.
HasTag(
CTAG.throwWeaponEnemy)))
8212 Thing FindThrowable(
bool hotbar)
8214 things.Foreach(delegate(
Thing t)
8251 return things.Find((
Thing t) => ranged.
IsAmmo(t));
8256 Thing result =
null;
8258 foreach (
Thing thing
in things)
8278 ranged = GetRandomRangedWeapon();
8290 if (ranged !=
null && ranged.
parent ==
this)
8294 ranged = GetBestRangedWeapon();
8295 return ranged !=
null;
8300 if (body.
GetWeight(armorOnly:
true) <= (HasElement(1204) ? 6000 : 30000))
8325 if (t.
id ==
"cigar")
8335 if (t.
trait.
CanEat(
this) && hunger.
GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
8337 SetAIImmediate(
new AI_Eat
8351 if (base.hp < MaxHP * 90 / 100)
8354 if (healAction !=
null)
8365 return FindBed()?.owner.pos.cell.room;
8380 if (!trait.CanChangeAffinity)
8385 if (IsPCFaction && homeBranch !=
null)
8387 num += (int)Mathf.Sqrt(homeBranch.
Evalue(2117)) * 5;
8404 Say(
"affinityNone",
this, c);
8409 ShowEmo((!flag) ?
Emo.angry :
Emo.love);
8413 Say(flag ?
"affinityPlus" :
"affinityMinus",
this, c);
8419 a = affinity.
Mod(a);
8426 int num = Evalue(289);
8438 num2 += (lV - num) * 10;
8440 elements.
ModExp(289, Mathf.Min(num2, 1000));
8456 chara.orgPos = orgPos.
Copy();
8458 chara.pos = pos.
Copy();
8459 chara.isImported =
true;
8460 chara.c_editorTags = base.c_editorTags;
8461 chara.c_editorTraitVal = base.c_editorTraitVal;
8462 chara.c_idTrait = base.c_idTrait;
8463 chara.homeZone = homeZone;
8471 content.RefreshCharaBio(
this);
8472 if (!content.favFood.IsEmpty() &&
EClass.
sources.
things.map.TryGetValue(content.favFood, out var value))
8477 string str = GetStr(72);
8482 if (_listFavFood.Count == 0)
8486 if (row._origin ==
"dish" && row.value != 0 && row.chance != 0)
8488 _listFavFood.Add(row);
8495 r = _listFavFood.RandomItem();
8504 content.RefreshCharaBio(
this);
8505 if (!content.favCategory.IsEmpty() &&
EClass.
sources.
categories.map.TryGetValue(content.favCategory, out var value) && value.gift > 0)
8510 string str = GetStr(73);
8516 if (_listFavCat.Count == 0)
8522 _listFavCat.Add(row);
8528 r = _listFavCat.RandomItem();
8535 if (base.c_love ==
null)
8542 SetFeat(1275, 1, msg:
true);
8548 if (base.c_love !=
null)
8550 base.c_love.dateMarriage = 0;
8551 base.c_love.dateWedding = 0;
8559 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(
this, 3, (
Chara c) => c !=
this && c.
race.id ==
"cat").GetEnumerator())
8561 if (enumerator.MoveNext())
8563 return enumerator.Current;
8571 Say(
"abCatSniff",
this, c);
8576 c.
Talk(
new string[4] {
"labor",
"disgust",
"scold",
"callGuards" }.RandomItem());
8582 if (base.c_upgrades !=
null)
8584 num += base.c_upgrades.spent;
8586 if (base.c_genes !=
null)
8588 num += base.c_genes.GetTotalCost();
8590 return num + base.feat;
8597 if (
item.act.id == 6630)
8607 string text = race.
id;
8608 if ((text ==
"mifu" || text ==
"nefu") &&
EClass.
rnd(2) == 0)
8621 string str = GetStr(
"portrait_override");
8626 if (
id ==
"olderyoungersister")
8628 if (base.idSkin != 2)
8630 return "UN_olderyoungersister";
8632 return "UN_olderyoungersister_alt";
8638 return base.c_idPortrait;
8657 if (HasElement(1231))
8660 AddCondition<ConEuphoric>(100 * Evalue(1231));
8664 SetFeat(1231, 1, msg:
true);
8674 int num2 = ((!HasElement(1411)) ? 1 : 3);
8675 if (GetBurden(t, num) >= num2)
8688 if (!IsValidGiftWeight(t, num))
8705 if (things.IsFull())
8725 if (base.IsPowerful && t.
trait is
TraitScroll { source: not null } traitScroll && traitScroll.
source.abilityType.Contains(
"summon"))
8736 Msg.
Say(
"affinityNone", c,
this);
8742 int num2 = 200 + t.LV * 3;
8758 c.
Say(
"draw_curse", c, t);
8760 List<Element> list =
new List<Element>();
8768 if (list.Count == 0)
8773 Element element = list.RandomItem();
8779 if ((t.
id ==
"lovepotion" || t.
id ==
"dreambug") && !Application.isEditor)
8781 GiveLovePotion(c, t);
8795 case "ticket_massage":
8802 case "ticket_armpillow":
8810 case "ticket_champagne":
8817 if (t.
id ==
"flyer")
8822 c.
Talk(
"flyer_miss");
8828 Msg.
Say(
"affinityNone", c,
this);
8830 elements.ModExp(291, 10f);
8833 elements.ModExp(291, 50f);
8835 if (t.
id ==
"statue_weird")
8860 Say(
"give_erohon",
this);
8861 AddCondition<ConParalyze>(50, force:
true);
8862 AddCondition<ConConfuse>(50, force:
true);
8863 AddCondition<ConFear>(1000, force:
true);
8871 c.
Say(
"give_love", c, t);
8881 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker ==
this)
8905 int num = Mathf.Max(chara.
Evalue(1649), (!flag2) ? 1 : 3);
8906 int num2 = Dist(chara);
8911 if (num2 > num || !chara.
CanSeeLos(pos, num2))
8917 Point nearestPoint = pos.
GetNearestPoint(allowBlock:
false, allowChara:
false, allowInstalled:
true, ignoreCenter:
true);
8925 Say(
"intercept_loyal", chara,
this);
8928 if (num2 > num || !chara.
CanSeeLos(pos, num2))
8933 if (!flag && !HasElement(1225))
8935 Say(
"intercept", chara,
this);
8938 chara.
Talk(
"intercept", base.NameSimple);
8940 if (attacker.enemy ==
this)
8942 attacker.SetEnemy(chara);
9005 if (t.
id ==
"flyer")
9030 if (!things.IsAlmostFull())
9059 for (
int num2 = things.Count - 1; num2 >= 0; num2--)
9061 Thing thing = things[num2];
9062 if (ShouldThrowAway(thing, type))
9073 Msg.
Say(
"party_sell",
this, num.ToString() ??
"");
9081 _ = base.c_upgrades;
9090 for (
int i = 0; i < 100; i++)
9096 if (base.c_upgrades ==
null)
9100 if (base.c_upgrades.halt)
9111 List<Element> list = ListAvailabeFeats(pet:
true);
9112 if (num >= 90 && list.Count > 0)
9114 Element element = list.RandomItem();
9118 else if (num >= 60 && ie.Any())
9120 num2 = ie.RandomItem().id;
9131 if (num4 > base.feat)
9136 base.c_upgrades.count++;
9137 base.c_upgrades.spent += num4;
9143 if (
item.idEle == num2)
9164 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg:
true);
9166 else if (elements.ValueWithoutLink(row.
id) == 0)
9168 elements.Learn(row.
id);
9172 elements.ModBase(num2, num3);
9179 if (IsPC || base.isScaled || HasElement(1273))
9185 if (base.c_daysWithPC > 360)
9196 if (_cooldowns ==
null)
9198 _cooldowns =
new List<int>();
9202 _cooldowns.Add(idEle * 1000 + turns);
9208 _cooldowns.Add(idEle * 1000 + row.
cooldown);
9214 if (_cooldowns ==
null)
9216 _cooldowns =
new List<int>();
9219 for (
int i = 0; i < _cooldowns.Count; i++)
9221 if (_cooldowns[i] / 1000 == idEle)
9225 _cooldowns.RemoveAt(i);
9229 _cooldowns[i] = idEle * 1000 + turns;
9235 if (!flag && turns > 0)
9237 AddCooldown(idEle, turns);
9239 if (_cooldowns.Count == 0)
9247 return GetCooldown(idEle) != 0;
9252 if (_cooldowns !=
null)
9254 for (
int i = 0; i < _cooldowns.Count; i++)
9256 if (_cooldowns[i] / 1000 == idEle)
9258 return _cooldowns[i] % 1000;
9267 for (
int num = _cooldowns.Count - 1; num >= 0; num--)
9269 if (_cooldowns[num] % 1000 == 1)
9271 _cooldowns.RemoveAt(num);
9278 if (_cooldowns.Count == 0)
9291 if (IsPCParty || base.noMove)
9296 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
9299 if (goalFromTimeTable !=
null)
9301 SetAI(goalFromTimeTable);
9304 goalFromTimeTable.
Tick();
9309 if (goalList.
index == -2)
9311 goalList.
Refresh(
this, goalListType);
9313 SetAI(goalList.
Next());
9337 return GetGoalWork();
9343 return GetGoalHobby();
9378 if (_works ==
null || _hobbies ==
null)
9382 foreach (
int work
in _works)
9389 foreach (
int hobby
in _hobbies)
9410 return SetAI(_NoGoalPC);
9428 Debug.Log(
"goal is g:" + ai?.ToString() +
"/" +
this);
9432 if (HasCondition<ConWait>())
9434 RemoveCondition<ConWait>();
9440 renderer.RefreshStateIcon();
9447 bool hasNoGoal = HasNoGoal;
9482 listHobby.Add(
new Hobby
9493 foreach (
int work
in _works)
9495 listHobby.Add(
new Hobby
9509 if (_hobbies ==
null)
9513 foreach (
int hobby
in _hobbies)
9515 listHobby.Add(
new Hobby
9528 if (
item.source.alias ==
id)
9533 foreach (
Hobby item2
in ListHobbies())
9535 if (item2.
source.alias ==
id)
9545 if (workElements !=
null)
9549 workElements =
null;
9550 if (IsPCParty || homeBranch ==
null || homeBranch.
owner ==
null)
9558 foreach (
Hobby item2
in ListWorks())
9562 if (workElements !=
null)
9566 void TryAdd(
Hobby h)
9568 if (!h.
source.elements.IsEmpty())
9570 if (workElements ==
null)
9574 for (
int i = 0; i < h.
source.elements.Length; i += 2)
9576 int num = h.
source.elements[i];
9577 int num2 = h.
source.elements[i + 1];
9579 if (num != 2115 && num != 2207)
9587 workElements.
ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.
source.elements[i + 1] * num3 / 1000));
9595 string text = (simple ?
"" : (
"hobby".lang() +
":"));
9600 return text.TrimEnd(
',');
9605 string text = (simple ?
"" : (
"work".lang() +
":"));
9610 return text.TrimEnd(
',');
9615 foreach (
int hobby
in _hobbies)
9627 foreach (
int work
in _works)
9639 if (_hobbies !=
null && _works !=
null)
9646 _hobbies =
new List<int>();
9647 _works =
new List<int>();
9655 string[] hobbies = source.
hobbies;
9656 foreach (
string text
in hobbies)
9663 ModUtil.LogModError(
"source chara row '" + source.
id +
"' has invalid hobby '" + text +
"'", source);
9666 if (source.
works.IsEmpty())
9672 string[] hobbies = source.
works;
9673 foreach (
string text2
in hobbies)
9680 ModUtil.LogModError(
"source chara row '" + source.
id +
"' has invalid work '" + text2 +
"'", source);
9683 GetWorkSummary().Reset();
9688 if (_workSummary ==
null)
9692 return _workSummary;
9705 if (workSummary.
work !=
null)
9710 else if (workSummary.
hobbies.Count > 0)
9731 hobby.id = session.
id;
9736 workSummary.progress +=
EClass.
rnd(5) + 5;
9738 int num = PerformWork(hobby, 0, isHobby);
9739 int num2 = PerformWork(hobby, 1, isHobby);
9740 int num3 = PerformWork(hobby, 2, isHobby);
9741 int num4 = PerformWork(hobby, 3, isHobby);
9742 workSummary.money += num;
9743 workSummary.food += num2;
9744 workSummary.knowledge += num3;
9745 workSummary.material += num4;
9746 int PerformWork(
Hobby work,
int idx,
bool isHobby)
9748 if (idx >= work.
source.resources.Length)
9752 int num5 = work.
source.resources[idx];
9754 num5 =
Rand.
Range(num5 * (100 - work.
source.resources[idx]) / 100, num5);
9755 num5 = num5 * (isHobby ? 50 : 100) * session.
efficiency / 10000;
9756 if (num6 > 0 && num5 <= 0)
9766 _goalWork.
FindWork(
this, setAI:
false);
9782 foreach (
Condition condition
in conditions)
9784 condition.
SetOwner(
this, onDeserialize);
9790 return AddCondition(typeof(T).Name, p, force);
9795 return AddCondition(typeof(T).Name, p, p2, force);
9807 return AddCondition(condition, force);
9815 if (c is
ConBleed && ResistLv(964) >= 3)
9820 else if (ResistLv(950) >= 3)
9838 if (c.
source.negate.Length != 0)
9840 string[] negate = c.
source.negate;
9841 foreach (
string text
in negate)
9843 if (HasElement(text))
9850 if (defenseAttribute !=
null)
9852 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.
Value, 1);
9854 if (c.
source.resistance.Length != 0)
9859 c.power /= num * num + 1;
9875 num2 = num2 * (100 + (int)Mathf.Sqrt(Evalue(494)) * 10) / 100;
9881 for (
int j = 0; j < conditions.Count; j++)
9883 if (conditions[j].
id != c.
id)
9889 conditions[j].Kill();
9892 if (conditions[j].CanStack(c))
9894 if (conditions[j].ShouldOverride(c))
9896 if (conditions[j].IsOverrideConditionMet(c, num2))
9898 conditions[j].Kill(silent:
true);
9903 if (CanGainConResist)
9907 conditions[j].OnStacked(c.
power);
9908 conditions[j].OnStartOrStack();
9909 conditions[j].PlayEffect();
9911 if (!conditions[j].AllowMultipleInstance)
9916 foreach (
Condition condition
in conditions)
9925 if (CanGainConResist)
9932 if (c.ShouldRefresh)
9944 if (c.SyncRide && (
ride !=
null || parasite !=
null))
9950 if (parasite !=
null)
9958 public override bool HasCondition<T>()
9960 for (
int i = 0; i < conditions.Count; i++)
9962 if (conditions[i] is T)
9972 for (
int i = 0; i < conditions.Count; i++)
9974 if (conditions[i].source.alias == alias)
9989 for (
int i = 0; i < conditions.Count; i++)
9993 return conBuffStats.elements.GetElement(ele);
10002 foreach (
Condition condition
in conditions)
10014 T condition = GetCondition<T>();
10015 if (condition !=
null)
10017 condition.value -= v;
10018 if (condition.value <= 0)
10027 for (
int i = 0; i < conditions.Count; i++)
10029 if (conditions[i].source.alias == idCon)
10031 return conditions[i];
10037 public override T GetCondition<T>()
10039 for (
int i = 0; i < conditions.Count; i++)
10041 if (conditions[i] is T)
10043 return conditions[i] as T;
10051 for (
int num = conditions.Count - 1; num >= 0; num--)
10053 if (conditions[num] is T)
10055 conditions[num].
Kill();
10063 if (parasite !=
null)
10065 parasite.
Cure(type, p, state);
10069 ride.Cure(type, p, state);
10071 Cure(type, p, state);
10081 CureCondition<ConFear>();
10082 CureCondition<ConBlind>(2 * p / 100 + 5);
10083 CureCondition<ConPoison>(5 * p / 100 + 5);
10084 CureCondition<ConConfuse>(10 * p / 100 + 10);
10085 CureCondition<ConDim>(p / 100 + 5);
10086 CureCondition<ConBleed>(2 * p / 100 + 10);
10093 CureCondition<ConBlind>(5 * p / 100 + 15);
10094 CureCondition<ConPoison>(10 * p / 100 + 15);
10095 CureCondition<ConBleed>(5 * p / 100 + 20);
10096 CureTempElements(p, body:
true, mind:
false);
10099 CureCondition<ConFear>();
10100 CureCondition<ConDim>(3 * p / 100 + 10);
10101 CureTempElements(p, body:
false, mind:
true);
10105 for (
int num2 = conditions.Count - 1; num2 >= 0; num2--)
10107 Condition condition2 = conditions[num2];
10112 condition2.
Mod(-1, force:
true);
10120 CureCondition<ConWait>();
10121 CureCondition<ConDisease>((
EClass.
rnd(20) + 10) * p / 100);
10122 bool flag2 = HasCondition<ConAnorexia>();
10123 base.c_vomit -= (flag2 ? 3 : 2) * p / 100;
10124 if (base.c_vomit < 0)
10129 RemoveCondition<ConAnorexia>();
10140 CureTempElements(p * 100, body:
true, mind:
true);
10141 for (
int num = conditions.Count - 1; num >= 0; num--)
10148 switch (condition.
Type)
10168 CureCondition<ConWait>();
10169 CureCondition<ConSleep>();
10176 RemoveCondition<ConBrightnessOfLife>();
10177 RemoveCondition<ConDeathSentense>();
10181 if (HasElement(1206))
10183 SetFeat(1206, 0, msg:
true);
10185 RemoveCondition<ConBrightnessOfLife>();
10186 RemoveCondition<ConDeathSentense>();
10200 for (
int num = conditions.Count - 1; num >= 0; num--)
10216 if (
TC.hp > (
long)
TC.MaxHP * (
long)(Mathf.Min(5 + (
int)Mathf.Sqrt(power),
harvest ? 35 : 25) + Evalue(1426) * 5) / (
TC.IsPowerful ? 200 : 100))
10220 if (
TC.HasElement(427))
10228 PlaySound(
"hit_finish");
10230 Say(
"finish2",
this,
TC);
10240 if (resistCon ==
null)
10242 resistCon =
new Dictionary<int, int>();
10244 if (resistCon.ContainsKey(key))
10246 resistCon[key] += con.power * con.GainResistFactor / 100;
10250 resistCon[key] = con.power * con.GainResistFactor / 100;
10257 if (con.
power > 0 && resistCon !=
null)
10259 int a =
ClassExtension.TryGetValue<int,
int>((IDictionary<int, int>)resistCon, con.
id, 0);
10281 RemoveCondition<ConAwakening>();
10286 con.pcPillow = pillow;
10287 con.pickup = pickup;
10288 con.posBed = posBed;
10289 con.posPillow = posPillow;
10295 bool isSunLit = pos.IsSunLit;
10297 int num =
bed?.Power ?? 20;
10298 if (traitPillow !=
null)
10300 num += traitPillow.owner.Power / 2;
10304 num +=
bed.Evalue(750) * 5;
10310 OnSleep(num, days, isSunLit);
10313 public void OnSleep(
int power,
int days = 1,
bool isSunLit =
false)
10319 int num = power * days;
10320 if (stamina.
value < 0)
10324 if (isWeakToSunlight && isSunLit)
10327 if (mana.
value > 0)
10331 AddCondition<ConBurning>(1000, force:
true);
10336 stamina.
Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
10353 if (!HasElement(450))
10355 long num = bio.height;
10356 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
10361 if (num > 999999999)
10365 if (num != bio.height)
10367 bio.height = (int)num;
10368 Say((a > 0) ?
"height_gain" :
"height_lose",
this);
10375 if (HasElement(450) || a == 0)
10379 long num = bio.weight;
10380 long num2 = bio.height;
10381 long num3 = num2 * num2 * 18 / 25000;
10382 long num4 = num2 * num2 * 24 / 10000;
10383 if (ignoreLimit || (num > num3 && num < num4))
10385 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
10390 if (num > 999999999)
10394 if (num != bio.weight)
10396 bio.weight = (int)num;
10397 Say((a > 0) ?
"weight_gain" :
"weight_lose",
this);
10406 if (Evalue(962) >= 25 || (ResistLv(962) > 0 &&
EClass.
rnd(ResistLv(962) + 1) != 0))
10410 int num = Evalue(412);
10413 float num2 = (float)a * 100f / (
float)Mathf.Max(100 + num * 2, 10);
10414 a = (int)num2 + ((
EClass.
rndf(1f) < num2 % 1f) ? 1 : 0);
10421 int num3 = (corruption + a) / 100 - corruption / 100;
10422 for (
int i = 0; i < Mathf.Abs(num3); i++)
10424 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether:
true))
10431 foreach (
Element value
in elements.dict.Values)
10433 if (value.
source.category ==
"ether")
10435 num4 += value.
Value;
10438 if (num4 > 0 && IsPC)
10442 corruption = num4 * 100 + corruption % 100;
10447 List<Element> list =
new List<Element>();
10450 Feat feat = elements.GetOrCreateElement(
item.id) as
Feat;
10451 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.
ValueWithoutLink + 1));
10460 public void SetFeat(
int id,
int value = 1,
bool msg =
false)
10462 Feat feat = elements.GetElement(
id) as
Feat;
10464 if (feat !=
null && feat.
Value > 0)
10466 if (value == feat.
Value)
10473 feat = elements.SetBase(
id, value - (feat?.vSource ?? 0)) as
Feat;
10474 if (feat.
Value != 0)
10481 CalculateMaxStamina();
10487 if (feat.
source.textInc.IsEmpty())
10489 PlaySound(
"ding_skill");
10491 Say(
"gainFeat",
this, feat.
FullName);
10495 bool flag = value < num;
10496 if (feat.
source.tag.Contains(
"neg"))
10505 PlaySound(
"chime_angel");
10511 PlaySound(
"chime_devil");
10515 PlaySound(
"mutation");
10519 Say((value > num) ? feat.
source.GetText(
"textInc") : feat.
source.GetText(
"textDec"),
this, feat.
FullName);
10521 elements.CheckSkillActions();
10528 Element element = elements.GetElement(idEle);
10529 Element element2 = elements.GetElement(row2.
id);
10530 int num = element?.
Value ?? 0;
10539 bool flag = (row.
tag.Contains(
"neg") ? (a > num) : (a < num));
10540 if (a == 0 && (element ==
null || element.
Value == 0))
10542 SayNothingHappans();
10545 if (element !=
null && element.
Value == a)
10547 SayNothingHappans();
10550 if (element2 !=
null && element2.
Value > 0)
10552 SetFeat(element2.
id, 0);
10555 PlaySound(
"mutation");
10556 PlayEffect(
"mutation");
10558 Say(row.GetText(flag ?
"textDec" :
"textInc", returnNull:
true) ?? row.
alias,
this);
10563 if (!ether && vec >= 0 && HasElement(406) &&
EClass.
rnd(5) != 0)
10565 Say(
"resistMutation",
this);
10569 for (
int i = 0; i < tries; i++)
10572 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
10578 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
10579 if (base.c_corruptionHistory.Count == 0)
10581 base.c_corruptionHistory =
null;
10584 Element element = elements.GetElement(row.
id);
10586 if ((vec > 0 && ((row.
id == 1563 && corruption < 300) || (row.
id == 1562 && corruption < 1000 && base.IsPowerful))) || (vec < 0 && (element ==
null || element.
Value <= 0)) || (vec > 0 && element !=
null && element.
Value >= row.
max))
10593 element = elements.GetElement(row.
id);
10595 bool flag = row.
tag.Contains(
"neg");
10608 if (element !=
null)
10610 num = element.Value + ((vec != 0) ? vec : ((
EClass.
rnd(2) == 0) ? 1 : (-1)));
10611 if (num > element.
source.max)
10613 num = element.source.max - 1;
10615 flag = (flag && num > element.
Value) || (!flag && num < element.
Value);
10616 flag2 = num > element.
Value;
10617 if (vec > 0 && !flag2)
10622 Say(flag2 ?
"mutation_gain" :
"mutation_loose",
this);
10623 SetFeat(row.
id, num);
10624 if (flag2 && ether)
10626 if (base.c_corruptionHistory ==
null)
10628 base.c_corruptionHistory =
new List<int>();
10630 base.c_corruptionHistory.Add(row.
id);
10633 Element element2 = elements.GetElement(row.
id);
10638 EClass.player.flags.gotEtherDisease =
true;
10640 thing.
SetStr(53,
"letter_ether");
10649 PlaySound(ether ?
"mutation_ether" :
"mutation");
10650 PlayEffect(
"mutation");
10652 Say(row.GetText(flag ?
"textDec" :
"textInc", returnNull:
true) ?? row.
alias,
this);
10656 Say(
"nothingHappens");
10662 Element orCreateElement = elements.GetOrCreateElement(ele);
10665 elements.ModBase(orCreateElement.
id, 1);
10667 if (orCreateElement is
Spell)
10669 int num =
EClass.
curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
10670 int num2 = origin?.Evalue(765) ?? 0;
10671 num = num * (100 - num2) / 100;
10672 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
10674 if (orCreateElement.
source.charge == 1)
10678 orCreateElement.vPotential += a;
10680 Say(
"spell_gain",
this, orCreateElement.
Name);
10692 Msg.
Say(
"curse_nullify", member);
10697 else if (HasElement(1641) &&
EClass.
rnd(3) != 0)
10699 Say(
"curse_nullify",
this);
10702 if (GetCondition<ConHolyVeil>() !=
null &&
EClass.
rnd(5) != 0)
10704 Say(
"curse_nullify",
this);
10712 if (_historyFood !=
null)
10714 while (_historyFood.Count > 5)
10716 _historyFood.RemoveAt(_historyFood.Count - 1);
10718 if (_historyFood[0].Count > 0)
10720 _historyFood.Insert(0,
new List<string>());
10727 if (!IsPCFaction || !IsGlobal)
10729 _historyFood =
null;
10732 if (_historyFood ==
null)
10734 _historyFood =
new List<List<string>>
10739 if (_historyFood[0].Count < 5)
10741 _historyFood[0].Add(
food.id);
10747 if (_historyFood ==
null)
10752 foreach (List<string>
item in _historyFood)
10754 foreach (
string item2
in item)
10756 if (item2 ==
food.id)
10769 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
10771 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
10776 if (faithElements !=
null)
10781 if (idFaith ==
"eyth" && !HasElement(1228))
10791 if (!HasCondition<ConExcommunication>())
10799 int num = GetPietyValue() * (120 + Evalue(1407) * 15 + Evalue(1228) * 20) / 100;
10800 for (
int i = 0; i < array.Length; i += 2)
10802 int num2 = array[i + 1] * num / 50;
10803 if (array[i] == 79)
10805 num2 =
EClass.
curve(num2, array[i + 1] * 2, 10, 50);
10807 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10811 faithElements.
SetBase(array[i], Mathf.Max(num2, 1));
10817 public void ModTempElement(
int ele,
int a,
bool naturalDecay =
false,
bool onlyRenew =
false)
10823 bool flag = HasElement(1215);
10824 if (tempElements ==
null)
10833 int num = elements.ValueWithoutLink(ele);
10834 int num2 = Mathf.Abs(num) + 100;
10835 int num3 = num2 / (flag ? 2 : 4);
10836 int num4 = -num - 100;
10837 int num5 = tempElements.
Base(ele);
10838 int num6 = num5 + a;
10841 num3 = Mathf.Min(a, num3);
10842 num4 = Mathf.Max(a, -num2 / 3);
10844 if (a > 0 && num6 > num3)
10846 a = ((num3 > num5) ? (num3 - num5) : 0);
10848 if (a < 0 && num6 < num4)
10850 a = ((num4 < num5) ? (num4 - num5) : 0);
10853 if (element.
vBase == 0)
10856 if (tempElements.
dict.Count == 0)
10858 tempElements =
null;
10877 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 +
EClass.
rnd(p / 100 + 1) + 1)), naturalDecay:
false, onlyRenew);
10883 foreach (
int ele
in array)
10885 EnhanceTempElement(ele, p, onlyRenew);
10891 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 +
EClass.
rnd(p / 100 + 1)), naturalDecay:
false, onlyRenew);
10896 if (tempElements ==
null)
10902 if (
item.vBase > 0)
10904 ModTempElement(
item.id, -Mathf.Min(
item.vBase * 5 / 100 + 1,
item.vBase), naturalDecay:
true);
10911 if (tempElements !=
null)
10922 void Cure(
int[] eles)
10924 foreach (
int ele
in eles)
10926 if (tempElements ==
null)
10931 if (element !=
null && element.
vBase < 0)
10933 ModTempElement(ele, Mathf.Clamp(p / 20 +
EClass.
rnd(p / 20), 1, -element.
vBase));
10941 if (tempElements !=
null)
10944 tempElements =
null;
static Act Create(int id)
virtual bool ShouldAllyAttack(Chara tg)
virtual bool CancelOnAggro
override string ToString()
virtual bool CancelWhenMoved
string GetCurrentActionText()
virtual Point GetDestination()
virtual void OnPerformWork(bool realtime)
bool TryCancelInteraction(bool sound=true)
void SetTurbo(int mtp=-1)
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
static void Unride(Chara host, Chara mount, bool talk=true)
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
static void Search(Chara c, bool manual=false)
virtual TargetType TargetType
virtual bool ValidatePerform(Chara _cc, Card _tc, Point _tp)
bool IsTargetHostileParty()
virtual bool CanRapidFire
static Affinity Get(Chara c)
virtual RendererReplacer GetRendererReplacer()
virtual bool PreventRegen
virtual int EvaluatePower(int p)
virtual int GainResistFactor
virtual bool TryMove(Point p)
Element GetDefenseAttribute(Chara c=null)
virtual int EvaluateTurn(int p)
void Mod(int a, bool force=false)
virtual void SetOwner(Chara _owner, bool onDeserialize=false)
virtual bool TryNullify(Condition c)
virtual void OnEndPlayerTurn()
virtual ConditionType Type
virtual string GetPhaseStr()
static int GetColorInt(ref Color matColor, int p)
static void Set(CardBlueprint _bp=null)
static CardBlueprint CharaGenEQ
GlobalCharaList globalCharas
void PlayAnime(AnimeID id, bool force)
RendererReplacer replacer
virtual string GetName(NameStyle style, int num=-1)
void Teleport(Point point, bool silent=false, bool force=false)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
ElementContainerCard elements
Hostility c_originalHostility
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
void SetInt(string id, int value=0)
Card MakeRefFrom(string id)
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
virtual void SetBlessedState(BlessedState s)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
void ModCurrency(int a, string id="money")
virtual bool IsAliveInCurrentZone
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void SetStr(string id, string value=null)
BlessedState blessedState
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void ModExp(string alias, int a)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void ModNum(int a, bool notify=true)
virtual RenderRow TileRow
void AddExp(int a, bool applyMod=true)
bool HasElement(int ele, bool includeNagative=false)
void Say(string lang, string ref1=null, string ref2=null)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
SourceCellEffect.Row source
SourceBlock.Row sourceBlock
SourceFloor.Row sourceFloor
SourceMaterial.Row matObj
SourceFloor.Row sourceBridge
SourceMaterial.Row matFloor
SourceFloor.Row sourceSurface
void RemoveBodyPartAt(int idx)
void SetOwner(Chara chara, bool deserialized=false)
void AddBodyPart(int ele, Thing thing=null)
bool HasElement(int idEle)
bool IsTooHeavyToEquip(Thing thing)
AttackStyle GetAttackStyle()
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
int GetWeight(bool armorOnly=false)
bool Equip(Thing thing, BodySlot slot=null, bool msg=true)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
void RemoveBodyPart(int ele)
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
static Chara Create(string id, int lv=-1)
override void SetOwner(Card c)
SourceCategory.Row GetFavCat()
void DamageTempElement(int ele, int p, bool onlyRenew=false)
bool UseAbility(string idAct, Card tc=null, Point pos=null, bool pt=false)
void Refresh(bool calledRecursive=false)
void ChangeRace(string idNew)
bool HasHobbyOrWork(string alias)
static List< Chara > _pts
override string actorPrefab
override bool IsAliveInCurrentZone
bool IsFriendOrAbove(Chara c)
int GetBurden(Card t=null, int num=-1)
override void ApplyEditorTags(EditorTag tag)
BaseCondition GetCondition(string idCon)
Thing FindBestFoodToEat()
Hostility OriginalHostility
void TryPickGroundItem(Func< Card, bool > func=null)
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
bool CanAcceptGift(Chara c, Card t)
WorkSummary GetWorkSummary()
override void Rotate(bool reverse=false)
Chara CreateReplacement()
override Sprite GetImageSprite()
void MoveHome(Zone zone, int x=-1, int z=-1)
void ChangeMemberType(FactionMemberType type)
void CureTempElements(int p, bool body, bool mind)
bool TryNeckHunt(Chara TC, int power, bool harvest=false)
Element GetBuffStats(string alias)
void Cuddle(Chara c, bool headpat=false)
List< Chara > ListFussableCharas(int radius=2)
bool IsCriticallyWounded(bool includeRide=false)
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
bool CanInteractTo(Point p)
override void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
void TryPutShared(Thing t, List< Thing > containers=null, bool dropIfFail=true)
void CureHost(CureType type, int p=100, BlessedState state=BlessedState.Normal)
void RefreshWorkElements(ElementContainer parent=null)
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
void InstantEat(Thing t=null, bool sound=true)
Goal GetGoalFromTimeTable(int hour)
Condition AddCondition(string id, int p=100, bool force=false)
override Sprite GetSprite(int dir=0)
Thing FindAmmo(Thing weapon)
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
GoalListType goalListType
bool CanAcceptItem(Card t, int num=-1, bool skipImportantCheck=false)
override CardRow sourceRenderCard
override int GetArmorSkill()
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
void SetFaith(Religion r)
bool IsValidGiftWeight(Card t, int num=-1)
Condition AddCondition(Condition c, bool force=false)
Point GetFirstStep(Point newPoint, PathManager.MoveType moveType=PathManager.MoveType.Default)
Chara GetNearbyCatToSniff()
static List< SourceCategory.Row > _listFavCat
void SetFeat(int id, int value=1, bool msg=false)
bool CanSeeLos(Card c, int dist=-1)
override MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
override void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
override string ToString()
Chara TryDuplicate(DuplicateCondition con=DuplicateCondition.Default, Point dest=null, bool inheritHostility=false)
void TryTakeSharedItems(IEnumerable< Thing > containers, bool msg=true, bool shouldEat=true)
ElementContainer tempElements
void TryPutSharedItems(bool msg=true)
void SetMainElement(int id, int v=0, bool elemental=false)
void ApplyRace(bool remove=false)
bool RequestProtection(Chara attacker, Action< Chara > action)
bool TryWorkOutside(SourceHobby.Row sourceWork)
override void OnSerializing()
List< Condition > conditions
void SetMutation(int idEle, int a=0)
void HoldCard(Card t, int num=-1)
void PickHeld(bool msg=false)
bool HasCondition(string alias)
SpriteReplacer spriteReplacer
static List< Thing > _ListItems
Chara SetHomeZone(Zone zone)
Chara SetFaction(Faction f)
void SetMainElement(string id, int v=0, bool elemental=false)
Thing GetBestRangedWeapon()
bool CanDuplicate(DuplicateCondition con=DuplicateCondition.Default)
void DiminishTempElements(int a=1)
Thing GetRandomRangedWeapon()
override string GetName(NameStyle style, int num=-1)
Chara SetGlobal(Zone _home, int x, int z)
void EnhanceTempElements(int p, bool body, bool mind, bool onlyRenew=false)
override string GetHoverText()
override void OnDeserialized()
override void SetSource()
bool TryHoldCard(Card t, int num=-1, bool pickHeld=false)
static List< Hobby > listHobby
int CalcCastingChance(Element e, int num=1)
bool ShouldEquip(Thing t, bool useFav=false)
bool CanMoveTo(Point p, bool allowDestroyPath=true)
bool HasMinion(string id)
void DestroyPath(Point pos)
override CardRenderer _CreateRenderer()
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
override bool IsPCFaction
override bool IsPCPartyMinion
void CalculateMaxStamina()
void MoveZone(Zone z, ZoneTransition transition)
void TryUpgrade(bool msg=true)
void MakeMinion(Chara _master, MinionType type=MinionType.Default)
override void LookAt(Point p)
Condition AddCondition(string id, int p, int p2, bool force=false)
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
override bool IsPCFactionMinion
void SetCooldown(int idEle, int turns=0)
void Slap(Chara c, bool slapToDeath=false)
override MoveResult _Move(Point newPoint, MoveType type=MoveType.Walk)
bool CanEat(Thing t, bool shouldEat=false)
bool ShouldThrowAway(Thing t, ClearInventoryType type)
ElementContainer _baseWorkElements
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
void SetAIImmediate(AIAct g)
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
void PickOrDrop(Point p, Thing t, bool msg=true)
static GoalHobby _goalHobby
override bool IsDeadOrSleeping
List< Hobby > ListHobbies(bool useMemberType=true)
void MakeAlly(bool msg=true)
void RemoveLastBodyPart(bool msg=false)
ElementContainer baseWorkElements
void TickWork(VirtualDate date)
void Stumble(int mtp=100)
void ClearInventory(ClearInventoryType type)
void GainAbility(int ele, int mtp=100, Thing origin=null)
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
string TalkTopic(string topic="calm")
string GetIdPortraitCat()
bool HasHigherGround(Card c)
void TryRestock(bool onCreate)
void RestockInventory(bool onCreate)
List< List< string > > _historyFood
bool MoveNeighborDefinitely()
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
bool visibleWithTelepathy
void ChangeJob(string idNew)
SourceThing.Row GetFavFood()
void SetTempHand(int right=0, int left=0)
void ApplyJob(bool remove=false)
void AddRandomBodyPart(bool msg=false)
List< Hobby > ListWorks(bool useMemberType=true)
Card DropHeld(Point dropPos=null)
void Revive(Point p=null, bool msg=false)
void TryReservePickupTutorial(Thing t)
LayerDrama ShowDialog(string book, string step="main", string tag="")
void RefreshFaithElement()
ElementContainer faithElements
override void ChangeRarity(Rarity r)
void GiveLovePotion(Chara c, Thing t)
void AddCooldown(int idEle, int turns=0)
void RerollHobby(bool extraSlotChance=true)
Thing MakeGene(DNA.Type? type=null)
void RefreshSpeed(Element.BonusInfo info=null)
static List< SourceRace.Row > ListAdvRace
bool CanBeTempAlly(Chara c)
int GetCooldown(int idEle)
override string AliasMaterialOnCreate
void ModWeight(int a, bool ignoreLimit=false)
void AddFoodHistory(Thing food)
override CardRow sourceCard
bool CanInteractTo(Card c)
string GetTopicText(string topic="calm")
static NoGoal _NoGoalRepeat
void ModCorruption(int a)
void RestockEquip(bool onCreate)
override void SetDir(int d)
MoveResult TryMoveTowards(Point p)
bool FindNearestNewEnemy()
Element GetFavWeaponSkill()
void DropThing(Thing t, int num=-1)
void GiveGift(Chara c, Thing t)
void EQ_Item(string s, int num=1)
string GetTextHappiness()
override bool IsMultisize
Chara SetEnemy(Chara c=null)
void CallHelp(Chara tg, bool fanatic=false)
void DoHostileAction(Card _tg, bool immediate=false)
bool CanSeeSimple(Point p)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
void ClearBed(Map map=null)
override void SetRenderParam(RenderParam p)
void AddResistCon(Condition con)
void MoveZone(Zone z, ZoneTransition.EnterState state=ZoneTransition.EnterState.Auto)
bool UseAbility(Act a, Card tc=null, Point pos=null, bool pt=false)
bool TryEquip(Thing t, bool useFav=false)
override SubPassData GetSubPassData()
bool CanSeeLos(Point p, int dist=-1)
int CountNumEaten(Thing food)
void ResistCon(Condition con)
void SetSummon(int duration)
Element GetFavArmorSkill()
void DamageTempElements(int p, bool body, bool mind, bool onlyRenew=false)
bool IsEnemyOnPath(Point p, bool cancelAI=true)
void InitStats(bool onDeserialize=false)
void MoveHome(string id, int x=-1, int z=-1)
bool TryIdentify(Thing t, int count=1, bool show=true)
Thing TryPoisonPotion(Thing t)
void TryTakeSharedItems(bool msg=true)
override void LookAt(Card c)
static List< SourceThing.Row > _listFavFood
ConBaseTransmuteMimic mimicry
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
static string[] IDTimeTable
TimeTable.Span CurrentSpan
Chara SetHostility(Hostility h)
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
void TrySetEnemy(Chara c)
override void OnCreate(int genLv)
void TryAbsorbRod(Thing t)
string GetTextWork(bool simple=false)
bool TryFuse(float chance=1f)
void TryPush(Point point)
string GetTextHobby(bool simple=false)
Dictionary< int, int > resistCon
void OnSleep(Thing bed=null, int days=1)
override string GetHoverText2()
int ParseBodySlot(string s)
bool CanEquipRanged(Thing t)
void Sleep(Thing bed=null, Thing pillow=null, bool pickup=false, ItemPosition posBed=null, ItemPosition posPillow=null)
void OnGiveErohon(Thing t)
AttackStyle GetFavAttackStyle()
bool HasCooldown(int idEle)
static GoalWork _goalWork
void OnSleep(int power, int days=1, bool isSunLit=false)
void DoAI(int wait, Action onPerform)
ElementContainer workElements
static List< SourceJob.Row > ListAdvJob
void MoveZone(string alias)
void SetPCCState(PCCState state)
Element GetBuffStats(int ele)
void MakeGrave(string lastword)
override void OnBeforeCreate()
bool DroppedCard(string id)
void MarkCardDrop(string id)
UD_String_MatData matColors
Gradient gradientLVComparison
virtual string GetHoverText2()
virtual string GetName(NameStyle style, int num=-1)
virtual string GetHoverText()
void Kill(bool silent=false)
static Condition Create(string alias, int power=100, Action< Condition > onCreate=null)
static void Collect(Thing t)
bool ignoreBackerDestoryFlag
BackerContentConfig backer
static Thing MakeLoveLunch(Chara c)
static string GetBloodText(Chara c)
static Thing GenerateGene(Chara c, Type? type=null)
int GetRaw(int offsetHours=0)
static void TryWarnMana(Action action)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
void ModExp(int ele, float a, bool chain=false)
Dictionary< int, Element > dict
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetElement(string alias)
static SourceElement.Row Get(int id)
virtual int GetPower(Card c)
static Element Create(int id, int v=0)
virtual Act.Cost GetCost(Chara c)
static List< SourceElement.Row > ListElements
virtual bool PotentialAsStock
static int[] List_MainAttributesMajor
TileInfo GetTileInfo(int gx, int gy)
static Expedition Create(Chara c, ExpeditionType type)
static SourceFloor.Row sourceSnow
static SourceFloor.Row sourceIce
static bool IsTatami(int id)
static SourceFloor.Row sourceWood
ExpeditionManager expeditions
void RemoveMemeber(Chara c)
string Log(string idLang, string ref1=null, string ref2=null, string ref3=null, string ref4=null)
Dictionary< string, Faction > dictAll
virtual List< string > Apply(int a, ElementContainer owner, bool hint=false)
override bool IsPurchaseFeatReqMet(ElementContainer owner, int lv=-1)
static void ProcDrink(Chara c, Thing food)
static void Proc(Chara c, Thing food, bool consume=true)
Dictionary< int, byte > lastPoints
static string Parse(string text, bool thirdPerson, string val1, string val2=null, string val3=null, string val4=null)
bool disableDeathPenaltyProtection
UD_String_ElementRef elements
ConfigPreference preference
ConfigAutoCombat autoCombat
ReligionManager religions
bool Save(bool isAutoSave=false, bool silent=false)
PCCUniformManager uniforms
void Refresh(Chara owner, GoalListType type)
void ValidateHobby(Chara c)
bool FindWork(Chara c, bool setAI=true)
static GuildFighter Fighter
int GetEfficiency(Chara c)
static bool Has(string id)
static string[] GetList(string id)
static string _currency(object a, string IDCurrency)
static void SetDirty(Element a)
static LayerDrama Activate(string book, string idSheet, string idStep, Chara target=null, Card ref1=null, string tag="")
static LayerDrama ActivateMain(string idSheet, string idStep=null, Chara target=null, Card ref1=null, string tag="")
static void SetDirty(Thing t)
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
static SourceMaterial.Row sourceOak
static SourceMaterial.Row sourceSnow
static SourceMaterial.Row sourceIce
bool Contains(int dx, int dz)
Thing FindThing(Func< Thing, bool > func)
Chara FindChara(string id)
void MoveCard(Point p, Card t)
void SetLiquid(int x, int z, CellEffect effect=null)
void SetFoormark(Point pos, int id, int angle, int offset=0)
void SetEffect(int x, int z, CellEffect effect=null)
static ThirstPersonInfo thirdPerson1
static string SayNothingHappen()
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
bool HasElement(int ele, bool excludePC=false)
void RemoveMember(Chara c)
void AddMemeber(Chara c, bool showMsg=false)
void RequestPathImmediate(PathProgress progress)
Point GetFirstStep(Point origin, Point _dest, IPathfindWalker walker, int maxDist=20, MoveType moveType=MoveType.Default)
static PathManager Instance
List< PathFinderNode > nodes
void EndTurn(bool consume=true)
void EnterLocalZone(bool encounter=false, Chara mob=null)
List< Chara > listCarryoverMap
HashSet< int > doneBackers
Thing DropReward(Thing t, bool silent=false)
bool TryAbortAutoCombat(bool immediate=true)
SourceMaterial.Row matFloor
SourceBlock.Row sourceBlock
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
void SetObj(int id=0, int value=1, int dir=0)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
override string ToString()
Point Set(int _x, int _z)
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Point GetPointTowards(Point dest)
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
bool Equals(int _x, int _z)
List< Chara > ListCharas()
SourceFloor.Row sourceFloor
void SetBlock(int idMat=0, int idBlock=0)
Effect PlayEffect(string id)
Point GetRandomNeighbor()
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
bool IsActive(int id, int days=-1)
static string GetRandomPortrait(string idDict)
static HashSet< string > allIds
bool OnShowDialog(Chara c)
Quest Add(string id, string idGlobalChara=null)
bool IsStarted(string id)
virtual void OnGiveItem(Chara c, Thing t)
void OnSetGoal(AIAct newGoal)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
static int Set(Zone zone)
Dictionary< string, Religion > dictAll
ReligionMoonShadow MoonShadow
ReligionTrickery Trickery
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
static Religion recentWrath
virtual void Revelation(string idTalk, Card c, int chance=100)
int ConvertTile(int tile)
bool ContainsTag(string _tag)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
static void ShakeCam(string id="default", float magnitude=1f)
SourceCharaText charaText
SourceCategory categories
virtual bool ShowDangerLv
virtual int DangerLvBoost
virtual bool IsSnowCovered
bool tryFixPrefNotLoadedAtStart
Sprite GetSprite(string suffix="")
static int GetAffinityMod(int phase)
static StatsSleepiness Sleepiness
static StatsHygiene Hygiene
static StatsBurden Burden
Stats Set(int[] _raw, int _rawIndex, Chara _CC)
static StatsStamina Stamina
static StatsHunger Hunger
static void GetAchievement(ID_Achievement id)
static SubPassData Default
static TargetTypeSelfParty SelfParty
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void DestroyAll(Func< Thing, bool > funcExclude=null)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
static void TryLickChest(Thing chest)
static Thing CreateTreasure(string id, int lv, TreasureType type=TreasureType.Map)
static Thing CreateParcel(string idLang=null, params Thing[] things)
static Thing CreateSpellbook(string alias, int num=1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing CreateScroll(int ele, int num=1)
static Thing CreateCurrency(int a, string id="money")
static Thing Create(string id, int idMat=-1, int lv=-1)
override int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
override string GetName(NameStyle style, int _num=-1)
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
virtual bool UseRandomName
virtual bool UseRandomAlias
virtual bool CanExtendBuild
virtual void OnTickHeld()
virtual void OnSteppedOut(Chara c)
virtual bool IgnoreOnSteppedWhenMoving
virtual bool CanBeDestroyed
virtual bool CanRead(Chara c)
virtual ShopType ShopType
virtual bool CanEat(Chara c)
virtual bool IsChangeFloorHeight
virtual void OnStepped(Chara c)
virtual bool CanBeDropped
virtual Action GetHealAction(Chara c)
virtual void SetName(ref string s)
virtual bool CanDrink(Chara c)
virtual bool CanOnlyCarry
virtual void OnBlend(Thing t, Chara c)
static void Reserve(string idStep, Action onBeforePlay=null)
static void Play(string idStep)
UIItem AddHeaderCard(string text, Sprite sprite=null)
UIItem AddText(string text, FontColor color=FontColor.DontChange)
Condition CurrentCondition
static void Say(string text, FontColor fontColor=FontColor.Default, Sprite sprite=null)
FilterResult IsFilterPass(string text)
List< WorkSession > hobbies
void SendPackage(Thing p)
virtual ZoneTransition.EnterState ReturnState
virtual void OnLeaveZone()
void RefreshDeathSentense()
int CountMinions(Chara c)
void SetBGM(List< int > ids, bool refresh=true, float fadeDuration=0f)
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Chara SpawnMob(string id, Point pos=null)
virtual bool IsUnderwater
virtual bool WillAutoSave
virtual bool KeepAllyDistance
virtual bool HiddenInRegionMap
void RefreshListCitizen()
Card AddCard(Card t, Point point)
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)