diff --git a/server/WorldStructs.xml b/server/WorldStructs.xml
index 6d20f36..ef8c4ae 100644
--- a/server/WorldStructs.xml
+++ b/server/WorldStructs.xml
@@ -19224,6 +19224,8 @@ to zero and treated like placeholders." />
+
+
@@ -20914,15 +20916,6 @@ to zero and treated like placeholders." />
-
-
-
-
-
-
-
-
-
@@ -21035,4 +21028,7 @@ to zero and treated like placeholders." />
+
+
+
diff --git a/source/WorldServer/PlayerGroups.cpp b/source/WorldServer/PlayerGroups.cpp
index 8a218e3..ab94fc2 100644
--- a/source/WorldServer/PlayerGroups.cpp
+++ b/source/WorldServer/PlayerGroups.cpp
@@ -1035,7 +1035,7 @@ void PlayerGroupManager::SendGroupChatMessage(int32 group_id, int16 channel, con
if (m_groups.count(group_id) > 0) {
std::vector raidGroups;
- if (channel == CHANNEL_RAID_SAY || channel == CHANNEL_LOOT_ROLLS)
+ if (channel == CHANNEL_RAID_SAY || channel == CHANNEL_LOOT_ROLLS || channel == CHANNEL_LOOT)
m_groups[group_id]->GetRaidGroups(&raidGroups);
if (raidGroups.size() < 1)
diff --git a/source/WorldServer/Spawn.cpp b/source/WorldServer/Spawn.cpp
index b0c8f9b..e62f77b 100644
--- a/source/WorldServer/Spawn.cpp
+++ b/source/WorldServer/Spawn.cpp
@@ -2648,7 +2648,11 @@ void Spawn::InitializeInfoPacketData(Player* spawn, PacketStruct* packet) {
if(!vis_hide_hood && appearance.hide_hood && version > 561) {
vis_flag += INFO_VIS_FLAG_HIDE_HOOD;
}
-
+
+ if(spawn == this && IsPlayer() && ((Player*)this)->GetClient() && ((Player*)this)->GetClient()->GetOnAutoMount()) {
+ classicFlags += INFO_CLASSIC_FLAG_AUTOMOUNT;
+ }
+
if(version <= 561) {
packet->setDataByName("flags", classicFlags);
}
diff --git a/source/WorldServer/Spawn.h b/source/WorldServer/Spawn.h
index 8c3e0ed..c09fb92 100644
--- a/source/WorldServer/Spawn.h
+++ b/source/WorldServer/Spawn.h
@@ -201,6 +201,7 @@
#define INFO_CLASSIC_FLAG_SHOW_HOOD 2
#define INFO_CLASSIC_FLAG_NOLOOK 4
#define INFO_CLASSIC_FLAG_CROUCH 8
+#define INFO_CLASSIC_FLAG_AUTOMOUNT 32
using namespace std;
class Spell;
diff --git a/source/WorldServer/client.cpp b/source/WorldServer/client.cpp
index 78bb85d..0d860b9 100644
--- a/source/WorldServer/client.cpp
+++ b/source/WorldServer/client.cpp
@@ -2920,6 +2920,10 @@ bool Client::HandleLootItem(Spawn* entity, Item* item, Spawn* target, bool overr
int8 type = CHANNEL_LOOT;
if (entity) {
lootingClient->Message(type, "You loot %s from the corpse of %s", item->CreateItemLink(GetVersion()).c_str(), entity->GetName());
+ if(entity->GetLootGroupID()) {
+ // TODO: Item link for each client
+ world.GetGroupManager()->SendGroupChatMessage(entity->GetLootGroupID(), CHANNEL_LOOT, "%s looted %s from the corpse of %s.", lootingPlayer->GetName(), item->name.c_str(), entity->GetName());
+ }
}
else {
lootingClient->Message(type, "You found a %s.", item->CreateItemLink(GetVersion()).c_str());
@@ -11637,31 +11641,41 @@ void Client::AttemptStartAutoMount() {
}
void Client::EndAutoMount() {
- PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", GetVersion());
- if (packet) {
- packet->setDataByName("parameter1", 128);
- packet->setDataByName("parameter2", 64);
- packet->setDataByName("value", 1);
- QueuePacket(packet->serialize());
- safe_delete(packet);
+ PacketStruct* packet = nullptr;
+ if(GetVersion() > 561) {
+ packet = configReader.getStruct("WS_ServerControlFlags", GetVersion());
+ if (packet) {
+ packet->setDataByName("parameter1", 128);
+ packet->setDataByName("parameter2", 64);
+ packet->setDataByName("value", 1);
+ QueuePacket(packet->serialize());
+ safe_delete(packet);
+ }
+
+ packet = configReader.getStruct("WS_ServerControlFlags", GetVersion());
+ if (packet) {
+ packet->setDataByName("parameter3", 4);
+ packet->setDataByName("parameter5", 2);
+ packet->setDataByName("value", 0);
+ QueuePacket(packet->serialize());
+ safe_delete(packet);
+ }
+
+ packet = configReader.getStruct("WS_ClearForLanding", GetVersion());
+ if (packet) {
+ packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(GetPlayer()));
+ QueuePacket(packet->serialize());
+ safe_delete(packet);
+ }
}
- packet = configReader.getStruct("WS_ServerControlFlags", GetVersion());
- if (packet) {
- packet->setDataByName("parameter3", 4);
- packet->setDataByName("parameter5", 2);
- packet->setDataByName("value", 0);
- QueuePacket(packet->serialize());
- safe_delete(packet);
+ if(GetVersion() <= 561) {
+ packet = configReader.getStruct("WS_CreateBoatTransportMsg", GetVersion());
+ if (packet) {
+ QueuePacket(packet->serialize());
+ safe_delete(packet);
+ }
}
-
- packet = configReader.getStruct("WS_ClearForLanding", GetVersion());
- if (packet) {
- packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(GetPlayer()));
- QueuePacket(packet->serialize());
- safe_delete(packet);
- }
-
on_auto_mount = false;
player->SetMount(((Player*)player)->GetTempMount());
@@ -12244,7 +12258,6 @@ void Client::SendMoveObjectMode(Spawn* spawn, uint8 placementMode, float unknown
void Client::SendFlightAutoMount(int32 path_id, int16 mount_id, int8 mount_red_color, int8 mount_green_color, int8 mount_blue_color)
{
SetPendingFlightPath(path_id);
-
((Player*)player)->SetTempMount(((Entity*)player)->GetMount());
((Player*)player)->SetTempMountColor(((Entity*)player)->GetMountColor());
((Player*)player)->SetTempMountSaddleColor(((Entity*)player)->GetMountSaddleColor());
diff --git a/source/WorldServer/zoneserver.cpp b/source/WorldServer/zoneserver.cpp
index 3ea502b..79b82f8 100644
--- a/source/WorldServer/zoneserver.cpp
+++ b/source/WorldServer/zoneserver.cpp
@@ -8738,39 +8738,26 @@ void ZoneServer::SendFlightPathsPackets(Client* client) {
if (m_flightPathRoutes.size() > 0) {
PacketStruct* packet = configReader.getStruct("WS_FlightPathsMsg", client->GetVersion());
if (packet) {
-
int32 num_routes = m_flightPaths.size();
packet->setArrayLengthByName("number_of_routes", num_routes);
packet->setArrayLengthByName("number_of_routes2", num_routes);
packet->setArrayLengthByName("number_of_routes3", num_routes);
packet->setArrayLengthByName("number_of_routes4", num_routes);
-
map::iterator itr;
int32 i = 0;
for (itr = m_flightPaths.begin(); itr != m_flightPaths.end(); itr++, i++) {
packet->setArrayDataByName("route_length", m_flightPathRoutes[itr->first].size(), i);
packet->setArrayDataByName("ground_mount", itr->second->flying ? 0 : 1, i);
packet->setArrayDataByName("allow_dismount", itr->second->dismount ? 1 : 0, i);
-
-
packet->setSubArrayLengthByName("route_length2", m_flightPathRoutes[itr->first].size(), i);
vector::iterator itr2;
int32 j = 0;
for (itr2 = m_flightPathRoutes[itr->first].begin(); itr2 != m_flightPathRoutes[itr->first].end(); itr2++, j++) {
- if(client->GetVersion() <= 561) {
- std::string fieldNum = std::to_string(i) + "_" + std::to_string(j);
- packet->setDataByName(("x" + fieldNum).c_str(), (*itr2)->X);
- packet->setDataByName(("y" + fieldNum).c_str(), (*itr2)->Y);
- packet->setDataByName(("z" + fieldNum).c_str(), (*itr2)->Z);
- }
- else {
packet->setSubArrayDataByName("x", (*itr2)->X, i, j);
packet->setSubArrayDataByName("y", (*itr2)->Y, i, j);
packet->setSubArrayDataByName("z", (*itr2)->Z, i, j);
- }
}
}
- //packet->PrintPacket();
client->QueuePacket(packet->serialize());
safe_delete(packet);
}