diff --git a/bin/web/news.xml b/bin/web/news.xml index 89da9b09..77178c9f 100644 --- a/bin/web/news.xml +++ b/bin/web/news.xml @@ -1 +1 @@ -OKIt works14854473281485447484133a2a9464b7a1e1cb77ed6899fc8e813b273d294This is a Sapphire Test topic.58342Test Inquiry1111 \ No newline at end of file +OKIt works14854473281485447484133a2a9464b7a1e1cb77ed6899fc8e813b273d294This is a Sapphire Test topic.58342Test Inquiry1111 \ No newline at end of file diff --git a/src/servers/Server_Zone/Actor/Actor.cpp b/src/servers/Server_Zone/Actor/Actor.cpp index d0b76564..bee3163e 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 ); -} \ No newline at end of file +} + +Core::StatusEffect::StatusEffectContainerPtr Core::Entity::Actor::getStatusEffectContainer() const +{ + return m_pStatusEffectContainer; +} diff --git a/src/servers/Server_Zone/Actor/Actor.h b/src/servers/Server_Zone/Actor/Actor.h index aab602be..125194e4 100644 --- a/src/servers/Server_Zone/Actor/Actor.h +++ b/src/servers/Server_Zone/Actor/Actor.h @@ -301,6 +301,8 @@ public: // remove a status effect by id void removeSingleStatusEffectFromId( int32_t id ); + 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/ActorSpawnPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/ActorSpawnPacket.h index 9b076474..89c56860 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/ActorSpawnPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/ActorSpawnPacket.h @@ -5,6 +5,8 @@ #include #include "src/servers/Server_Zone/Actor/Player.h" #include "src/servers/Server_Zone/Forwards.h" +#include "src/servers/Server_Zone/StatusEffect/StatusEffectContainer.h" +#include "src/servers/Server_Zone/StatusEffect/StatusEffect.h" namespace Core { namespace Network { diff --git a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h index dbdbadec..91fac73d 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -93,6 +93,16 @@ 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..e0d891e5 100644 --- a/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp +++ b/src/servers/Server_Zone/StatusEffect/StatusEffectContainer.cpp @@ -40,6 +40,11 @@ void Core::StatusEffect::StatusEffectContainer::freeSlot( uint8_t slotId ) m_freeEffectSlotQueue.push( slotId ); } +std::map< uint8_t, Core::StatusEffect::StatusEffectPtr > Core::StatusEffect::StatusEffectContainer::getEffectMap() const +{ + return m_effectMap; +} + Core::StatusEffect::StatusEffectContainer::~StatusEffectContainer() { 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; };