diff --git a/world/shared_tasks.cpp b/world/shared_tasks.cpp index 1a0291d46..8d0b9c11d 100644 --- a/world/shared_tasks.cpp +++ b/world/shared_tasks.cpp @@ -82,7 +82,7 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) } auto &task = ret.first->second; - task.AddMember(leader_name, cle_leader, true); + task.AddMember(leader_name, cle_leader, cle_leader->CharID(), true); if (players.empty()) { // send instant success to leader @@ -146,7 +146,7 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) } // we're good, add to task - task.AddMember(name, cle); + task.AddMember(name, cle, cle->CharID()); } } @@ -396,7 +396,7 @@ bool SharedTaskManager::LoadSharedTaskState() int task_id = atoi(row[0]); // hmm not sure best way to do this, fine for now if (tasks.count(task_id) == 1) - tasks[task_id].AddMember(row[2], nullptr, atoi(row[3]) != 0); + tasks[task_id].AddMember(row[2], nullptr, atoi(row[1]), atoi(row[3]) != 0); } } diff --git a/world/shared_tasks.h b/world/shared_tasks.h index f46dd34d3..a56974628 100644 --- a/world/shared_tasks.h +++ b/world/shared_tasks.h @@ -13,10 +13,14 @@ class ClientListEntry; struct SharedTaskMember { std::string name; ClientListEntry *cle; + int char_id; bool leader; // TODO: monster mission stuff - SharedTaskMember() : cle(nullptr), leader(false) {} - SharedTaskMember(std::string name, ClientListEntry *cle, bool leader) : name(name), cle(cle), leader(leader) {} + SharedTaskMember() : cle(nullptr), char_id(0), leader(false) {} + SharedTaskMember(std::string name, ClientListEntry *cle, int char_id, bool leader) + : name(name), cle(cle), char_id(char_id), leader(leader) + { + } }; class SharedTask { @@ -25,14 +29,16 @@ public: SharedTask(int id, int task_id) : id(id), task_id(task_id), locked(false) {} ~SharedTask() {} - void AddMember(std::string name, ClientListEntry *cle = nullptr, bool leader = false) + void AddMember(std::string name, ClientListEntry *cle = nullptr, int char_id = 0, bool leader = false) { - members.push_back({name, cle, leader}); + members.push_back({name, cle, char_id, leader}); if (leader) leader_name = name; - auto it = std::find(char_ids.begin(), char_ids.end(), cle->CharID()); + if (char_id == 0) + return; + auto it = std::find(char_ids.begin(), char_ids.end(), char_id); if (it == char_ids.end()) - char_ids.push_back(cle->CharID()); + char_ids.push_back(char_id); } void MemberLeftGame(ClientListEntry *cle); inline const std::string &GetLeaderName() const { return leader_name; }