diff --git a/world/shared_tasks.cpp b/world/shared_tasks.cpp index 152a4b589..2e4b714da 100644 --- a/world/shared_tasks.cpp +++ b/world/shared_tasks.cpp @@ -18,7 +18,7 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) /* * Things done in zone: * Verified we were requesting a shared task - * Verified leader has a slot available + * Verified leader has a slot available (guess we should double check this one) * Verified leader met level reqs * Verified repeatable or not completed (not doing that here?) * Verified leader doesn't have a lock out @@ -75,6 +75,11 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) return; } + if (!cle_leader->HasFreeSharedTaskSlot()) { // they have a task already ... + tasks.erase(ret.first); + return; + } + auto &task = ret.first->second; task.AddMember(leader_name, cle_leader, true); @@ -144,6 +149,8 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) } } + // this will also prevent any of these clients from requesting or being added to another, lets do it now before we tell zone + task.SetCLESharedTasks(); // fire off to zone we're done! SerializeBuffer buf(10 + 10 * players.size()); buf.WriteInt32(id); // shared task's ID @@ -156,7 +163,6 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) zoneserver_list.SendPacket(cle_leader->zone(), cle_leader->instance(), reply); safe_delete(reply); - task.SetCLESharedTasks(); return; }