mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-30 08:07:46 +00:00
More cleanups.
This commit is contained in:
parent
6ea6f8e190
commit
e0ec74a6bc
16 changed files with 100 additions and 157 deletions
|
@ -521,6 +521,7 @@ void Action::Action::buildEffects()
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Service< World::Manager::PlayerMgr >::ref().onHudParamChanged( *m_pSource->getAsPlayer() );
|
||||||
|
|
||||||
if( !hasLutEntry || m_hitActors.empty() )
|
if( !hasLutEntry || m_hitActors.empty() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -627,7 +627,7 @@ void Sapphire::Entity::BNpc::onTick()
|
||||||
Chara::onTick();
|
Chara::onTick();
|
||||||
if( m_state == BNpcState::Retreat )
|
if( m_state == BNpcState::Retreat )
|
||||||
{
|
{
|
||||||
regainHp();
|
restHp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -792,19 +792,19 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
|
||||||
Chara::update( tickCount );
|
Chara::update( tickCount );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::BNpc::regainHp()
|
void Sapphire::Entity::BNpc::restHp()
|
||||||
{
|
{
|
||||||
if( this->m_hp < this->getMaxHp() )
|
if( m_hp < getMaxHp() )
|
||||||
{
|
{
|
||||||
auto addHp = static_cast< uint32_t >( getMaxHp() * 0.1f + 1 );
|
auto addHp = static_cast< uint32_t >( getMaxHp() * 0.1f + 1 );
|
||||||
|
|
||||||
if( this->m_hp + addHp < this->getMaxHp() )
|
if( m_hp + addHp < getMaxHp() )
|
||||||
this->m_hp += addHp;
|
m_hp += addHp;
|
||||||
else
|
else
|
||||||
this->m_hp = this->getMaxHp();
|
m_hp = getMaxHp();
|
||||||
}
|
}
|
||||||
|
|
||||||
this->sendStatusUpdate();
|
sendHudParam();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::BNpc::onActionHostile( Sapphire::Entity::CharaPtr pSource )
|
void Sapphire::Entity::BNpc::onActionHostile( Sapphire::Entity::CharaPtr pSource )
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace Sapphire::Entity
|
||||||
uint32_t getTimeOfDeath() const;
|
uint32_t getTimeOfDeath() const;
|
||||||
void setTimeOfDeath( uint32_t timeOfDeath );
|
void setTimeOfDeath( uint32_t timeOfDeath );
|
||||||
|
|
||||||
void regainHp();
|
void restHp();
|
||||||
|
|
||||||
void checkAggro();
|
void checkAggro();
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "Network/GameConnection.h"
|
#include "Network/GameConnection.h"
|
||||||
#include "Network/PacketWrappers/ActorControlPacket.h"
|
#include "Network/PacketWrappers/ActorControlPacket.h"
|
||||||
#include "Network/PacketWrappers/ActorControlTargetPacket.h"
|
#include "Network/PacketWrappers/ActorControlTargetPacket.h"
|
||||||
#include "Network/PacketWrappers/UpdateHpMpTpPacket.h"
|
#include "Network/PacketWrappers/RestingPacket.h"
|
||||||
#include "Network/PacketWrappers/EffectPacket1.h"
|
#include "Network/PacketWrappers/EffectPacket1.h"
|
||||||
#include "Network/PacketWrappers/HudParamPacket.h"
|
#include "Network/PacketWrappers/HudParamPacket.h"
|
||||||
|
|
||||||
|
@ -214,42 +214,36 @@ uint32_t Sapphire::Entity::Chara::getMaxMp() const
|
||||||
void Sapphire::Entity::Chara::resetHp()
|
void Sapphire::Entity::Chara::resetHp()
|
||||||
{
|
{
|
||||||
m_hp = getMaxHp();
|
m_hp = getMaxHp();
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \return reset mp to current max mp */
|
/*! \return reset mp to current max mp */
|
||||||
void Sapphire::Entity::Chara::resetMp()
|
void Sapphire::Entity::Chara::resetMp()
|
||||||
{
|
{
|
||||||
m_mp = getMaxMp();
|
m_mp = getMaxMp();
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \param hp amount to set ( caps to maxHp ) */
|
/*! \param hp amount to set ( caps to maxHp ) */
|
||||||
void Sapphire::Entity::Chara::setHp( uint32_t hp )
|
void Sapphire::Entity::Chara::setHp( uint32_t hp )
|
||||||
{
|
{
|
||||||
m_hp = hp < getMaxHp() ? hp : getMaxHp();
|
m_hp = hp < getMaxHp() ? hp : getMaxHp();
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \param mp amount to set ( caps to maxMp ) */
|
/*! \param mp amount to set ( caps to maxMp ) */
|
||||||
void Sapphire::Entity::Chara::setMp( uint32_t mp )
|
void Sapphire::Entity::Chara::setMp( uint32_t mp )
|
||||||
{
|
{
|
||||||
m_mp = mp < getMaxMp() ? mp : getMaxMp();
|
m_mp = mp < getMaxMp() ? mp : getMaxMp();
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \param gp amount to set*/
|
/*! \param gp amount to set*/
|
||||||
void Sapphire::Entity::Chara::setGp( uint32_t gp )
|
void Sapphire::Entity::Chara::setGp( uint32_t gp )
|
||||||
{
|
{
|
||||||
m_gp = static_cast< uint16_t >( gp );
|
m_gp = static_cast< uint16_t >( gp );
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \param tp amount to set*/
|
/*! \param tp amount to set*/
|
||||||
void Sapphire::Entity::Chara::setTp( uint32_t tp )
|
void Sapphire::Entity::Chara::setTp( uint32_t tp )
|
||||||
{
|
{
|
||||||
m_tp = static_cast< uint16_t >( tp );
|
m_tp = static_cast< uint16_t >( tp );
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \param type invincibility type to set */
|
/*! \param type invincibility type to set */
|
||||||
|
@ -427,8 +421,6 @@ void Sapphire::Entity::Chara::heal( uint32_t amount )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_hp += amount;
|
m_hp += amount;
|
||||||
|
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Chara::restoreMP( uint32_t amount )
|
void Sapphire::Entity::Chara::restoreMP( uint32_t amount )
|
||||||
|
@ -439,8 +431,6 @@ void Sapphire::Entity::Chara::restoreMP( uint32_t amount )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_mp += amount;
|
m_mp += amount;
|
||||||
|
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -450,10 +440,10 @@ so players can have their own version and we can abolish the param.
|
||||||
|
|
||||||
\param true if the update should also be sent to the actor ( player ) himself
|
\param true if the update should also be sent to the actor ( player ) himself
|
||||||
*/
|
*/
|
||||||
void Sapphire::Entity::Chara::sendStatusUpdate()
|
void Sapphire::Entity::Chara::sendHudParam()
|
||||||
{
|
{
|
||||||
FFXIVPacketBasePtr packet = std::make_shared< UpdateHpMpTpPacket >( *this );
|
FFXIVPacketBasePtr packet = makeHudParam( *this );
|
||||||
server().queueForPlayers( getInRangePlayerIds(), packet );
|
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), packet );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \return ActionPtr of the currently registered action, or nullptr */
|
/*! \return ActionPtr of the currently registered action, or nullptr */
|
||||||
|
|
|
@ -223,7 +223,7 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
virtual uint8_t getLevel() const;
|
virtual uint8_t getLevel() const;
|
||||||
|
|
||||||
virtual void sendStatusUpdate();
|
virtual void sendHudParam();
|
||||||
|
|
||||||
virtual void takeDamage( uint32_t damage );
|
virtual void takeDamage( uint32_t damage );
|
||||||
|
|
||||||
|
|
|
@ -119,8 +119,6 @@ Player::~Player() = default;
|
||||||
|
|
||||||
void Player::unload()
|
void Player::unload()
|
||||||
{
|
{
|
||||||
auto& partyMgr = Common::Service< World::Manager::PartyMgr >::ref();
|
|
||||||
auto& fcMgr = Common::Service< World::Manager::FreeCompanyMgr >::ref();
|
|
||||||
// do one last update to db
|
// do one last update to db
|
||||||
updateSql();
|
updateSql();
|
||||||
// reset isLogin and loading sequences just in case
|
// reset isLogin and loading sequences just in case
|
||||||
|
@ -655,10 +653,10 @@ void Player::levelUp()
|
||||||
Service< World::Manager::MapMgr >::ref().updateQuests( *this );
|
Service< World::Manager::MapMgr >::ref().updateQuests( *this );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::sendStatusUpdate()
|
void Player::sendHudParam()
|
||||||
{
|
{
|
||||||
// todo: overrides are funky
|
// todo: overrides are funky
|
||||||
Service< World::Manager::PlayerMgr >::ref().onPlayerHpMpTpChanged( *this );
|
Service< World::Manager::PlayerMgr >::ref().onHudParamChanged( *this );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Player::getLevel() const
|
uint8_t Player::getLevel() const
|
||||||
|
@ -729,7 +727,7 @@ void Player::setClassJob( Common::ClassJob classJob )
|
||||||
|
|
||||||
m_tp = 0;
|
m_tp = 0;
|
||||||
|
|
||||||
Service< World::Manager::PlayerMgr >::ref().onPlayerStatusUpdate( *this );
|
Service< World::Manager::PlayerMgr >::ref().sendStatusUpdate( *this );
|
||||||
Service< World::Manager::PlayerMgr >::ref().onClassChanged( *this );
|
Service< World::Manager::PlayerMgr >::ref().onClassChanged( *this );
|
||||||
Service< World::Manager::MapMgr >::ref().updateQuests( *this );
|
Service< World::Manager::MapMgr >::ref().updateQuests( *this );
|
||||||
}
|
}
|
||||||
|
|
|
@ -581,7 +581,7 @@ namespace Sapphire::Entity
|
||||||
void sendModel();
|
void sendModel();
|
||||||
|
|
||||||
/*! send status update */
|
/*! send status update */
|
||||||
void sendStatusUpdate() override;
|
void sendHudParam() override;
|
||||||
|
|
||||||
/*! send the entire inventory sequence */
|
/*! send the entire inventory sequence */
|
||||||
void sendInventory();
|
void sendInventory();
|
||||||
|
@ -749,7 +749,7 @@ namespace Sapphire::Entity
|
||||||
bool updateContainer( uint16_t storageId, uint16_t slotId, ItemPtr pItem );
|
bool updateContainer( uint16_t storageId, uint16_t slotId, ItemPtr pItem );
|
||||||
|
|
||||||
/*! calculate and return player ilvl based off equipped gear */
|
/*! calculate and return player ilvl based off equipped gear */
|
||||||
uint16_t calculateEquippedGearItemLevel();
|
uint16_t calculateItemLevel();
|
||||||
|
|
||||||
|
|
||||||
/*! calculate bonus stats from gear */
|
/*! calculate bonus stats from gear */
|
||||||
|
@ -1003,6 +1003,7 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
int8_t getFreeQuestSlot();
|
int8_t getFreeQuestSlot();
|
||||||
|
|
||||||
|
bool performResting();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -11,6 +11,7 @@
|
||||||
#include "Action/EventAction.h"
|
#include "Action/EventAction.h"
|
||||||
#include "Manager/PlayerMgr.h"
|
#include "Manager/PlayerMgr.h"
|
||||||
#include "Service.h"
|
#include "Service.h"
|
||||||
|
#include <Network/PacketWrappers/RestingPacket.h>
|
||||||
|
|
||||||
using namespace Sapphire::Common;
|
using namespace Sapphire::Common;
|
||||||
using namespace Sapphire::Network::Packets;
|
using namespace Sapphire::Network::Packets;
|
||||||
|
@ -64,11 +65,18 @@ void Sapphire::Entity::Player::onTick()
|
||||||
// add 3 seconds to total play time
|
// add 3 seconds to total play time
|
||||||
m_playTime += 3;
|
m_playTime += 3;
|
||||||
|
|
||||||
bool sendUpdate = false;
|
|
||||||
|
|
||||||
if( !isAlive() || !isLoadingComplete() )
|
if( !isAlive() || !isLoadingComplete() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool sendUpdate = performResting();
|
||||||
|
|
||||||
|
if( sendUpdate )
|
||||||
|
server().queueForPlayers( getInRangePlayerIds( true ), std::make_shared< RestingPacket >( *this ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Sapphire::Entity::Player::performResting()
|
||||||
|
{
|
||||||
|
bool sendUpdate = false;
|
||||||
auto addHp = static_cast< uint32_t >( static_cast< float >( getMaxHp() ) * 0.1f + 1 );
|
auto addHp = static_cast< uint32_t >( static_cast< float >( getMaxHp() ) * 0.1f + 1 );
|
||||||
auto addMp = static_cast< uint32_t >( static_cast< float >( getMaxMp() ) * 0.06f + 1 );
|
auto addMp = static_cast< uint32_t >( static_cast< float >( getMaxMp() ) * 0.06f + 1 );
|
||||||
uint32_t addTp = 100;
|
uint32_t addTp = 100;
|
||||||
|
@ -111,7 +119,5 @@ void Sapphire::Entity::Player::onTick()
|
||||||
|
|
||||||
sendUpdate = true;
|
sendUpdate = true;
|
||||||
}
|
}
|
||||||
|
return sendUpdate;
|
||||||
if( sendUpdate )
|
|
||||||
sendStatusUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,13 +99,12 @@ void Sapphire::Entity::Player::initInventory()
|
||||||
setupContainer( HandIn, 10, "", true, false );
|
setupContainer( HandIn, 10, "", true, false );
|
||||||
|
|
||||||
loadInventory();
|
loadInventory();
|
||||||
|
calculateItemLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::sendItemLevel()
|
void Sapphire::Entity::Player::sendItemLevel()
|
||||||
{
|
{
|
||||||
calculateEquippedGearItemLevel();
|
Service< World::Manager::PlayerMgr >::ref().sendItemLevel( *this );
|
||||||
Service< World::Manager::PlayerMgr >::ref().onPlayerItemLevelUpdate( *this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::equipWeapon( const Item& item )
|
void Sapphire::Entity::Player::equipWeapon( const Item& item )
|
||||||
|
@ -227,12 +226,13 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item&
|
||||||
updateModels( equipSlotId, item );
|
updateModels( equipSlotId, item );
|
||||||
|
|
||||||
calculateStats();
|
calculateStats();
|
||||||
|
calculateItemLevel();
|
||||||
if( sendUpdate )
|
if( sendUpdate )
|
||||||
{
|
{
|
||||||
sendModel();
|
sendModel();
|
||||||
sendItemLevel();
|
sendItemLevel();
|
||||||
sendStats();
|
sendStats();
|
||||||
sendStatusUpdate();
|
sendHudParam();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,13 +247,14 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite
|
||||||
unequipSoulCrystal();
|
unequipSoulCrystal();
|
||||||
|
|
||||||
calculateStats();
|
calculateStats();
|
||||||
|
calculateItemLevel();
|
||||||
|
|
||||||
if( sendUpdate )
|
if( sendUpdate )
|
||||||
{
|
{
|
||||||
sendModel();
|
sendModel();
|
||||||
sendItemLevel();
|
sendItemLevel();
|
||||||
sendStats();
|
sendStats();
|
||||||
sendStatusUpdate();
|
sendHudParam();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,7 +992,7 @@ void Sapphire::Entity::Player::discardItem( uint16_t fromInventoryId, uint16_t f
|
||||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Sapphire::Entity::Player::calculateEquippedGearItemLevel()
|
uint16_t Sapphire::Entity::Player::calculateItemLevel()
|
||||||
{
|
{
|
||||||
uint32_t iLvlResult = 0;
|
uint32_t iLvlResult = 0;
|
||||||
|
|
||||||
|
|
|
@ -142,8 +142,6 @@ namespace Sapphire
|
||||||
void addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout );
|
void addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout );
|
||||||
void removeMember( uint64_t memberId );
|
void removeMember( uint64_t memberId );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -38,20 +38,9 @@ namespace Sapphire::World::Manager
|
||||||
|
|
||||||
void addMember( uint64_t fcId, uint64_t memberId );
|
void addMember( uint64_t fcId, uint64_t memberId );
|
||||||
|
|
||||||
//void sendFreeCompanyResult( Entity::Player& player, uint64_t fcId, ResultType resultType, uint64_t target,
|
|
||||||
// uint32_t result, UpdateStatus updateStatus, std::string targetName );
|
|
||||||
|
|
||||||
void sendFcInviteList( Entity::Player& player );
|
void sendFcInviteList( Entity::Player& player );
|
||||||
void sendFcStatus( Entity::Player& player );
|
void sendFcStatus( Entity::Player& player );
|
||||||
|
|
||||||
/* void invitePlayer( Entity::Player& sourcePlayer, Entity::Player& invitedPlayer, uint64_t linkshellId );
|
|
||||||
void kickPlayer( Entity::Player& sourcePlayer, Entity::Player& kickedPlayer, uint64_t linkshellId );
|
|
||||||
|
|
||||||
void addLeader( Entity::Player& sourcePlayer, Entity::Player& newLeaderPlayer, uint64_t linkshellId );
|
|
||||||
void removeLeader( Entity::Player& sourcePlayer, Entity::Player& leaderPlayer, uint64_t linkshellId );
|
|
||||||
void declineLeader( Entity::Player& sourcePlayer, uint64_t linkshellId );
|
|
||||||
void changeMaster( Entity::Player& sourcePlayer, Entity::Player& nextMasterPlayer, uint64_t linkshellId ); */
|
|
||||||
|
|
||||||
void sendFreeCompanyStatus( Entity::Player& player );
|
void sendFreeCompanyStatus( Entity::Player& player );
|
||||||
|
|
||||||
void dbInsertMember( uint64_t fcId, uint64_t characterId, uint8_t hierarchyId );
|
void dbInsertMember( uint64_t fcId, uint64_t characterId, uint8_t hierarchyId );
|
||||||
|
@ -65,9 +54,6 @@ namespace Sapphire::World::Manager
|
||||||
FreeCompanyPtr getFreeCompanyById( uint64_t fcId );
|
FreeCompanyPtr getFreeCompanyById( uint64_t fcId );
|
||||||
FreeCompanyPtr getFreeCompanyByName( const std::string& name );
|
FreeCompanyPtr getFreeCompanyByName( const std::string& name );
|
||||||
|
|
||||||
// void leaveLinkshell( uint64_t lsId, uint64_t characterId );
|
|
||||||
// void joinLinkshell( uint64_t lsId, uint64_t characterId );
|
|
||||||
|
|
||||||
void onFcLogin( uint64_t characterId );
|
void onFcLogin( uint64_t characterId );
|
||||||
void onFcLogout( uint64_t characterId );
|
void onFcLogout( uint64_t characterId );
|
||||||
void onSignPetition( Entity::Player& source, Entity::Player& target );
|
void onSignPetition( Entity::Player& source, Entity::Player& target );
|
||||||
|
|
|
@ -4,21 +4,17 @@
|
||||||
|
|
||||||
#include <Exd/ExdData.h>
|
#include <Exd/ExdData.h>
|
||||||
|
|
||||||
#include <Territory/Territory.h>
|
|
||||||
#include <Territory/Land.h>
|
#include <Territory/Land.h>
|
||||||
|
|
||||||
#include <Manager/TerritoryMgr.h>
|
#include <Manager/TerritoryMgr.h>
|
||||||
#include <Manager/AchievementMgr.h>
|
#include <Manager/AchievementMgr.h>
|
||||||
#include <Manager/PartyMgr.h>
|
#include <Manager/PartyMgr.h>
|
||||||
#include <Manager/HousingMgr.h>
|
#include <Manager/HousingMgr.h>
|
||||||
#include <Manager/FreeCompanyMgr.h>
|
|
||||||
#include <Manager/QuestMgr.h>
|
#include <Manager/QuestMgr.h>
|
||||||
|
|
||||||
#include <Script/ScriptMgr.h>
|
#include <Script/ScriptMgr.h>
|
||||||
#include <WorldServer.h>
|
|
||||||
#include <Common.h>
|
#include <Common.h>
|
||||||
|
|
||||||
#include <Network/PacketContainer.h>
|
|
||||||
#include <Network/GameConnection.h>
|
#include <Network/GameConnection.h>
|
||||||
#include <Network/CommonActorControl.h>
|
#include <Network/CommonActorControl.h>
|
||||||
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
||||||
|
@ -29,7 +25,7 @@
|
||||||
#include <Network/PacketWrappers/ModelEquipPacket.h>
|
#include <Network/PacketWrappers/ModelEquipPacket.h>
|
||||||
#include <Network/PacketWrappers/PlayerSetupPacket.h>
|
#include <Network/PacketWrappers/PlayerSetupPacket.h>
|
||||||
#include <Network/PacketWrappers/ConditionPacket.h>
|
#include <Network/PacketWrappers/ConditionPacket.h>
|
||||||
#include <Network/PacketWrappers/UpdateHpMpTpPacket.h>
|
#include <Network/PacketWrappers/RestingPacket.h>
|
||||||
#include <Network/PacketWrappers/ServerNoticePacket.h>
|
#include <Network/PacketWrappers/ServerNoticePacket.h>
|
||||||
#include <Network/PacketWrappers/ChatPacket.h>
|
#include <Network/PacketWrappers/ChatPacket.h>
|
||||||
#include <Network/PacketWrappers/HudParamPacket.h>
|
#include <Network/PacketWrappers/HudParamPacket.h>
|
||||||
|
@ -145,7 +141,7 @@ void PlayerMgr::onStatsChanged( Entity::Player& player )
|
||||||
server().queueForPlayer( player.getCharacterId(), statPacket );
|
server().queueForPlayer( player.getCharacterId(), statPacket );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onPlayerStatusUpdate( Entity::Player& player )
|
void PlayerMgr::sendStatusUpdate( Entity::Player& player )
|
||||||
{
|
{
|
||||||
auto playerStatusUpdate = makeZonePacket< FFXIVIpcPlayerStatusUpdate >( player.getId() );
|
auto playerStatusUpdate = makeZonePacket< FFXIVIpcPlayerStatusUpdate >( player.getId() );
|
||||||
playerStatusUpdate->data().ClassJob = static_cast< uint8_t >( player.getClass() );
|
playerStatusUpdate->data().ClassJob = static_cast< uint8_t >( player.getClass() );
|
||||||
|
@ -157,14 +153,18 @@ void PlayerMgr::onPlayerStatusUpdate( Entity::Player& player )
|
||||||
server().queueForPlayer( player.getCharacterId(), playerStatusUpdate );
|
server().queueForPlayer( player.getCharacterId(), playerStatusUpdate );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onPlayerHpMpTpChanged( Entity::Player& player )
|
void PlayerMgr::onHudParamChanged( Entity::Player& player )
|
||||||
{
|
{
|
||||||
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< UpdateHpMpTpPacket >( player ) );
|
|
||||||
auto hudParamPacket = makeHudParam( player );
|
auto hudParamPacket = makeHudParam( player );
|
||||||
server().queueForPlayer( player.getCharacterId(), hudParamPacket );
|
server().queueForPlayer( player.getCharacterId(), hudParamPacket );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onPlayerItemLevelUpdate( Entity::Player& player )
|
void PlayerMgr::onRestingTick( Entity::Player& player )
|
||||||
|
{
|
||||||
|
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< RestingPacket >( player ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerMgr::sendItemLevel( Entity::Player& player )
|
||||||
{
|
{
|
||||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), SetItemLevel, player.getItemLevel(), 0 ) );
|
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), SetItemLevel, player.getItemLevel(), 0 ) );
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ void PlayerMgr::onLevelUp( Entity::Player& player )
|
||||||
{
|
{
|
||||||
player.calculateStats();
|
player.calculateStats();
|
||||||
player.sendStats();
|
player.sendStats();
|
||||||
onPlayerHpMpTpChanged( player );
|
player.sendHudParam();
|
||||||
|
|
||||||
auto inRangePlayerIds = player.getInRangePlayerIds( true );
|
auto inRangePlayerIds = player.getInRangePlayerIds( true );
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ void PlayerMgr::onLevelUp( Entity::Player& player )
|
||||||
server().queueForPlayers( inRangePlayerIds, makeActorControl( player.getId(), LevelUpEffect, static_cast< uint8_t >( player.getClass() ),
|
server().queueForPlayers( inRangePlayerIds, makeActorControl( player.getId(), LevelUpEffect, static_cast< uint8_t >( player.getClass() ),
|
||||||
player.getLevel(), player.getLevel() - 1 ) );
|
player.getLevel(), player.getLevel() - 1 ) );
|
||||||
|
|
||||||
onPlayerStatusUpdate( player );
|
sendStatusUpdate( player );
|
||||||
|
|
||||||
auto& achvMgr = Common::Service< World::Manager::AchievementMgr >::ref();
|
auto& achvMgr = Common::Service< World::Manager::AchievementMgr >::ref();
|
||||||
achvMgr.progressAchievementByType< Common::Achievement::Type::Classjob >( player, static_cast< uint32_t >( player.getClass() ) );
|
achvMgr.progressAchievementByType< Common::Achievement::Type::Classjob >( player, static_cast< uint32_t >( player.getClass() ) );
|
||||||
|
@ -221,7 +221,7 @@ void PlayerMgr::onGearChanged( Entity::Player& player )
|
||||||
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< ModelEquipPacket >( player ) );
|
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< ModelEquipPacket >( player ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onGrandCompanyChanged( Entity::Player& player )
|
void PlayerMgr::sendGrandCompany( Entity::Player& player )
|
||||||
{
|
{
|
||||||
auto gcAffPacket = makeZonePacket< FFXIVIpcGrandCompany >( player.getId() );
|
auto gcAffPacket = makeZonePacket< FFXIVIpcGrandCompany >( player.getId() );
|
||||||
gcAffPacket->data().ActiveCompanyId = player.getGc();
|
gcAffPacket->data().ActiveCompanyId = player.getGc();
|
||||||
|
@ -235,15 +235,13 @@ void PlayerMgr::onGrandCompanyChanged( Entity::Player& player )
|
||||||
void PlayerMgr::setGrandCompany( Entity::Player& player, uint8_t gc )
|
void PlayerMgr::setGrandCompany( Entity::Player& player, uint8_t gc )
|
||||||
{
|
{
|
||||||
player.setGc( gc );
|
player.setGc( gc );
|
||||||
|
sendGrandCompany( player );
|
||||||
onGrandCompanyChanged( player );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::setGrandCompanyRank( Entity::Player& player, uint8_t gc, uint8_t rank )
|
void PlayerMgr::setGrandCompanyRank( Entity::Player& player, uint8_t gc, uint8_t rank )
|
||||||
{
|
{
|
||||||
player.setGcRankAt( gc, rank );
|
player.setGcRankAt( gc, rank );
|
||||||
|
sendGrandCompany( player );
|
||||||
onGrandCompanyChanged( player );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onCompanionUpdate( Entity::Player& player, uint8_t companionId )
|
void PlayerMgr::onCompanionUpdate( Entity::Player& player, uint8_t companionId )
|
||||||
|
@ -334,7 +332,7 @@ void PlayerMgr::onHateListChanged( Entity::Player& player )
|
||||||
void PlayerMgr::onClassChanged( Entity::Player& player )
|
void PlayerMgr::onClassChanged( Entity::Player& player )
|
||||||
{
|
{
|
||||||
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), ClassJobChange, 0x04 ) );
|
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), ClassJobChange, 0x04 ) );
|
||||||
onPlayerHpMpTpChanged( player );
|
onHudParamChanged( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::sendLoginMessage( Entity::Player& player )
|
void PlayerMgr::sendLoginMessage( Entity::Player& player )
|
||||||
|
@ -351,14 +349,10 @@ void PlayerMgr::sendLoginMessage( Entity::Player& player )
|
||||||
|
|
||||||
void PlayerMgr::onLogin( Entity::Player &player )
|
void PlayerMgr::onLogin( Entity::Player &player )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onLogout( Entity::Player &player )
|
void PlayerMgr::onLogout( Entity::Player &player )
|
||||||
{
|
{
|
||||||
auto& partyMgr = Common::Service< World::Manager::PartyMgr >::ref();
|
|
||||||
// send updates to mgrs
|
|
||||||
partyMgr.onMemberDisconnect( player );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::onDeath( Entity::Player& player )
|
void PlayerMgr::onDeath( Entity::Player& player )
|
||||||
|
@ -405,7 +399,7 @@ void PlayerMgr::onMoveZone( Sapphire::Entity::Player& player )
|
||||||
|
|
||||||
player.sendRecastGroups();
|
player.sendRecastGroups();
|
||||||
player.sendStats();
|
player.sendStats();
|
||||||
player.sendItemLevel();
|
sendItemLevel( player );
|
||||||
if( player.isLogin() )
|
if( player.isLogin() )
|
||||||
{
|
{
|
||||||
auto classInfo = makeZonePacket< FFXIVIpcChangeClass >( player.getId() );
|
auto classInfo = makeZonePacket< FFXIVIpcChangeClass >( player.getId() );
|
||||||
|
@ -455,7 +449,7 @@ void PlayerMgr::onMoveZone( Sapphire::Entity::Player& player )
|
||||||
|
|
||||||
auto &questMgr = Common::Service< World::Manager::QuestMgr >::ref();
|
auto &questMgr = Common::Service< World::Manager::QuestMgr >::ref();
|
||||||
questMgr.sendQuestsInfo( player );
|
questMgr.sendQuestsInfo( player );
|
||||||
onGrandCompanyChanged( player );
|
sendGrandCompany( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -471,15 +465,14 @@ void PlayerMgr::onUpdate( Entity::Player& player, uint64_t tickCount )
|
||||||
if( !player.isAlive() )
|
if( !player.isAlive() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( !player.checkAction() && ( player.getTargetId() && player.getStance() == Common::Stance::Active && player.isAutoattackOn() ) )
|
|
||||||
{
|
|
||||||
auto mainWeap = player.getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
|
auto mainWeap = player.getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
|
||||||
|
if( mainWeap && !player.checkAction() && ( player.getTargetId() && player.getStance() == Common::Stance::Active && player.isAutoattackOn() ) )
|
||||||
|
{
|
||||||
// @TODO i dislike this, iterating over all in range actors when you already know the id of the actor you need...
|
// @TODO i dislike this, iterating over all in range actors when you already know the id of the actor you need...
|
||||||
for( const auto& actor : player.getInRangeActors() )
|
for( const auto& actor : player.getInRangeActors() )
|
||||||
{
|
{
|
||||||
if( actor->getId() == player.getTargetId() && actor->getAsChara()->isAlive() && mainWeap )
|
if( actor->getId() != player.getTargetId() || !actor->getAsChara()->isAlive() )
|
||||||
{
|
continue;
|
||||||
auto chara = actor->getAsChara();
|
auto chara = actor->getAsChara();
|
||||||
|
|
||||||
// default autoattack range
|
// default autoattack range
|
||||||
|
@ -502,7 +495,6 @@ void PlayerMgr::onUpdate( Entity::Player& player, uint64_t tickCount )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void PlayerMgr::setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag )
|
void PlayerMgr::setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag )
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,13 +15,15 @@ namespace Sapphire::World::Manager
|
||||||
|
|
||||||
void onEquipDisplayFlagsChanged( Sapphire::Entity::Player& player );
|
void onEquipDisplayFlagsChanged( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
void onPlayerStatusUpdate( Sapphire::Entity::Player& player );
|
void sendStatusUpdate( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
void onUnlockAchievement( Sapphire::Entity::Player& player, uint32_t achievementId );
|
void onUnlockAchievement( Sapphire::Entity::Player& player, uint32_t achievementId );
|
||||||
|
|
||||||
void onPlayerHpMpTpChanged( Sapphire::Entity::Player& player );
|
void onHudParamChanged( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
void onPlayerItemLevelUpdate( Sapphire::Entity::Player& player );
|
void onRestingTick( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
|
void sendItemLevel( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
void onLevelUp( Sapphire::Entity::Player& player );
|
void onLevelUp( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
|
@ -53,7 +55,7 @@ namespace Sapphire::World::Manager
|
||||||
void onAchievementListChanged( Sapphire::Entity::Player& player );
|
void onAchievementListChanged( Sapphire::Entity::Player& player );
|
||||||
void onAchievementProgressChanged( Sapphire::Entity::Player& player, uint32_t achievementId );
|
void onAchievementProgressChanged( Sapphire::Entity::Player& player, uint32_t achievementId );
|
||||||
void onGearChanged( Sapphire::Entity::Player& player );
|
void onGearChanged( Sapphire::Entity::Player& player );
|
||||||
void onGrandCompanyChanged( Sapphire::Entity::Player& player );
|
void sendGrandCompany( Sapphire::Entity::Player& player );
|
||||||
void onClassChanged( Sapphire::Entity::Player& player );
|
void onClassChanged( Sapphire::Entity::Player& player );
|
||||||
|
|
||||||
void setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag );
|
void setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag );
|
||||||
|
|
|
@ -16,33 +16,29 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
||||||
class HudParamPacket : public ZoneChannelPacket< FFXIVIpcHudParam >
|
class HudParamPacket : public ZoneChannelPacket< FFXIVIpcHudParam >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HudParamPacket( Entity::Player& player ) : ZoneChannelPacket< FFXIVIpcHudParam >( player.getId(), player.getId() )
|
|
||||||
{
|
|
||||||
initialize( player );
|
|
||||||
};
|
|
||||||
|
|
||||||
HudParamPacket( Entity::BNpc& bnpc ) : ZoneChannelPacket< FFXIVIpcHudParam >( bnpc.getId(), bnpc.getId() )
|
HudParamPacket( Entity::Chara& chara ) : ZoneChannelPacket< FFXIVIpcHudParam >( chara.getId(), chara.getId() )
|
||||||
{
|
{
|
||||||
initialize( bnpc );
|
initialize( chara );
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initialize( Entity::Player& player )
|
void initialize( Entity::Chara& chara )
|
||||||
{
|
{
|
||||||
m_data.ClassJob = static_cast< uint8_t >( player.getClass() );
|
m_data.ClassJob = static_cast< uint8_t >( chara.getClass() );
|
||||||
m_data.Lv = player.getLevel();
|
m_data.Lv = chara.getLevel();
|
||||||
m_data.OrgLv = player.getLevel();
|
m_data.OrgLv = chara.getLevel();
|
||||||
m_data.LvSync = 0; //player.getLevelSync();
|
m_data.LvSync = 0; //player.getLevelSync();
|
||||||
m_data.Hp = player.getHp();
|
m_data.Hp = chara.getHp();
|
||||||
m_data.Mp = player.getMp();
|
m_data.Mp = chara.getMp();
|
||||||
m_data.Tp = player.getTp();
|
m_data.Tp = chara.getTp();
|
||||||
m_data.HpMax = player.getMaxHp();
|
m_data.HpMax = chara.getMaxHp();
|
||||||
m_data.MpMax = player.getMaxMp();
|
m_data.MpMax = chara.getMaxMp();
|
||||||
|
|
||||||
for( int i = 0; i < 30; ++i )
|
for( int i = 0; i < 30; ++i )
|
||||||
m_data.effect[ i ] = { 0, 0, 0.0f, 0 };
|
m_data.effect[ i ] = { 0, 0, 0.0f, 0 };
|
||||||
|
|
||||||
auto statusMap = player.getStatusEffectMap();
|
auto statusMap = chara.getStatusEffectMap();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for( const auto& [ key, val ] : statusMap )
|
for( const auto& [ key, val ] : statusMap )
|
||||||
|
@ -59,38 +55,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void initialize( Entity::BNpc& bnpc )
|
|
||||||
{
|
|
||||||
m_data.ClassJob = static_cast< uint8_t >( bnpc.getClass() );
|
|
||||||
m_data.Lv = bnpc.getLevel();
|
|
||||||
m_data.OrgLv = bnpc.getLevel();
|
|
||||||
m_data.LvSync = 0;
|
|
||||||
m_data.Hp = bnpc.getHp();
|
|
||||||
m_data.Mp = bnpc.getMp();
|
|
||||||
m_data.Tp = bnpc.getTp();
|
|
||||||
m_data.HpMax = bnpc.getMaxHp();
|
|
||||||
m_data.MpMax = bnpc.getMaxMp();
|
|
||||||
|
|
||||||
for( int i = 0; i < 30; ++i )
|
|
||||||
m_data.effect[ i ] = { 0, 0, 0.0f, 0 };
|
|
||||||
|
|
||||||
auto statusMap = bnpc.getStatusEffectMap();
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
for( const auto& [ key, val ] : statusMap )
|
|
||||||
{
|
|
||||||
auto timeLeft = static_cast< int32_t >( val->getDuration() - ( Common::Util::getTimeMs() - val->getStartTimeMs() ) );
|
|
||||||
m_data.effect[ i ].Id = val->getId();
|
|
||||||
m_data.effect[ i ].Source = val->getSrcActorId();
|
|
||||||
m_data.effect[ i ].SystemParam = val->getParam();
|
|
||||||
if( timeLeft <= 0 )
|
|
||||||
m_data.effect[ i ].Time = 0.f;
|
|
||||||
else
|
|
||||||
m_data.effect[ i ].Time = timeLeft / 1000.f;
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
template< typename... Args >
|
template< typename... Args >
|
||||||
std::shared_ptr< HudParamPacket > makeHudParam( Args... args )
|
std::shared_ptr< HudParamPacket > makeHudParam( Args... args )
|
||||||
|
|
|
@ -12,10 +12,10 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
||||||
/**
|
/**
|
||||||
* @brief The Ping response packet.
|
* @brief The Ping response packet.
|
||||||
*/
|
*/
|
||||||
class UpdateHpMpTpPacket : public ZoneChannelPacket< FFXIVIpcResting >
|
class RestingPacket : public ZoneChannelPacket< FFXIVIpcResting >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UpdateHpMpTpPacket( Entity::Chara& actor ) : ZoneChannelPacket< FFXIVIpcResting >( actor.getId(), actor.getId() )
|
RestingPacket( Entity::Chara& actor ) : ZoneChannelPacket< FFXIVIpcResting >( actor.getId(), actor.getId() )
|
||||||
{
|
{
|
||||||
initialize( actor );
|
initialize( actor );
|
||||||
};
|
};
|
|
@ -10,6 +10,7 @@
|
||||||
#include "WorldServer.h"
|
#include "WorldServer.h"
|
||||||
#include "Manager/PlayerMgr.h"
|
#include "Manager/PlayerMgr.h"
|
||||||
#include "Manager/FreeCompanyMgr.h"
|
#include "Manager/FreeCompanyMgr.h"
|
||||||
|
#include "Manager/PartyMgr.h"
|
||||||
|
|
||||||
#include "Session.h"
|
#include "Session.h"
|
||||||
|
|
||||||
|
@ -80,8 +81,10 @@ void Sapphire::World::Session::close()
|
||||||
{
|
{
|
||||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||||
auto& fcMgr = Common::Service< World::Manager::FreeCompanyMgr >::ref();
|
auto& fcMgr = Common::Service< World::Manager::FreeCompanyMgr >::ref();
|
||||||
|
auto& partyMgr = Common::Service< World::Manager::PartyMgr >::ref();
|
||||||
playerMgr.onLogout( *m_pPlayer );
|
playerMgr.onLogout( *m_pPlayer );
|
||||||
fcMgr.onFcLogout( m_pPlayer->getCharacterId() );
|
fcMgr.onFcLogout( m_pPlayer->getCharacterId() );
|
||||||
|
partyMgr.onMemberDisconnect( *m_pPlayer );
|
||||||
m_pPlayer->unload();
|
m_pPlayer->unload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue