aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2015-04-11 15:58:43 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2015-04-11 15:58:43 +0200
commita0647a825ad7236aa30546cc8d27257cbd831c30 (patch)
tree4fb762e36b94007148a72c9d2fdca700bf73d334 /src
parentb2d0e7d9d51f29577682cf0d47e25d877bdfe679 (diff)
Core/Misc:
- Update SMSG_GOSSIP_POI for WoD - Update points of interest locale in simple system
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp35
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp42
-rw-r--r--src/server/game/Globals/ObjectMgr.h7
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp13
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h16
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp1
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
8 files changed, 74 insertions, 44 deletions
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 5d18e1e079d..f9496a05cf4 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -272,7 +272,7 @@ struct GossipMenuItemsLocale
struct PointOfInterestLocale
{
- StringVector IconName;
+ StringVector Name;
};
#define MAX_EQUIPMENT_ITEMS 3
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index fc507ef0d44..815c98c9710 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -262,30 +262,31 @@ void PlayerMenu::SendCloseGossip()
_session->SendPacket(packet.Write());
}
-void PlayerMenu::SendPointOfInterest(uint32 poiId) const
+void PlayerMenu::SendPointOfInterest(uint32 id) const
{
- PointOfInterest const* poi = sObjectMgr->GetPointOfInterest(poiId);
- if (!poi)
+ PointOfInterest const* pointOfInterest = sObjectMgr->GetPointOfInterest(id);
+ if (!pointOfInterest)
{
- TC_LOG_ERROR("sql.sql", "Request to send non-existing POI (Id: %u), ignored.", poiId);
+ TC_LOG_ERROR("sql.sql", "Request to send non-existing PointOfInterest (Id: %u), ignored.", id);
return;
}
- std::string iconText = poi->Name;
+ std::string name = pointOfInterest->Name;
+
LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex();
if (localeConstant >= LOCALE_enUS)
- if (PointOfInterestLocale const* localeData = sObjectMgr->GetPointOfInterestLocale(poiId))
- ObjectMgr::GetLocaleString(localeData->IconName, localeConstant, iconText);
-
- WorldPacket data(SMSG_GOSSIP_POI, 4 + 4 + 4 + 4 + 4 + 10); // guess size
- data << uint32(poi->Flags);
- data << float(poi->PositionX);
- data << float(poi->PositionY);
- data << uint32(poi->Icon);
- data << uint32(poi->Importance);
- data << iconText;
-
- _session->SendPacket(&data);
+ if (PointOfInterestLocale const* localeData = sObjectMgr->GetPointOfInterestLocale(id))
+ ObjectMgr::GetLocaleString(localeData->Name, localeConstant, name);
+
+ WorldPackets::NPC::GossipPOI packet;
+
+ packet.Flags = pointOfInterest->Flags;
+ packet.Pos = pointOfInterest->Pos;
+ packet.Icon = pointOfInterest->Icon;
+ packet.Importance = pointOfInterest->Importance;
+ packet.Name = name;
+
+ _session->SendPacket(packet.Write());
}
/*********************************************************/
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 2aee9fb9193..eec09b6f7d1 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -394,10 +394,10 @@ void ObjectMgr::LoadPointOfInterestLocales()
{
uint32 oldMSTime = getMSTime();
- _pointOfInterestLocaleStore.clear(); // need for reload case
-
- QueryResult result = WorldDatabase.Query("SELECT ID, Name_loc1, Name_loc2, Name_loc3, Name_loc4, Name_loc5, Name_loc6, Name_loc7, Name_loc8 FROM locales_points_of_interest");
+ _pointOfInterestLocaleStore.clear(); // need for reload case
+ // 0 1 2
+ QueryResult result = WorldDatabase.Query("SELECT ID, locale, Name FROM points_of_interest_locale");
if (!result)
return;
@@ -405,12 +405,14 @@ void ObjectMgr::LoadPointOfInterestLocales()
{
Field* fields = result->Fetch();
- uint32 entry = fields[0].GetUInt32();
+ uint32 id = fields[0].GetUInt32();
+ std::string localeName = fields[1].GetString();
+ std::string name = fields[2].GetString();
- PointOfInterestLocale& data = _pointOfInterestLocaleStore[entry];
+ PointOfInterestLocale& data = _pointOfInterestLocaleStore[id];
+ LocaleConstant locale = GetLocaleByName(localeName);
- for (uint8 i = OLD_TOTAL_LOCALES - 1; i > 0; --i)
- AddLocaleString(fields[i].GetString(), LocaleConstant(i), data.IconName);
+ AddLocaleString(name, locale, data.Name);
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u points_of_interest locale strings in %u ms", uint32(_pointOfInterestLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime));
@@ -6841,7 +6843,7 @@ void ObjectMgr::LoadPointsOfInterest()
{
uint32 oldMSTime = getMSTime();
- _pointsOfInterestStore.clear(); // need for reload case
+ _pointsOfInterestStore.clear(); // need for reload case
uint32 count = 0;
@@ -6858,24 +6860,24 @@ void ObjectMgr::LoadPointsOfInterest()
{
Field* fields = result->Fetch();
- uint32 point_id = fields[0].GetUInt32();
+ uint32 id = fields[0].GetUInt32();
- PointOfInterest POI;
- POI.ID = point_id;
- POI.PositionX = fields[1].GetFloat();
- POI.PositionY = fields[2].GetFloat();
- POI.Icon = fields[3].GetUInt32();
- POI.Flags = fields[4].GetUInt32();
- POI.Importance = fields[5].GetUInt32();
- POI.Name = fields[6].GetString();
+ PointOfInterest pointOfInterest;
+ pointOfInterest.ID = id;
+ pointOfInterest.Pos.x = fields[1].GetFloat();
+ pointOfInterest.Pos.y = fields[2].GetFloat();
+ pointOfInterest.Icon = fields[3].GetUInt32();
+ pointOfInterest.Flags = fields[4].GetUInt32();
+ pointOfInterest.Importance = fields[5].GetUInt32();
+ pointOfInterest.Name = fields[6].GetString();
- if (!Trinity::IsValidMapCoord(POI.PositionX, POI.PositionY))
+ if (!Trinity::IsValidMapCoord(pointOfInterest.Pos.x, pointOfInterest.Pos.y))
{
- TC_LOG_ERROR("sql.sql", "Table `points_of_interest` (ID: %u) have invalid coordinates (PositionX: %f PositionY: %f), ignored.", point_id, POI.PositionX, POI.PositionY);
+ TC_LOG_ERROR("sql.sql", "Table `points_of_interest` (ID: %u) have invalid coordinates (PositionX: %f PositionY: %f), ignored.", id, pointOfInterest.Pos.x, pointOfInterest.Pos.y);
continue;
}
- _pointsOfInterestStore[point_id] = POI;
+ _pointsOfInterestStore[id] = pointOfInterest;
++count;
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 240b80b4a44..feee679a87b 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -504,8 +504,7 @@ struct RepSpilloverTemplate
struct PointOfInterest
{
uint32 ID;
- float PositionX;
- float PositionY;
+ G3D::Vector2 Pos;
uint32 Icon;
uint32 Flags;
uint32 Importance;
@@ -1151,9 +1150,9 @@ class ObjectMgr
if (itr == _gossipMenuItemsLocaleStore.end()) return NULL;
return &itr->second;
}
- PointOfInterestLocale const* GetPointOfInterestLocale(uint32 poi_id) const
+ PointOfInterestLocale const* GetPointOfInterestLocale(uint32 id) const
{
- PointOfInterestLocaleContainer::const_iterator itr = _pointOfInterestLocaleStore.find(poi_id);
+ PointOfInterestLocaleContainer::const_iterator itr = _pointOfInterestLocaleStore.find(id);
if (itr == _pointOfInterestLocaleStore.end()) return NULL;
return &itr->second;
}
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 33e33bece55..2ca1ad7447d 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -150,3 +150,16 @@ WorldPacket const* WorldPackets::NPC::SuppressNPCGreetings::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::NPC::GossipPOI::Write()
+{
+ _worldPacket.WriteBits(Flags, 14);
+ _worldPacket.WriteBits(Name.length(), 6);
+ _worldPacket << Pos.x;
+ _worldPacket << Pos.y;
+ _worldPacket << Icon;
+ _worldPacket << Importance;
+ _worldPacket.WriteString(Name);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index bc69abc914a..bb38327c463 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -22,6 +22,8 @@
#include "ItemPackets.h"
#include "Creature.h"
+#include "G3D/Vector2.h"
+
namespace WorldPackets
{
namespace NPC
@@ -179,6 +181,20 @@ namespace WorldPackets
ObjectGuid UnitGUID;
bool SuppressNPCGreeting = false;
};
+
+ class GossipPOI final : public ServerPacket
+ {
+ public:
+ GossipPOI() : ServerPacket(SMSG_GOSSIP_POI, 2 + 2 * 4 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 Flags = 0;
+ G3D::Vector2 Pos;
+ int32 Icon = 0;
+ int32 Importance = 0;
+ std::string Name;
+ };
}
}
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 14546c54d8c..aeeb9f3b8b1 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -475,7 +475,6 @@ WorldPacket const* WorldPackets::Quest::QuestConfirmAccept::Write()
_worldPacket << uint32(QuestID);
_worldPacket << InitiatedBy;
- _worldPacket.FlushBits();
_worldPacket.WriteBits(QuestTitle.size(), 10);
_worldPacket.WriteString(QuestTitle);
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 48cce355d0e..f9190c361bf 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1164,7 +1164,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOD_MODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_ACTION_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);