Elin Decompiled Documentation EA 23.249 Nightly
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 (int _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 268 of file CharaBody.cs.

269 {
271 {
272 elementId = ele,
273 thing = thing,
274 index = slots.Count
275 };
276 if (ele == 35)
277 {
278 if (slotMainHand == null)
279 {
281 }
282 else if (slotOffHand == null)
283 {
285 }
286 }
287 if (ele == 41)
288 {
289 slotRange = item;
290 }
291 slots.Add(item);
292 }
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 Chara.AddRandomBodyPart(), DNA.Apply(), Chara.ApplyRace(), CoreDebug.ChangeRace(), Player.CreateEquip(), Chara.ResetBody(), and SetOwner().

◆ CountWeapons()

int CharaBody.CountWeapons ( )
inline

Definition at line 545 of file CharaBody.cs.

546 {
547 int num = 0;
548 foreach (BodySlot slot in slots)
549 {
550 if (slot.thing != null && slot.thing.IsMeleeWeapon)
551 {
552 num++;
553 }
554 }
555 return num;
556 }
Thing thing
Definition: BodySlot.cs:8
bool IsMeleeWeapon
Definition: Card.cs:2241

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 186 of file CharaBody.cs.

187 {
188 slot = slot ?? GetSlot(thing.category.slot) ?? GetSlot(thing.category.slot, onlyEmpty: false);
189 if (slot == slotMainHand || slot == slotOffHand)
190 {
191 owner.combatCount = 10;
192 }
193 if (slot == null || slot.elementId != thing.category.slot)
194 {
195 Debug.LogWarning("could not equip:" + thing?.ToString() + "/" + slot?.ToString() + "/" + owner);
196 return false;
197 }
198 if (!IsEquippable(thing, slot))
199 {
200 return false;
201 }
202 if (slot.thing != null)
203 {
204 if (slot.thing == thing)
205 {
206 Unequip(slot);
207 return false;
208 }
209 Unequip(slot, refresh: false);
210 }
211 Unequip(thing, refresh: false);
212 if (thing.parent != owner)
213 {
214 if (msg && owner.IsPC && thing.parent is Thing)
215 {
216 Msg.Say("movedToEquip", thing, thing.parent as Thing);
217 }
218 owner.AddCard(thing);
219 }
220 slot.thing = thing;
221 thing.c_equippedSlot = slot.index + 1;
222 thing.elements.SetParent(owner);
223 thing.trait.OnEquip(owner, onSetOwner: false);
224 if (EClass.pc != null)
225 {
227 }
229 if (owner.IsPC)
230 {
231 if (msg)
232 {
234 }
237 }
239 {
240 if (slot.elementId == 45 || thing.HasElement(490))
241 {
243 }
244 if (owner.isCreated)
245 {
246 owner.Refresh();
247 }
248 }
249 if (owner.isCreated)
250 {
251 if (thing.Evalue(656) > 0)
252 {
253 thing.SetBlessedState(BlessedState.Cursed);
254 }
255 if (thing.blessedState <= BlessedState.Cursed)
256 {
257 owner.Say("equipCursed", owner);
258 owner.PlaySound("curse3");
259 }
260 }
261 if (slot.elementId == 37 && owner.HasElement(1209) && !thing.HasElement(419))
262 {
263 owner.Say("tail_covered", owner);
264 }
265 return true;
266 }
BlessedState
Definition: BlessedState.cs:2
int elementId
Definition: BodySlot.cs:6
ElementContainerCard elements
Definition: Card.cs:41
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6177
Card AddCard(Card c)
Definition: Card.cs:3090
ICardParent parent
Definition: Card.cs:55
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3895
void RecalculateFOV()
Definition: Card.cs:6389
Trait trait
Definition: Card.cs:53
int Evalue(int ele)
Definition: Card.cs:2571
BlessedState blessedState
Definition: Card.cs:278
SourceCategory.Row category
Definition: Card.cs:2049
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:5932
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6830
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:354
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1725
Faction faction
Definition: Chara.cs:427
override bool IsPC
Definition: Chara.cs:612
bool isCreated
Definition: Chara.cs:136
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6709
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
Definition: Thing.cs:8
virtual void OnEquip(Chara c, bool onSetOwner)
Definition: Trait.cs:673
static void SetDirty()
Definition: WidgetEquip.cs:34

References Card.AddCard(), Card.blessedState, Card.category, Faction.charaElements, EClass.core, Debug, BodySlot.elementId, Card.elements, Card.Evalue(), Chara.faction, GetSlot(), Card.HasElement(), Chara.isCreated, IsEquippable(), Core.IsGameStarted, Chara.IsPC, 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.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 434 of file CharaBody.cs.

435 {
436 int num = 0;
437 foreach (BodySlot slot in slots)
438 {
439 if (slot.thing != null && slot.elementId == 35 && slot.thing.source.offense.Length >= 2)
440 {
441 if (slot.thing == t)
442 {
443 return num;
444 }
445 num++;
446 }
447 }
448 return -1;
449 }
SourceThing.Row source
Definition: Thing.cs:11

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

◆ GetAttackStyle()

AttackStyle CharaBody.GetAttackStyle ( )
inline

Definition at line 464 of file CharaBody.cs.

465 {
466 bool flag = false;
467 int num = 0;
468 foreach (BodySlot slot in slots)
469 {
470 if (slot.elementId == 35 && slot.thing != null)
471 {
472 if (slot.thing.IsMeleeWeapon)
473 {
474 num++;
475 }
476 else
477 {
478 flag = true;
479 }
480 }
481 }
482 if (num > 1)
483 {
484 return AttackStyle.TwoWield;
485 }
486 if (flag)
487 {
488 return AttackStyle.Shield;
489 }
490 if (num == 1)
491 {
492 return AttackStyle.TwoHand;
493 }
494 return AttackStyle.Default;
495 }
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 497 of file CharaBody.cs.

498 {
499 return style switch
500 {
501 AttackStyle.TwoHand => 130,
502 AttackStyle.TwoWield => 131,
503 _ => 0,
504 };
505 }

Referenced by AttackProcess.Perform().

◆ GetEquippedThing()

Thing CharaBody.GetEquippedThing ( int  elementId)
inline

Definition at line 409 of file CharaBody.cs.

410 {
411 foreach (BodySlot slot in slots)
412 {
413 if (slot.elementId == elementId && slot.thing != null)
414 {
415 return slot.thing;
416 }
417 }
418 return null;
419 }

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

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

◆ GetMeleeDistance()

int CharaBody.GetMeleeDistance ( )
inline

Definition at line 451 of file CharaBody.cs.

452 {
453 int num = owner.Evalue(666);
454 foreach (BodySlot slot in slots)
455 {
456 if (slot.elementId == 35 && slot.thing != null && slot.thing.Evalue(666) > num)
457 {
458 num = slot.thing.Evalue(666);
459 }
460 }
461 return 1 + num;
462 }

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 368 of file CharaBody.cs.

369 {
370 bool flag = true;
371 foreach (BodySlot slot in slots)
372 {
373 if (elementId == slot.elementId && (!onlyEmpty || slot.thing == null))
374 {
375 if (!(secondSlot && flag))
376 {
377 return slot;
378 }
379 flag = false;
380 }
381 }
382 return null;
383 }

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 354 of file CharaBody.cs.

355 {
356 BodySlot slot = GetSlot(t.category.slot, onlyEmpty: true, secondSlot);
357 if (slot != null)
358 {
359 return slot;
360 }
361 if (!onlyEmpty)
362 {
363 return GetSlot(t.category.slot, onlyEmpty: false, secondSlot);
364 }
365 return null;
366 }

References Card.category, and GetSlot().

Referenced by 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 507 of file CharaBody.cs.

508 {
509 return -(slot.element.sort * 100 + owner.body.slots.IndexOf(slot));
510 }
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 421 of file CharaBody.cs.

422 {
423 int num = 0;
424 foreach (BodySlot slot in slots)
425 {
426 if (slot.thing != null && (!armorOnly || (slot.elementId != 44 && slot.elementId != 45)))
427 {
428 num += slot.thing.ChildrenAndSelfWeight;
429 }
430 }
431 return num;
432 }
int ChildrenAndSelfWeight
Definition: Card.cs:2041

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 397 of file CharaBody.cs.

398 {
399 foreach (BodySlot slot in slots)
400 {
401 if (slot.thing != null && slot.thing.elements.Has(idEle))
402 {
403 return true;
404 }
405 }
406 return false;
407 }
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 385 of file CharaBody.cs.

386 {
387 foreach (BodySlot slot in slots)
388 {
389 if (slot.thing != null && slot.thing.IsWeapon)
390 {
391 return true;
392 }
393 }
394 return false;
395 }
bool IsWeapon
Definition: Card.cs:2206

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 (IsTooHeavyToEquip(thing))
142 {
143 if (EClass.core.IsGameStarted && owner.IsPC && text)
144 {
145 Msg.Say("tooHeavyToEquip", thing);
146 }
147 return false;
148 }
149 return true;
150 bool CannotEquip()
151 {
152 if (text)
153 {
154 Msg.Say("cannnotEquip", slot.element.GetName().ToLower());
155 }
156 return false;
157 }
158 }
SourceElement.Row element
Definition: BodySlot.cs:16
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:160

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

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

◆ IsTooHeavyToEquip()

bool CharaBody.IsTooHeavyToEquip ( Thing  thing)
inline

Definition at line 160 of file CharaBody.cs.

161 {
162 if (owner.HasElement(1204) && thing.ChildrenAndSelfWeight > 1000)
163 {
164 return thing.category.slot != 44;
165 }
166 return false;
167 }

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 294 of file CharaBody.cs.

295 {
296 for (int i = 0; i < slots.Count; i++)
297 {
298 BodySlot bodySlot = slots[i];
299 bodySlot.index = i;
300 int elementId = bodySlot.elementId;
301 if (elementId == 35)
302 {
303 if (slotMainHand == null)
304 {
305 slotMainHand = bodySlot;
306 }
307 else if (slotOffHand == null)
308 {
309 slotOffHand = bodySlot;
310 }
311 }
312 if (elementId == 41)
313 {
314 slotRange = bodySlot;
315 }
316 if (bodySlot.thing != null)
317 {
318 bodySlot.thing.c_equippedSlot = i + 1;
319 }
320 }
321 }

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

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

◆ RemoveBodyPart()

void CharaBody.RemoveBodyPart ( int  ele)
inline

Definition at line 323 of file CharaBody.cs.

324 {
325 int idx = slots.FindIndex((BodySlot a) => a.elementId == ele);
326 RemoveBodyPartAt(idx);
327 }
void RemoveBodyPartAt(int idx)
Definition: CharaBody.cs:329

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 329 of file CharaBody.cs.

330 {
331 if (idx != -1)
332 {
333 BodySlot bodySlot = slots[idx];
334 if (bodySlot.thing != null)
335 {
336 Unequip(bodySlot);
337 }
338 if (slotMainHand == bodySlot)
339 {
340 slotMainHand = null;
341 }
342 if (slotOffHand == bodySlot)
343 {
344 slotOffHand = null;
345 }
346 if (slotRange == bodySlot)
347 {
348 slotRange = null;
349 }
350 slots.RemoveAt(idx);
351 }
352 }

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 512 of file CharaBody.cs.

513 {
514 if (!t)
515 {
516 return;
517 }
518 if (b.indexPart == 0)
519 {
520 int num = 0;
521 foreach (BodySlot slot in slots)
522 {
523 if (slot.elementId == b.element.id)
524 {
525 num++;
526 }
527 if (b == slot)
528 {
529 break;
530 }
531 }
532 b.indexPart = num;
533 }
534 if (b.elementId == 35)
535 {
536 t.SetText(b.indexPart.ToString() ?? "");
537 t.SetActive(enable: true);
538 }
539 else
540 {
541 t.SetActive(enable: false);
542 }
543 }
int indexPart
Definition: BodySlot.cs:12
void SetText(string s)
Definition: UIText.cs:159

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 }
ThingContainer things
Definition: Card.cs:38
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:268
int[] rawSlots
Definition: CharaBody.cs:16
bool isEquipped
Definition: Thing.cs:17

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:677

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 169 of file CharaBody.cs.

170 {
171 if (t.isEquipped)
172 {
173 _ = slots[t.c_equippedSlot - 1];
174 if (IsTooHeavyToEquip(t))
175 {
176 owner.Say("tooHeavyToEquip", t);
177 Unequip(t);
178 }
179 }
180 if (!owner.IsPC && !t.isEquipped)
181 {
182 owner.TryEquip(t);
183 }
184 }
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7727

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: