From 8262ebd4e9867ed33a525cea03f36d1e70776a04 Mon Sep 17 00:00:00 2001 From: collett Date: Sat, 11 Apr 2020 04:55:02 +0900 Subject: [PATCH] create actual functions for buff stacks --- src/world/StatusEffect/StatusEffect.cpp | 31 ++++++++++++++++++++----- src/world/StatusEffect/StatusEffect.h | 4 ++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/world/StatusEffect/StatusEffect.cpp b/src/world/StatusEffect/StatusEffect.cpp index c1e4b74e..74f95bcc 100644 --- a/src/world/StatusEffect/StatusEffect.cpp +++ b/src/world/StatusEffect/StatusEffect.cpp @@ -261,6 +261,21 @@ void Sapphire::StatusEffect::StatusEffect::setParam( uint16_t param ) m_param = param; } +void Sapphire::StatusEffect::StatusEffect::setStacks( uint8_t stacks ) +{ + if( ( m_param & 0x00FF ) != 0x00FF ) + { + m_param = stacks; + } +} + +uint8_t Sapphire::StatusEffect::StatusEffect::getStacks() +{ + if( ( m_param & 0x00FF ) == 0x00FF ) + return 0; + return static_cast< uint8_t >( m_param & 0x00FF ); +} + const std::string& Sapphire::StatusEffect::StatusEffect::getName() const { return m_name; @@ -300,12 +315,14 @@ void Sapphire::StatusEffect::StatusEffect::onBeforeActionStart( Sapphire::World: if( m_effectEntry.effectValue1 > 0 ) { // if stacks equal to remaining uses, assume it is synced - if( m_effectEntry.effectValue1 == m_param ) + if( m_effectEntry.effectValue1 == getStacks() ) { - m_param--; + m_effectEntry.effectValue1--; + setStacks( m_effectEntry.effectValue1 ); m_targetActor->sendStatusEffectUpdate(); } - m_effectEntry.effectValue1--; + else + m_effectEntry.effectValue1--; if( m_effectEntry.effectValue1 == 0 ) { markToRemove(); @@ -330,12 +347,14 @@ void Sapphire::StatusEffect::StatusEffect::onBeforeActionStart( Sapphire::World: if( m_effectEntry.effectValue1 > 0 ) { // if stacks equal to remaining uses, assume it is synced - if( m_effectEntry.effectValue1 == m_param ) + if( m_effectEntry.effectValue1 == getStacks() ) { - m_param--; + m_effectEntry.effectValue1--; + setStacks( m_effectEntry.effectValue1 ); m_targetActor->sendStatusEffectUpdate(); } - m_effectEntry.effectValue1--; + else + m_effectEntry.effectValue1--; if( m_effectEntry.effectValue1 == 0 ) { markToRemove(); diff --git a/src/world/StatusEffect/StatusEffect.h b/src/world/StatusEffect/StatusEffect.h index c8af5f5b..b12ed407 100644 --- a/src/world/StatusEffect/StatusEffect.h +++ b/src/world/StatusEffect/StatusEffect.h @@ -47,6 +47,10 @@ public: void setParam( uint16_t param ); + void setStacks( uint8_t stacks ); + + uint8_t getStacks(); + void registerTickEffect( uint8_t type, uint32_t param ); std::pair< uint8_t, uint32_t > getTickEffect();