diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-04-11 15:58:43 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-04-11 15:58:43 +0200 |
commit | a0647a825ad7236aa30546cc8d27257cbd831c30 (patch) | |
tree | 4fb762e36b94007148a72c9d2fdca700bf73d334 /src | |
parent | b2d0e7d9d51f29577682cf0d47e25d877bdfe679 (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.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 35 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 42 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.h | 16 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
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); |