From 1b49a53afc63b42a7c010dbe2bbd8aac37119d28 Mon Sep 17 00:00:00 2001 From: amibu Date: Wed, 6 Sep 2017 20:25:58 +0200 Subject: [PATCH] Make players spawn with StatusEffects --- src/servers/Server_Zone/Actor/Actor.cpp | 5 +++++ src/servers/Server_Zone/Actor/Actor.h | 3 +++ .../Network/PacketWrappers/PlayerSpawnPacket.h | 11 +++++++++++ .../StatusEffect/StatusEffectContainer.cpp | 5 +++++ .../Server_Zone/StatusEffect/StatusEffectContainer.h | 3 ++- 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/servers/Server_Zone/Actor/Actor.cpp b/src/servers/Server_Zone/Actor/Actor.cpp index d0b76564..65053d30 100644 --- a/src/servers/Server_Zone/Actor/Actor.cpp +++ b/src/servers/Server_Zone/Actor/Actor.cpp @@ -649,4 +649,9 @@ void Core::Entity::Actor::addStatusEffectByIdIfNotExist( int32_t id, int32_t dur void Core::Entity::Actor::removeSingleStatusEffectFromId( int32_t id ) { m_pStatusEffectContainer->removeSingleStatusEffectFromId( id ); +} + +Core::StatusEffect::StatusEffectContainerPtr Core::Entity::Actor::getStatusEffectContainer() const +{ + return m_pStatusEffectContainer; } \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Actor.h b/src/servers/Server_Zone/Actor/Actor.h index aab602be..e975d9a3 100644 --- a/src/servers/Server_Zone/Actor/Actor.h +++ b/src/servers/Server_Zone/Actor/Actor.h @@ -301,6 +301,9 @@ public: // remove a status effect by id void removeSingleStatusEffectFromId( int32_t id ); + //get the status effect container + StatusEffect::StatusEffectContainerPtr getStatusEffectContainer() const; + // TODO: Why did i even declare them publicly here?! std::set< ActorPtr > m_inRangeActors; std::set< PlayerPtr > m_inRangePlayers; diff --git a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h index dbdbadec..d4e726a0 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -8,6 +8,8 @@ #include "src/servers/Server_Zone/Forwards.h" #include "src/servers/Server_Zone/Inventory/Inventory.h" #include "src/servers/Server_Zone/Inventory/Item.h" +#include "src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h" +#include "src/servers/Server_Zone/StatusEffect/StatusEffect.h" namespace Core { namespace Network { @@ -93,6 +95,15 @@ namespace Server { //m_data.unknown_60 = 3; //m_data.unknown_61 = 7; + uint64_t currentTimeMs = Util::getTimeMs(); + + for( auto const& effect : pPlayer->getStatusEffectContainer()->getEffectMap() ) + { + m_data.effect[effect.first].effect_id = effect.second->getId(); + m_data.effect[effect.first].duration = static_cast< float >( effect.second->getDuration() - ( currentTimeMs - effect.second->getStartTimeMs() ) ) / 1000; + m_data.effect[effect.first].sourceActorId = effect.second->getSrcActorId(); + m_data.effect[effect.first].unknown1 = effect.second->getParam(); + } }; }; diff --git a/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp b/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp index 77d43b5f..9e2e1e74 100644 --- a/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp +++ b/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp @@ -107,6 +107,11 @@ void Core::StatusEffect::StatusEffectContainer::removeStatusEffect( uint8_t effe sendUpdate(); } +std::map< uint8_t, Core::StatusEffect::StatusEffectPtr > Core::StatusEffect::StatusEffectContainer::getEffectMap() const +{ + return m_effectMap; +} + void Core::StatusEffect::StatusEffectContainer::sendUpdate() { uint64_t currentTimeMs = Util::getTimeMs(); diff --git a/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h b/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h index a6f2a01c..22a43aae 100644 --- a/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h +++ b/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h @@ -29,6 +29,8 @@ public: int8_t getFreeSlot(); void freeSlot( uint8_t slotId ); + std::map< uint8_t, Core::StatusEffect::StatusEffectPtr > getEffectMap() const; + void sendUpdate(); @@ -38,7 +40,6 @@ private: Entity::ActorPtr m_pOwner; std::queue< uint8_t > m_freeEffectSlotQueue; - std::vector< StatusEffectPtr > m_effectList; std::vector< std::pair< uint8_t, uint32_t> > m_tickEffectList; std::map< uint8_t, StatusEffectPtr > m_effectMap; };