Elin Decompiled Documentation EA 23.287 Stable Patch 3
Loading...
Searching...
No Matches
CharaBody Class Reference
Inheritance diagram for CharaBody:
EClass

Public Member Functions

void SetOwner (Chara chara, bool deserialized=false)
 
void Unequip (Thing thing, bool refresh=true)
 
void UnequipAll (int idSlot)
 
void Unequip (BodySlot slot, bool refresh=true)
 
bool IsEquippable (Thing thing, BodySlot slot, bool text=true)
 
bool IsTooHeavyToEquip (Thing thing)
 
void UnqeuipIfTooHeavy (Thing t)
 
bool Equip (Thing thing, BodySlot slot=null, bool msg=true)
 
void AddBodyPart (int ele, Thing thing=null)
 
void RefreshBodyParts ()
 
void RemoveBodyPart (int ele)
 
void RemoveBodyPartAt (int idx)
 
BodySlot GetSlot (Thing t, bool onlyEmpty=false, bool secondSlot=false)
 
BodySlot GetSlot (int elementId, bool onlyEmpty=true, bool secondSlot=false)
 
bool HasWeapon ()
 
bool HasElement (int idEle)
 
Thing GetEquippedThing (int elementId)
 
int GetWeight (bool armorOnly=false)
 
int GetAttackIndex (Thing t)
 
int GetMeleeDistance ()
 
AttackStyle GetAttackStyle ()
 
int GetAttackStyleElement (AttackStyle style)
 
int GetSortVal (BodySlot slot)
 
void SetBodyIndexText (BodySlot b, UIText t)
 
int CountWeapons ()
 

Public Attributes

Chara owner
 
List< BodySlotslots = new List<BodySlot>()
 
BodySlot slotMainHand
 
BodySlot slotOffHand
 
BodySlot slotRange
 

Properties

int[] rawSlots [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Additional Inherited Members

- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 
- Static Public Attributes inherited from EClass
static Core core
 

Detailed Description

Definition at line 4 of file CharaBody.cs.

Member Function Documentation

◆ AddBodyPart()

void CharaBody.AddBodyPart ( int  ele,
Thing  thing = null 
)
inline

Definition at line 283 of file CharaBody.cs.

284 {
286 {
287 elementId = ele,
288 thing = thing,
289 index = slots.Count
290 };
291 if (ele == 35)
292 {
293 if (slotMainHand == null)
294 {
296 }
297 else if (slotOffHand == null)
298 {
300 }
301 }
302 if (ele == 41)
303 {
304 slotRange = item;
305 }
306 slots.Add(item);
307 }
BodySlot slotOffHand
Definition: CharaBody.cs:12
List< BodySlot > slots
Definition: CharaBody.cs:8
BodySlot slotMainHand
Definition: CharaBody.cs:10
BodySlot slotRange
Definition: CharaBody.cs:14

References item, slotMainHand, slotOffHand, slotRange, and slots.

Referenced by Card._OnDeserialized(), Chara.AddRandomBodyPart(), DNA.Apply(), Chara.ApplyRace(), CoreDebug.ChangeRace(), Player.CreateEquip(), Chara.ResetBody(), SetOwner(), and CoreDebug.UpdateInput().

◆ CountWeapons()

int CharaBody.CountWeapons ( )
inline

Definition at line 560 of file CharaBody.cs.

561 {
562 int num = 0;
563 foreach (BodySlot slot in slots)
564 {
565 if (slot.thing != null && slot.thing.IsMeleeWeapon)
566 {
567 num++;
568 }
569 }
570 return num;
571 }
Thing thing
Definition: BodySlot.cs:8
bool IsMeleeWeapon
Definition: Card.cs:2281

References Card.IsMeleeWeapon, slots, and BodySlot.thing.

Referenced by Element.GetCost().

◆ Equip()

bool CharaBody.Equip ( Thing  thing,
BodySlot  slot = null,
bool  msg = true 
)
inline

Definition at line 194 of file CharaBody.cs.

195 {
196 slot = slot ?? GetSlot(thing.category.slot) ?? GetSlot(thing.category.slot, onlyEmpty: false);
197 if (slot == slotMainHand || slot == slotOffHand)
198 {
199 owner.combatCount = 10;
200 }
201 if (slot == null || slot.elementId != thing.category.slot)
202 {
203 Debug.LogWarning("could not equip:" + thing?.ToString() + "/" + slot?.ToString() + "/" + owner);
204 return false;
205 }
206 if (!IsEquippable(thing, slot))
207 {
208 return false;
209 }
210 if (slot.thing != null)
211 {
212 if (slot.thing == thing)
213 {
214 Unequip(slot);
215 return false;
216 }
217 Unequip(slot, refresh: false);
218 }
219 Unequip(thing, refresh: false);
220 if (thing.c_uidAttune != 0)
221 {
222 foreach (Thing item in owner.things.List((Thing a) => a.isEquipped && a.c_uidAttune != 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement")))
223 {
224 Unequip(item);
225 }
226 }
227 if (thing.parent != owner)
228 {
229 if (msg && owner.IsPC && thing.parent is Thing)
230 {
231 Msg.Say("movedToEquip", thing, thing.parent as Thing);
232 }
233 owner.AddCard(thing);
234 }
235 slot.thing = thing;
236 thing.c_equippedSlot = slot.index + 1;
237 thing.elements.SetParent(owner);
238 thing.trait.OnEquip(owner, onSetOwner: false);
239 if (EClass.pc != null)
240 {
242 }
244 if (owner.IsPC)
245 {
246 if (msg)
247 {
249 }
252 }
254 {
255 if (slot.elementId == 45 || thing.HasElement(490))
256 {
258 }
259 if (owner.isCreated)
260 {
261 owner.Refresh();
262 }
263 }
264 if (owner.isCreated)
265 {
266 if (thing.Evalue(656) > 0)
267 {
268 thing.SetBlessedState(BlessedState.Cursed);
269 }
270 if (thing.blessedState <= BlessedState.Cursed)
271 {
272 owner.Say("equipCursed", owner);
273 owner.PlaySound("curse3");
274 }
275 }
276 if (slot.elementId == 37 && owner.HasElement(1209) && !thing.HasElement(419))
277 {
278 owner.Say("tail_covered", owner);
279 }
280 return true;
281 }
BlessedState
Definition: BlessedState.cs:2
int elementId
Definition: BodySlot.cs:6
ElementContainerCard elements
Definition: Card.cs:42
string id
Definition: Card.cs:36
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6375
Card AddCard(Card c)
Definition: Card.cs:3166
ICardParent parent
Definition: Card.cs:56
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3977
void RecalculateFOV()
Definition: Card.cs:6591
Trait trait
Definition: Card.cs:54
ThingContainer things
Definition: Card.cs:39
int Evalue(int ele)
Definition: Card.cs:2611
BlessedState blessedState
Definition: Card.cs:279
SourceCategory.Row category
Definition: Card.cs:2087
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6122
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
int c_uidAttune
Definition: Card.cs:1198
Chara owner
Definition: CharaBody.cs:6
void Unequip(Thing thing, bool refresh=true)
Definition: CharaBody.cs:49
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:110
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Definition: CharaBody.cs:369
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1759
Faction faction
Definition: Chara.cs:429
override bool IsPC
Definition: Chara.cs:626
bool isCreated
Definition: Chara.cs:138
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6850
bool IsGameStarted
Definition: Core.cs:84
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
static Chara pc
Definition: EClass.cs:15
void OnEquip(Chara c, Thing t)
void SetParent(Card c)
ElementContainerFaction charaElements
Definition: FACTION.cs:146
static void Refresh()
Definition: LayerChara.cs:16
static void SetDirty(Thing t)
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Definition: Thing.cs:8
bool isEquipped
Definition: Thing.cs:17
virtual void OnEquip(Chara c, bool onSetOwner)
Definition: Trait.cs:694
static void SetDirty()
Definition: WidgetEquip.cs:34

References Card.AddCard(), Card.blessedState, Card.c_uidAttune, Card.category, Faction.charaElements, EClass.core, Debug, BodySlot.elementId, Card.elements, Card.Evalue(), Chara.faction, GetSlot(), Card.HasElement(), Card.id, Chara.isCreated, IsEquippable(), Thing.isEquipped, Core.IsGameStarted, Chara.IsPC, item, ThingContainer.List(), Trait.OnEquip(), ElementContainerFaction.OnEquip(), owner, Card.parent, EClass.pc, Card.PlaySound(), Card.RecalculateFOV(), LayerChara.Refresh(), Chara.Refresh(), Msg.Say(), Card.Say(), Card.SetBlessedState(), WidgetEquip.SetDirty(), LayerInventory.SetDirty(), ElementContainer.SetParent(), Chara.SetTempHand(), slotMainHand, slotOffHand, BodySlot.thing, Card.things, Card.trait, and Unequip().

Referenced by CoreDebug.ChangeRace(), Chara.EQ_CAT(), Chara.EQ_ID(), InvOwner.ListInteractions(), InvOwner.OnDrag(), TraitMannequin.OnUse(), HotItemEQSet.Perform(), InvOwner.PutBack(), Chara.RestockEquip(), AI_Equip.Run(), and Chara.TryEquip().

◆ GetAttackIndex()

int CharaBody.GetAttackIndex ( Thing  t)
inline

Definition at line 449 of file CharaBody.cs.

450 {
451 int num = 0;
452 foreach (BodySlot slot in slots)
453 {
454 if (slot.thing != null && slot.elementId == 35 && slot.thing.source.offense.Length >= 2)
455 {
456 if (slot.thing == t)
457 {
458 return num;
459 }
460 num++;
461 }
462 }
463 return -1;
464 }
SourceThing.Row source
Definition: Thing.cs:11

References BodySlot.elementId, slots, Thing.source, and BodySlot.thing.

◆ GetAttackStyle()

AttackStyle CharaBody.GetAttackStyle ( )
inline

Definition at line 479 of file CharaBody.cs.

480 {
481 bool flag = false;
482 int num = 0;
483 foreach (BodySlot slot in slots)
484 {
485 if (slot.elementId == 35 && slot.thing != null)
486 {
487 if (slot.thing.IsMeleeWeapon)
488 {
489 num++;
490 }
491 else
492 {
493 flag = true;
494 }
495 }
496 }
497 if (num > 1)
498 {
499 return AttackStyle.TwoWield;
500 }
501 if (flag)
502 {
503 return AttackStyle.Shield;
504 }
505 if (num == 1)
506 {
507 return AttackStyle.TwoHand;
508 }
509 return AttackStyle.Default;
510 }
AttackStyle
Definition: AttackStyle.cs:2

References BodySlot.elementId, Card.IsMeleeWeapon, slots, and BodySlot.thing.

Referenced by ActMelee.Attack(), Chara.CalcCastingChance(), Card.DamageHP(), AttackProcess.GetTwoHandEncBonus(), AttackProcess.Prepare(), WindowCharaMini.Refresh(), and WindowChara.RefreshProfile().

◆ GetAttackStyleElement()

int CharaBody.GetAttackStyleElement ( AttackStyle  style)
inline

Definition at line 512 of file CharaBody.cs.

513 {
514 return style switch
515 {
516 AttackStyle.TwoHand => 130,
517 AttackStyle.TwoWield => 131,
518 _ => 0,
519 };
520 }

Referenced by AttackProcess.Perform().

◆ GetEquippedThing()

Thing CharaBody.GetEquippedThing ( int  elementId)
inline

Definition at line 424 of file CharaBody.cs.

425 {
426 foreach (BodySlot slot in slots)
427 {
428 if (slot.elementId == elementId && slot.thing != null)
429 {
430 return slot.thing;
431 }
432 }
433 return null;
434 }

References BodySlot.elementId, slots, and BodySlot.thing.

Referenced by QuestCrafter.CanUpdateOnTalk(), Card.GetLightRadius(), and CoreDebug.QuickStart().

◆ GetMeleeDistance()

int CharaBody.GetMeleeDistance ( )
inline

Definition at line 466 of file CharaBody.cs.

467 {
468 int num = owner.Evalue(666);
469 foreach (BodySlot slot in slots)
470 {
471 if (slot.elementId == 35 && slot.thing != null && slot.thing.Evalue(666) > num)
472 {
473 num = slot.thing.Evalue(666);
474 }
475 }
476 return 1 + num;
477 }

References BodySlot.elementId, Card.Evalue(), owner, slots, and BodySlot.thing.

Referenced by GoalCombat.TryUseAbility().

◆ GetSlot() [1/2]

BodySlot CharaBody.GetSlot ( int  elementId,
bool  onlyEmpty = true,
bool  secondSlot = false 
)
inline

Definition at line 383 of file CharaBody.cs.

384 {
385 bool flag = true;
386 foreach (BodySlot slot in slots)
387 {
388 if (elementId == slot.elementId && (!onlyEmpty || slot.thing == null))
389 {
390 if (!(secondSlot && flag))
391 {
392 return slot;
393 }
394 flag = false;
395 }
396 }
397 return null;
398 }

References BodySlot.elementId, slots, and BodySlot.thing.

◆ GetSlot() [2/2]

BodySlot CharaBody.GetSlot ( Thing  t,
bool  onlyEmpty = false,
bool  secondSlot = false 
)
inline

Definition at line 369 of file CharaBody.cs.

370 {
371 BodySlot slot = GetSlot(t.category.slot, onlyEmpty: true, secondSlot);
372 if (slot != null)
373 {
374 return slot;
375 }
376 if (!onlyEmpty)
377 {
378 return GetSlot(t.category.slot, onlyEmpty: false, secondSlot);
379 }
380 return null;
381 }

References Card.category, and GetSlot().

Referenced by Card._OnDeserialized(), Chara.EQ_CAT(), Chara.EQ_ID(), Equip(), GetSlot(), InvOwner.ListInteractions(), HotItemEQSet.Perform(), Chara.RefreshSpeed(), Chara.ShouldEquip(), and Chara.TryEquip().

◆ GetSortVal()

int CharaBody.GetSortVal ( BodySlot  slot)
inline

Definition at line 522 of file CharaBody.cs.

523 {
524 return -(slot.element.sort * 100 + owner.body.slots.IndexOf(slot));
525 }
CharaBody body
Definition: Chara.cs:94

References Chara.body, owner, and slots.

Referenced by LayerEquip.RefreshEquipment(), WidgetEquip.RefreshEquipment(), WindowChara.RefreshEquipment(), and ButtonElement.SetGrid().

◆ GetWeight()

int CharaBody.GetWeight ( bool  armorOnly = false)
inline

Definition at line 436 of file CharaBody.cs.

437 {
438 int num = 0;
439 foreach (BodySlot slot in slots)
440 {
441 if (slot.thing != null && (!armorOnly || (slot.elementId != 44 && slot.elementId != 45)))
442 {
443 num += slot.thing.ChildrenAndSelfWeight;
444 }
445 }
446 return num;
447 }
int ChildrenAndSelfWeight
Definition: Card.cs:2079

References Card.ChildrenAndSelfWeight, BodySlot.elementId, slots, and BodySlot.thing.

Referenced by Chara.GetArmorSkill(), WindowCharaMini.Refresh(), and WindowChara.RefreshProfile().

◆ HasElement()

bool CharaBody.HasElement ( int  idEle)
inline

Definition at line 412 of file CharaBody.cs.

413 {
414 foreach (BodySlot slot in slots)
415 {
416 if (slot.thing != null && slot.thing.elements.Has(idEle))
417 {
418 return true;
419 }
420 }
421 return false;
422 }
bool Has(int ele)

References Card.elements, ElementContainer.Has(), slots, and BodySlot.thing.

Referenced by Chara.TickConditions().

◆ HasWeapon()

bool CharaBody.HasWeapon ( )
inline

Definition at line 400 of file CharaBody.cs.

401 {
402 foreach (BodySlot slot in slots)
403 {
404 if (slot.thing != null && slot.thing.IsWeapon)
405 {
406 return true;
407 }
408 }
409 return false;
410 }
bool IsWeapon
Definition: Card.cs:2246

References Card.IsWeapon, slots, and BodySlot.thing.

Referenced by Chara.RestockEquip().

◆ IsEquippable()

bool CharaBody.IsEquippable ( Thing  thing,
BodySlot  slot,
bool  text = true 
)
inline

Definition at line 110 of file CharaBody.cs.

111 {
112 if (slot == null)
113 {
114 return false;
115 }
116 switch (slot.elementId)
117 {
118 case 31:
119 if (owner.HasElement(1555))
120 {
121 return CannotEquip();
122 }
123 break;
124 case 33:
125 if (owner.HasElement(1554))
126 {
127 return CannotEquip();
128 }
129 break;
130 case 39:
131 if (owner.HasElement(1552))
132 {
133 return CannotEquip();
134 }
135 break;
136 }
137 if (slot.thing != null && slot.thing.blessedState <= BlessedState.Cursed)
138 {
139 return CannotEquip();
140 }
141 if (thing.c_uidAttune != 0 && thing.c_uidAttune != owner.uid)
142 {
143 if (text)
144 {
145 Msg.Say("unequipCursed", thing);
146 }
147 return false;
148 }
149 if (IsTooHeavyToEquip(thing))
150 {
151 if (EClass.core.IsGameStarted && owner.IsPC && text)
152 {
153 Msg.Say("tooHeavyToEquip", thing);
154 }
155 return false;
156 }
157 return true;
158 bool CannotEquip()
159 {
160 if (text)
161 {
162 Msg.Say("cannnotEquip", slot.element.GetName().ToLower());
163 }
164 return false;
165 }
166 }
SourceElement.Row element
Definition: BodySlot.cs:16
int uid
Definition: Card.cs:123
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168

References Card.blessedState, Card.c_uidAttune, EClass.core, BodySlot.element, BodySlot.elementId, Card.HasElement(), Core.IsGameStarted, Chara.IsPC, IsTooHeavyToEquip(), owner, Msg.Say(), BodySlot.thing, and Card.uid.

Referenced by Equip(), InvOwner.OnDrag(), and Chara.ShouldEquip().

◆ IsTooHeavyToEquip()

bool CharaBody.IsTooHeavyToEquip ( Thing  thing)
inline

Definition at line 168 of file CharaBody.cs.

169 {
170 if (owner.HasElement(1204) && thing.ChildrenAndSelfWeight > 1000)
171 {
172 return thing.category.slot != 44;
173 }
174 return false;
175 }

References Card.ChildrenAndSelfWeight, Card.HasElement(), and owner.

Referenced by Thing.CanAutoFire(), Chara.CanEquipRanged(), IsEquippable(), ActRanged.Perform(), and UnqeuipIfTooHeavy().

◆ RefreshBodyParts()

void CharaBody.RefreshBodyParts ( )
inline

Definition at line 309 of file CharaBody.cs.

310 {
311 for (int i = 0; i < slots.Count; i++)
312 {
313 BodySlot bodySlot = slots[i];
314 bodySlot.index = i;
315 int elementId = bodySlot.elementId;
316 if (elementId == 35)
317 {
318 if (slotMainHand == null)
319 {
320 slotMainHand = bodySlot;
321 }
322 else if (slotOffHand == null)
323 {
324 slotOffHand = bodySlot;
325 }
326 }
327 if (elementId == 41)
328 {
329 slotRange = bodySlot;
330 }
331 if (bodySlot.thing != null)
332 {
333 bodySlot.thing.c_equippedSlot = i + 1;
334 }
335 }
336 }

References BodySlot.elementId, slotMainHand, slotOffHand, slotRange, slots, and BodySlot.thing.

Referenced by Card._OnDeserialized(), DNA.Apply(), Chara.ApplyRace(), and Chara.ResetBody().

◆ RemoveBodyPart()

void CharaBody.RemoveBodyPart ( int  ele)
inline

Definition at line 338 of file CharaBody.cs.

339 {
340 int idx = slots.FindIndex((BodySlot a) => a.elementId == ele);
341 RemoveBodyPartAt(idx);
342 }
void RemoveBodyPartAt(int idx)
Definition: CharaBody.cs:344

References BodySlot.elementId, RemoveBodyPartAt(), and slots.

Referenced by DNA.Apply(), Chara.ApplyRace(), CoreDebug.ChangeRace(), and Chara.ResetBody().

◆ RemoveBodyPartAt()

void CharaBody.RemoveBodyPartAt ( int  idx)
inline

Definition at line 344 of file CharaBody.cs.

345 {
346 if (idx != -1)
347 {
348 BodySlot bodySlot = slots[idx];
349 if (bodySlot.thing != null)
350 {
351 Unequip(bodySlot);
352 }
353 if (slotMainHand == bodySlot)
354 {
355 slotMainHand = null;
356 }
357 if (slotOffHand == bodySlot)
358 {
359 slotOffHand = null;
360 }
361 if (slotRange == bodySlot)
362 {
363 slotRange = null;
364 }
365 slots.RemoveAt(idx);
366 }
367 }

References slotMainHand, slotOffHand, slotRange, slots, BodySlot.thing, and Unequip().

Referenced by RemoveBodyPart(), and Chara.RemoveLastBodyPart().

◆ SetBodyIndexText()

void CharaBody.SetBodyIndexText ( BodySlot  b,
UIText  t 
)
inline

Definition at line 527 of file CharaBody.cs.

528 {
529 if (!t)
530 {
531 return;
532 }
533 if (b.indexPart == 0)
534 {
535 int num = 0;
536 foreach (BodySlot slot in slots)
537 {
538 if (slot.elementId == b.element.id)
539 {
540 num++;
541 }
542 if (b == slot)
543 {
544 break;
545 }
546 }
547 b.indexPart = num;
548 }
549 if (b.elementId == 35)
550 {
551 t.SetText(b.indexPart.ToString() ?? "");
552 t.SetActive(enable: true);
553 }
554 else
555 {
556 t.SetActive(enable: false);
557 }
558 }
int indexPart
Definition: BodySlot.cs:12
void SetText(string s)
Definition: UIText.cs:163

References BodySlot.element, BodySlot.elementId, BodySlot.indexPart, UIText.SetText(), and slots.

Referenced by ButtonGrid.SetBodySlot().

◆ SetOwner()

void CharaBody.SetOwner ( Chara  chara,
bool  deserialized = false 
)
inline

Definition at line 18 of file CharaBody.cs.

19 {
20 owner = chara;
21 if (!deserialized)
22 {
23 return;
24 }
25 if (rawSlots != null)
26 {
27 for (int i = 0; i < rawSlots.Length; i++)
28 {
30 }
31 }
32 foreach (Thing thing in owner.things)
33 {
34 if (thing.isEquipped)
35 {
36 int num = thing.c_equippedSlot - 1;
37 if (num < 0 || num >= slots.Count)
38 {
39 thing.c_equippedSlot = 0;
40 continue;
41 }
42 slots[num].thing = thing;
44 thing.trait.OnEquip(owner, onSetOwner: true);
45 }
46 }
47 }
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:283
int[] rawSlots
Definition: CharaBody.cs:16

References AddBodyPart(), Card.elements, Thing.isEquipped, Trait.OnEquip(), owner, rawSlots, ElementContainer.SetParent(), slots, Card.things, and Card.trait.

Referenced by Chara.OnCreate(), and Chara.OnDeserialized().

◆ Unequip() [1/2]

void CharaBody.Unequip ( BodySlot  slot,
bool  refresh = true 
)
inline

Definition at line 68 of file CharaBody.cs.

69 {
70 if (slot.thing == null)
71 {
72 return;
73 }
74 Thing thing = slot.thing;
75 if (EClass.pc != null)
76 {
78 }
79 thing.elements.SetParent();
80 thing.trait.OnUnequip(owner);
81 thing.c_equippedSlot = 0;
82 slot.thing = null;
83 if (owner.IsPC)
84 {
85 if (refresh)
86 {
88 }
90 }
93 {
94 return;
95 }
96 if (slot.elementId == 45 || thing.HasElement(490))
97 {
99 }
100 if (refresh && owner.isCreated)
101 {
102 owner.Refresh();
103 if (slot.elementId == 37 && owner.HasElement(1209) && !thing.HasElement(419))
104 {
105 owner.Say("tail_free", owner);
106 }
107 }
108 }
void OnUnequip(Chara c, Thing t)
virtual void OnUnequip(Chara c)
Definition: Trait.cs:698

References Faction.charaElements, EClass.core, BodySlot.elementId, Card.elements, Chara.faction, Card.HasElement(), Chara.isCreated, Core.IsGameStarted, Chara.IsPC, Trait.OnUnequip(), ElementContainerFaction.OnUnequip(), owner, EClass.pc, Card.RecalculateFOV(), LayerChara.Refresh(), Chara.Refresh(), Card.Say(), WidgetEquip.SetDirty(), LayerInventory.SetDirty(), ElementContainer.SetParent(), BodySlot.thing, and Card.trait.

◆ Unequip() [2/2]

void CharaBody.Unequip ( Thing  thing,
bool  refresh = true 
)
inline

◆ UnequipAll()

void CharaBody.UnequipAll ( int  idSlot)
inline

Definition at line 57 of file CharaBody.cs.

58 {
59 foreach (BodySlot slot in slots)
60 {
61 if (slot.elementId == idSlot)
62 {
63 Unequip(slot);
64 }
65 }
66 }

References BodySlot.elementId, slots, and Unequip().

Referenced by Feat.Apply().

◆ UnqeuipIfTooHeavy()

void CharaBody.UnqeuipIfTooHeavy ( Thing  t)
inline

Definition at line 177 of file CharaBody.cs.

178 {
179 if (t.isEquipped)
180 {
181 _ = slots[t.c_equippedSlot - 1];
182 if (IsTooHeavyToEquip(t))
183 {
184 owner.Say("tooHeavyToEquip", t);
185 Unequip(t);
186 }
187 }
188 if (!owner.IsPC && !t.isEquipped)
189 {
190 owner.TryEquip(t);
191 }
192 }
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7904

References Thing.isEquipped, Chara.IsPC, IsTooHeavyToEquip(), owner, Card.Say(), slots, Chara.TryEquip(), and Unequip().

Referenced by ActEffect.Proc().

Member Data Documentation

◆ owner

◆ slotMainHand

◆ slotOffHand

BodySlot CharaBody.slotOffHand

◆ slotRange

BodySlot CharaBody.slotRange

Definition at line 14 of file CharaBody.cs.

Referenced by AddBodyPart(), RefreshBodyParts(), and RemoveBodyPartAt().

◆ slots

Property Documentation

◆ rawSlots

int [] CharaBody.rawSlots
get

Definition at line 16 of file CharaBody.cs.

Referenced by SetOwner().


The documentation for this class was generated from the following file: