aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql1
-rw-r--r--sql/updates/8987_world_playercreateinfo.sql3
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp28
5 files changed, 21 insertions, 14 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index 2de8257a254..e1d04928993 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -4018,6 +4018,7 @@ CREATE TABLE `playercreateinfo` (
`position_x` float NOT NULL DEFAULT '0',
`position_y` float NOT NULL DEFAULT '0',
`position_z` float NOT NULL DEFAULT '0',
+ `orientation` float NOT NULL DEFAULT '0',
PRIMARY KEY (`race`,`class`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/sql/updates/8987_world_playercreateinfo.sql b/sql/updates/8987_world_playercreateinfo.sql
new file mode 100644
index 00000000000..040ec9cc2fd
--- /dev/null
+++ b/sql/updates/8987_world_playercreateinfo.sql
@@ -0,0 +1,3 @@
+
+ALTER TABLE `playercreateinfo`
+ ADD COLUMN `orientation` float NOT NULL DEFAULT 0 AFTER `position_z`;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3c22c9440fb..0dca7362322 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -679,7 +679,7 @@ bool Player::Create(uint32 guidlow, const std::string& name, uint8 race, uint8 c
for (uint8 i = 0; i < PLAYER_SLOTS_COUNT; i++)
m_items[i] = NULL;
- Relocate(info->positionX,info->positionY,info->positionZ);
+ Relocate(info->positionX,info->positionY,info->positionZ,info->orientation);
ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(class_);
if (!cEntry)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index d568d226042..d263547ed7d 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -249,6 +249,7 @@ struct PlayerInfo
float positionX;
float positionY;
float positionZ;
+ float orientation;
uint16 displayId_m;
uint16 displayId_f;
PlayerCreateInfoItems item;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 0a29026bd61..9997fcf865c 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2729,7 +2729,7 @@ void ObjectMgr::LoadPlayerInfo()
// Load playercreate
{
// 0 1 2 3 4 5 6
- QueryResult_AutoPtr result = WorldDatabase.Query("SELECT race, class, map, zone, position_x, position_y, position_z FROM playercreateinfo");
+ QueryResult_AutoPtr result = WorldDatabase.Query("SELECT race, class, map, zone, position_x, position_y, position_z, orientation FROM playercreateinfo");
uint32 count = 0;
@@ -2749,13 +2749,14 @@ void ObjectMgr::LoadPlayerInfo()
{
Field* fields = result->Fetch();
- uint32 current_race = fields[0].GetUInt32();
+ uint32 current_race = fields[0].GetUInt32();
uint32 current_class = fields[1].GetUInt32();
- uint32 mapId = fields[2].GetUInt32();
- uint32 areaId = fields[3].GetUInt32();
- float positionX = fields[4].GetFloat();
- float positionY = fields[5].GetFloat();
- float positionZ = fields[6].GetFloat();
+ uint32 mapId = fields[2].GetUInt32();
+ uint32 areaId = fields[3].GetUInt32();
+ float positionX = fields[4].GetFloat();
+ float positionY = fields[5].GetFloat();
+ float positionZ = fields[6].GetFloat();
+ float orientation = fields[7].GetFloat();
if (current_race >= MAX_RACES)
{
@@ -2783,7 +2784,7 @@ void ObjectMgr::LoadPlayerInfo()
}
// accept DB data only for valid position (and non instanceable)
- if (!MapManager::IsValidMapCoord(mapId,positionX,positionY,positionZ))
+ if (!MapManager::IsValidMapCoord(mapId,positionX,positionY,positionZ,orientation))
{
sLog.outErrorDb("Wrong home position for class %u race %u pair in `playercreateinfo` table, ignoring.",current_class,current_race);
continue;
@@ -2797,11 +2798,12 @@ void ObjectMgr::LoadPlayerInfo()
PlayerInfo* pInfo = &playerInfo[current_race][current_class];
- pInfo->mapId = mapId;
- pInfo->areaId = areaId;
- pInfo->positionX = positionX;
- pInfo->positionY = positionY;
- pInfo->positionZ = positionZ;
+ pInfo->mapId = mapId;
+ pInfo->areaId = areaId;
+ pInfo->positionX = positionX;
+ pInfo->positionY = positionY;
+ pInfo->positionZ = positionZ;
+ pInfo->orientation = orientation;
pInfo->displayId_m = rEntry->model_m;
pInfo->displayId_f = rEntry->model_f;