1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-28 20:27:46 +00:00

implement whm lily

This commit is contained in:
collett 2020-03-07 17:57:00 +09:00
parent b59c96a5dd
commit d3c656e8b8
4 changed files with 100 additions and 0 deletions

View file

@ -587,6 +587,7 @@ namespace Sapphire::Common
// AetherflowStack = 30, // AetherflowStack = 30,
// Status = 32, // Status = 32,
PLDGauge = 41, PLDGauge = 41,
WHMLily = 57,
// RDMGaugeBoth = 74, // RDMGaugeBoth = 74,
//// RDMGaugeBlack = 75, // not right? //// RDMGaugeBlack = 75, // not right?
// DRGGauge3Eyes = 76, // DRGGauge3Eyes = 76,

View file

@ -808,6 +808,31 @@ bool Action::Action::primaryCostCheck( bool subtractCosts )
return false; return false;
} }
case Common::ActionPrimaryCostType::WHMLily:
{
auto pPlayer = m_pSource->getAsPlayer();
if( pPlayer )
{
auto lily = pPlayer->gaugeWhmGetLily();
if( lily >= m_primaryCost )
{
if( subtractCosts )
{
lily -= m_primaryCost;
auto bloodLily = pPlayer->gaugeWhmGetBloodLily();
if( pPlayer->getLevel() >= 74 )
{
bloodLily = std::min( 3, bloodLily + m_primaryCost );
}
pPlayer->gaugeWhmSetLilies( lily, bloodLily );
}
return true;
}
}
return false;
}
// free casts, likely just pure ogcds // free casts, likely just pure ogcds
case Common::ActionPrimaryCostType::None: case Common::ActionPrimaryCostType::None:
{ {

View file

@ -1124,6 +1124,7 @@ void Sapphire::Entity::Player::update( uint64_t tickCount )
if( !isAlive() ) if( !isAlive() )
return; return;
int64_t interval = tickCount - m_lastUpdate;
m_lastUpdate = tickCount; m_lastUpdate = tickCount;
if( !checkAction() ) if( !checkAction() )
@ -1165,6 +1166,35 @@ void Sapphire::Entity::Player::update( uint64_t tickCount )
} }
} }
switch( getClass() )
{
case Common::ClassJob::Conjurer:
case Common::ClassJob::Whitemage:
{
if( hasStateFlag( Common::PlayerStateFlag::InCombat ) )
{
if( gaugeWhmGetLily() < 3 )
{
auto lilyTimer = gaugeWhmGetLilyTimer();
lilyTimer += interval;
if( lilyTimer >= 30000 )
{
gaugeWhmSetLilyTimer( 0 ); // packet is sent together with following lily update
gaugeWhmSetLilies( gaugeWhmGetLily() + 1, gaugeWhmGetBloodLily() );
}
else
{
gaugeWhmSetLilyTimer( lilyTimer ); // don't send any packet, the client increases the timer by itself
}
}
else
{
gaugeWhmSetLilyTimer( 0 );
}
}
};
}
Chara::update( tickCount ); Chara::update( tickCount );
} }
@ -1464,13 +1494,17 @@ void Sapphire::Entity::Player::onMobAggro( BNpcPtr pBNpc )
{ {
hateListAdd( pBNpc ); hateListAdd( pBNpc );
queuePacket( makeActorControl( getId(), ToggleAggro, 1 ) ); queuePacket( makeActorControl( getId(), ToggleAggro, 1 ) );
setStateFlag( Common::PlayerStateFlag::InCombat );
} }
void Sapphire::Entity::Player::onMobDeaggro( BNpcPtr pBNpc ) void Sapphire::Entity::Player::onMobDeaggro( BNpcPtr pBNpc )
{ {
hateListRemove( pBNpc ); hateListRemove( pBNpc );
if( m_actorIdTohateSlotMap.empty() ) if( m_actorIdTohateSlotMap.empty() )
{
queuePacket( makeActorControl( getId(), ToggleAggro ) ); queuePacket( makeActorControl( getId(), ToggleAggro ) );
unsetStateFlag( Common::PlayerStateFlag::InCombat );
}
} }
bool Sapphire::Entity::Player::isLogin() const bool Sapphire::Entity::Player::isLogin() const
@ -2201,6 +2235,7 @@ void Sapphire::Entity::Player::sendActorGauge()
void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value ) void Sapphire::Entity::Player::gaugeWarSetIb( uint8_t value )
{ {
assert( value >= 0 && value <= 100 );
auto oldValue = gaugeWarGetIb(); auto oldValue = gaugeWarGetIb();
if( ( oldValue == 0 && value != 0 ) || if( ( oldValue == 0 && value != 0 ) ||
( oldValue != 0 && value == 0 ) ) ( oldValue != 0 && value == 0 ) )
@ -2224,6 +2259,7 @@ uint8_t Sapphire::Entity::Player::gaugeWarGetIb()
void Sapphire::Entity::Player::gaugePldSetOath( uint8_t value ) void Sapphire::Entity::Player::gaugePldSetOath( uint8_t value )
{ {
assert( value >= 0 && value <= 100 );
auto oldValue = gaugePldGetOath(); auto oldValue = gaugePldGetOath();
m_gauge.pld.oathGauge = value; m_gauge.pld.oathGauge = value;
if( oldValue != value ) if( oldValue != value )
@ -2234,3 +2270,35 @@ uint8_t Sapphire::Entity::Player::gaugePldGetOath()
{ {
return m_gauge.pld.oathGauge; return m_gauge.pld.oathGauge;
} }
uint8_t Sapphire::Entity::Player::gaugeWhmGetLily()
{
return m_gauge.whm.lilies;
}
uint8_t Sapphire::Entity::Player::gaugeWhmGetBloodLily()
{
return m_gauge.whm.bloodLilies;
}
void Sapphire::Entity::Player::gaugeWhmSetLilies( uint8_t liles, uint8_t bloodLilies )
{
assert( liles >= 0 && liles <= 3 );
assert( bloodLilies >= 0 && bloodLilies <= 3 );
m_gauge.whm.lilies = liles;
m_gauge.whm.bloodLilies = bloodLilies;
sendActorGauge();
}
void Sapphire::Entity::Player::gaugeWhmSetLilyTimer( uint16_t value, bool sendPacket )
{
assert( value >= 0 && value <= 30000 );
m_gauge.whm.lilyTimer = value;
if( sendPacket )
sendActorGauge();
}
uint16_t Sapphire::Entity::Player::gaugeWhmGetLilyTimer()
{
return m_gauge.whm.lilyTimer;
}

View file

@ -982,6 +982,12 @@ namespace Sapphire::Entity
void gaugePldSetOath( uint8_t value ); void gaugePldSetOath( uint8_t value );
uint8_t gaugePldGetOath(); uint8_t gaugePldGetOath();
uint8_t gaugeWhmGetLily();
uint8_t gaugeWhmGetBloodLily();
void gaugeWhmSetLilies( uint8_t liles, uint8_t bloodLilies );
void gaugeWhmSetLilyTimer( uint16_t value, bool sendPacket = false );
uint16_t gaugeWhmGetLilyTimer();
////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////
Common::HuntingLogEntry& getHuntingLogEntry( uint8_t index ); Common::HuntingLogEntry& getHuntingLogEntry( uint8_t index );