Horizon Official Technical Documentation
Horizon::Zone::CombatRegistry::AttributeOperation Class Reference

#include <Combat.hpp>

+ Inheritance diagram for Horizon::Zone::CombatRegistry::AttributeOperation:
+ Collaboration diagram for Horizon::Zone::CombatRegistry::AttributeOperation:

Classes

class  AttributeOperand
 

Public Types

enum  attribute_operation_type {
  ATTRIBUTE_OPERATION_ADD_TO_BASE = 0 , ATTRIBUTE_OPERATION_SUBTRACT_FROM_BASE , ATTRIBUTE_OPERATION_ADD_TO_EQUIP , ATTRIBUTE_OPERATION_SUBTRACT_FROM_EQUIP ,
  ATTRIBUTE_OPERATION_ADD_TO_STATUS , ATTRIBUTE_OPERATION_SUBTRACT_FROM_STATUS
}
 
- Public Types inherited from Horizon::Zone::CombatRegistry::CombatOperation
enum  combat_operation_type {
  COMBAT_OPERATION_ATTRIBUTE , COMBAT_OPERATION_APPEARANCE , COMBAT_OPERATION_STATUS , COMBAT_OPERATION_SKILL_EXECUTION ,
  COMBAT_OPERATION_MELEE_EXECUTION , COMBAT_OPERATION_SKILL_RESULT , COMBAT_OPERATION_MELEE_RESULT , COMBAT_OPERATION_MAX
}
 

Public Member Functions

 AttributeOperation (AttributeOperand *operand, attribute_operation_type operation_type, CombatValueInteger *value)
 
 ~AttributeOperation ()
 
void execute () const override
 
- Public Member Functions inherited from Horizon::Zone::CombatRegistry::CombatOperation
 CombatOperation ()=delete
 
 CombatOperation (const CombatOperation &right)=delete
 
 CombatOperation (CombatOperation &&right)=delete
 
 CombatOperation (CombatOperand *operand, int operation_type, int operation_sub_type, CombatOperationValue *value)
 
 CombatOperation (CombatOperand *operand, int operation_type, int operation_sub_type)
 
virtual ~CombatOperation ()
 
virtual CombatOperandget_operand () const
 
int get_operation_type () const
 
int get_operation_sub_type () const
 
virtual CombatOperationValueget_operation_value () const
 
int get_priority ()
 
void set_priority (int priority)
 
virtual void execute () const =0
 
void operator= (const CombatOperation &operation)=delete
 

Additional Inherited Members

- Protected Attributes inherited from Horizon::Zone::CombatRegistry::CombatOperation
CombatOperand_operand {nullptr}
 
int _operation_type { 0 }
 
int _operation_sub_type { 0 }
 
CombatOperationValue_operation_value {nullptr}
 
int _priority { 0 }
 

Member Enumeration Documentation

◆ attribute_operation_type

Enumerator
ATTRIBUTE_OPERATION_ADD_TO_BASE 
ATTRIBUTE_OPERATION_SUBTRACT_FROM_BASE 
ATTRIBUTE_OPERATION_ADD_TO_EQUIP 
ATTRIBUTE_OPERATION_SUBTRACT_FROM_EQUIP 
ATTRIBUTE_OPERATION_ADD_TO_STATUS 
ATTRIBUTE_OPERATION_SUBTRACT_FROM_STATUS 

Constructor & Destructor Documentation

◆ AttributeOperation()

Horizon::Zone::CombatRegistry::AttributeOperation::AttributeOperation ( AttributeOperand operand,
attribute_operation_type  operation_type,
CombatValueInteger value 
)
inlineexplicit
368 : CombatOperation(operand, COMBAT_OPERATION_ATTRIBUTE, (int) operation_type, value) { }
@ COMBAT_OPERATION_ATTRIBUTE
Definition: Combat.hpp:289

◆ ~AttributeOperation()

Horizon::Zone::CombatRegistry::AttributeOperation::~AttributeOperation ( )
inline
369{ }

Member Function Documentation

◆ execute()

void CombatRegistry::AttributeOperation::execute ( ) const
overridevirtual

Implements Horizon::Zone::CombatRegistry::CombatOperation.

384{
387 int value = integer->get_value();
388
389 if (value == 0)
390 return;
391
392 switch (get_operation_sub_type())
393 {
395 {
396 operand->get_attribute()->add_base(value);
397 }
398 break;
400 {
401 operand->get_attribute()->sub_base(value);
402 }
403 break;
405 {
406 operand->get_attribute()->add_equip(value);
407 }
408 break;
410 {
411 operand->get_attribute()->sub_equip(value);
412 }
413 break;
415 {
416 operand->get_attribute()->add_status(value);
417 }
418 break;
420 {
421 operand->get_attribute()->sub_status(value);
422 }
423 break;
424 }
425
426 // notify through walk packet of hp change.
427 if (operand->get_attribute() != nullptr
428 && operand->get_attribute()->get_type() == STATUS_CURRENTHP
429 && operand->get_attribute()->unit()->type() == UNIT_MONSTER
430 && !operand->get_attribute()->unit()->is_dead()) {
431 operand->get_attribute()->unit()->notify_nearby_players_of_movement(true);
432 }
433}
@ UNIT_MONSTER
Definition: UnitDefinitions.hpp:50
@ STATUS_CURRENTHP
Definition: UnitDefinitions.hpp:94
std::shared_ptr< Traits::Attribute > get_attribute()
Definition: Combat.hpp:357
int get_operation_sub_type() const
Definition: Combat.hpp:319
virtual CombatOperationValue * get_operation_value() const
Definition: Combat.hpp:320
virtual CombatOperand * get_operand() const
Definition: Combat.hpp:317
int get_value()
Definition: Combat.hpp:211

References Horizon::Zone::CombatRegistry::AttributeOperation::AttributeOperand::get_attribute(), Horizon::Zone::CombatRegistry::CombatValueInteger::get_value(), STATUS_CURRENTHP, and UNIT_MONSTER.

+ Here is the call graph for this function:

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