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 @@
-OK- It works14854473281485447484133a2a9464b7a1e1cb77ed6899fc8e813b273d294This is a Sapphire Test topic.
58342- Test Inquiry1111
\ No newline at end of file
+OK- It works14854473281485447484133a2a9464b7a1e1cb77ed6899fc8e813b273d294This is a Sapphire Test topic.
58342- Test Inquiry1111
\ No newline at end of file
diff --git a/sql/charastatus.sql b/sql/charastatus.sql
new file mode 100644
index 00000000..231b9319
--- /dev/null
+++ b/sql/charastatus.sql
@@ -0,0 +1,126 @@
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+DROP TABLE IF EXISTS `charastatus`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `charastatus` (
+ `Recast_0` binary(24) DEFAULT NULL,
+ `Recast_1` binary(24) DEFAULT NULL,
+ `Recast_2` binary(24) DEFAULT NULL,
+ `Recast_3` binary(24) DEFAULT NULL,
+ `Recast_4` binary(24) DEFAULT NULL,
+ `Recast_5` binary(24) DEFAULT NULL,
+ `Recast_6` binary(24) DEFAULT NULL,
+ `Recast_7` binary(24) DEFAULT NULL,
+ `Recast_8` binary(24) DEFAULT NULL,
+ `Recast_9` binary(24) DEFAULT NULL,
+ `Recast_10` binary(24) DEFAULT NULL,
+ `Recast_11` binary(24) DEFAULT NULL,
+ `Recast_12` binary(24) DEFAULT NULL,
+ `Recast_13` binary(24) DEFAULT NULL,
+ `Recast_14` binary(24) DEFAULT NULL,
+ `Recast_15` binary(24) DEFAULT NULL,
+ `Recast_16` binary(24) DEFAULT NULL,
+ `Recast_17` binary(24) DEFAULT NULL,
+ `Recast_18` binary(24) DEFAULT NULL,
+ `Recast_19` binary(24) DEFAULT NULL,
+ `Recast_20` binary(24) DEFAULT NULL,
+ `Recast_21` binary(24) DEFAULT NULL,
+ `Recast_22` binary(24) DEFAULT NULL,
+ `Recast_23` binary(24) DEFAULT NULL,
+ `Recast_24` binary(24) DEFAULT NULL,
+ `Recast_25` binary(24) DEFAULT NULL,
+ `Recast_26` binary(24) DEFAULT NULL,
+ `Recast_27` binary(24) DEFAULT NULL,
+ `Recast_28` binary(24) DEFAULT NULL,
+ `Recast_29` binary(24) DEFAULT NULL,
+ `Recast_30` binary(24) DEFAULT NULL,
+ `Recast_31` binary(24) DEFAULT NULL,
+ `Recast_32` binary(24) DEFAULT NULL,
+ `Recast_33` binary(24) DEFAULT NULL,
+ `Recast_34` binary(24) DEFAULT NULL,
+ `Recast_35` binary(24) DEFAULT NULL,
+ `Recast_36` binary(24) DEFAULT NULL,
+ `Recast_37` binary(24) DEFAULT NULL,
+ `Recast_38` binary(24) DEFAULT NULL,
+ `Recast_39` binary(24) DEFAULT NULL,
+ `Recast_40` binary(24) DEFAULT NULL,
+ `Recast_41` binary(24) DEFAULT NULL,
+ `Recast_42` binary(24) DEFAULT NULL,
+ `Recast_43` binary(24) DEFAULT NULL,
+ `Recast_44` binary(24) DEFAULT NULL,
+ `Recast_45` binary(24) DEFAULT NULL,
+ `Recast_46` binary(24) DEFAULT NULL,
+ `Recast_47` binary(24) DEFAULT NULL,
+ `Recast_48` binary(24) DEFAULT NULL,
+ `Recast_49` binary(24) DEFAULT NULL,
+ `Recast_50` binary(24) DEFAULT NULL,
+ `Recast_51` binary(24) DEFAULT NULL,
+ `Recast_52` binary(24) DEFAULT NULL,
+ `Recast_53` binary(24) DEFAULT NULL,
+ `Status_0` binary(78) DEFAULT NULL,
+ `Status_1` binary(78) DEFAULT NULL,
+ `Status_2` binary(78) DEFAULT NULL,
+ `Status_3` binary(78) DEFAULT NULL,
+ `Status_4` binary(78) DEFAULT NULL,
+ `Status_5` binary(78) DEFAULT NULL,
+ `Status_6` binary(78) DEFAULT NULL,
+ `Status_7` binary(78) DEFAULT NULL,
+ `Status_8` binary(78) DEFAULT NULL,
+ `Status_9` binary(78) DEFAULT NULL,
+ `Status_10` binary(78) DEFAULT NULL,
+ `Status_11` binary(78) DEFAULT NULL,
+ `Status_12` binary(78) DEFAULT NULL,
+ `Status_13` binary(78) DEFAULT NULL,
+ `Status_14` binary(78) DEFAULT NULL,
+ `Status_15` binary(78) DEFAULT NULL,
+ `Status_16` binary(78) DEFAULT NULL,
+ `Status_17` binary(78) DEFAULT NULL,
+ `Status_18` binary(78) DEFAULT NULL,
+ `Status_19` binary(78) DEFAULT NULL,
+ `Status_20` binary(78) DEFAULT NULL,
+ `Status_21` binary(78) DEFAULT NULL,
+ `Status_22` binary(78) DEFAULT NULL,
+ `Status_23` binary(78) DEFAULT NULL,
+ `Status_24` binary(78) DEFAULT NULL,
+ `Status_25` binary(78) DEFAULT NULL,
+ `Status_26` binary(78) DEFAULT NULL,
+ `Status_27` binary(78) DEFAULT NULL,
+ `Status_28` binary(78) DEFAULT NULL,
+ `Status_29` binary(78) DEFAULT NULL,
+ `CharacterId` int(20) DEFAULT NULL,
+ `IS_DELETE` int(3) DEFAULT '0',
+ `IS_NOT_ACTIVE_FLG` int(3) DEFAULT '0',
+ `UPDATE_DATE` date DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `_112_dbcharastatus`
+--
+
+LOCK TABLES `charastatus` WRITE;
+/*!40000 ALTER TABLE `charastatus` DISABLE KEYS */;
+/*!40000 ALTER TABLE `charastatus` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2016-12-09 17:36:59
\ 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..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;
};