From b972ec581fb07d9b3cc34042f8dea5f0d8c4ef2b Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sun, 2 Jun 2019 23:32:53 -0400 Subject: [PATCH] Rework accepted_time for shared_tasks --- world/shared_tasks.cpp | 5 +++++ world/shared_tasks.h | 10 ++++++---- zone/client.h | 2 +- zone/tasks.cpp | 5 +++-- zone/tasks.h | 2 +- zone/worldserver.cpp | 3 ++- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/world/shared_tasks.cpp b/world/shared_tasks.cpp index efb3312ad..4b012ef48 100644 --- a/world/shared_tasks.cpp +++ b/world/shared_tasks.cpp @@ -159,6 +159,7 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack) buf.WriteInt32(id); // shared task's ID buf.WriteInt32(task_id); // ID of the task's data buf.WriteInt32(npc_id); // NPC we're requesting from + buf.WriteInt32(task.GetAcceptedTime()); // time we accepted it buf.WriteString(leader_name); // leader's name task.SerializeMembers(buf, false); // everyone but leader @@ -548,3 +549,7 @@ void SharedTask::InitActivities() } } +bool SharedTask::UnlockActivities() +{ + return true; +} diff --git a/world/shared_tasks.h b/world/shared_tasks.h index e730d8041..79c51eea4 100644 --- a/world/shared_tasks.h +++ b/world/shared_tasks.h @@ -20,8 +20,8 @@ struct SharedTaskMember { class SharedTask { public: - SharedTask() : id(0), task_id(0), accepted_time(0), locked(false) {} - SharedTask(int id, int task_id) : id(id), task_id(task_id), accepted_time(0), locked(false) {} + SharedTask() : id(0), task_id(0), locked(false) {} + 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) @@ -43,17 +43,19 @@ public: void SerializeMembers(SerializeBuffer &buf, bool include_leader = true) const; void SetCLESharedTasks(); void InitActivities(); + bool UnlockActivities(); void Save() const; // save to database private: inline void SetID(int in) { id = in; } inline void SetTaskID(int in) { task_id = in; } - inline void SetAcceptedTime(int in) { accepted_time = in; } + inline void SetAcceptedTime(int in) { task_state.AcceptedTime = in; } inline void SetLocked(bool in) { locked = in; } + + inline int GetAcceptedTime() const { return task_state.AcceptedTime; } int id; // id we have in our map int task_id; // ID of the task we're on - int accepted_time; // timestamp of when accepted, initially set by zone bool locked; std::string leader_name; std::vector members; diff --git a/zone/client.h b/zone/client.h index f6e8984af..158f03d54 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1026,7 +1026,7 @@ public: inline bool IsTaskEnabled(int TaskID) { return (taskstate ? taskstate->IsTaskEnabled(TaskID) : false); } inline void ProcessTaskProximities(float X, float Y, float Z) { if(taskstate) taskstate->ProcessTaskProximities(this, X, Y, Z); } inline void AssignTask(int TaskID, int NPCID, bool enforce_level_requirement = false) { if (taskstate) taskstate->AcceptNewTask(this, TaskID, NPCID, enforce_level_requirement); } - inline void AssignSharedTask(int TaskID, int NPCID, int id, std::vector &members) { if (taskstate) taskstate->AcceptNewSharedTask(this, TaskID, NPCID, id, members); } + inline void AssignSharedTask(int TaskID, int NPCID, int id, int accepted_time, std::vector &members) { if (taskstate) taskstate->AcceptNewSharedTask(this, TaskID, NPCID, id, accepted_time, members); } inline int ActiveSpeakTask(int NPCID) { if(taskstate) return taskstate->ActiveSpeakTask(NPCID); else return 0; } inline int ActiveSpeakActivity(int NPCID, int TaskID) { if(taskstate) return taskstate->ActiveSpeakActivity(NPCID, TaskID); else return 0; } inline void FailTask(int TaskID) { if(taskstate) taskstate->FailTask(this, TaskID); } diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 802bf7cd4..ec831724a 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -3475,7 +3475,8 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo return; } -void ClientTaskState::AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int id, std::vector &members) +void ClientTaskState::AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int id, int accepted_time, + std::vector &members) { // all of this data should have been verified already // first we need to create the new SharedTaskState @@ -3489,7 +3490,7 @@ void ClientTaskState::AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int auto task_activity = task_state->GetActivity(); task_activity->TaskID = TaskID; - task_activity->AcceptedTime = time(nullptr); + task_activity->AcceptedTime = accepted_time; task_activity->Updated = true; task_activity->CurrentStep = -1; diff --git a/zone/tasks.h b/zone/tasks.h index 4e6993a92..3d1cf628b 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -146,7 +146,7 @@ public: int GetTaskActivityDoneCountFromTaskID(int TaskID, int ActivityID); int GetTaskStartTime(TaskType type, int index); void AcceptNewTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement = false); - void AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int id, std::vector &members); + void AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int id, int accepted_time, std::vector &members); void PendSharedTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement = false); void FailTask(Client *c, int TaskID); int TaskTimeLeft(int TaskID); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 21a7aec6a..3cd70f078 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1947,6 +1947,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) int id = pack->ReadUInt32(); int task_id = pack->ReadUInt32(); int taskmaster_id = pack->ReadUInt32(); + int accepted_time = pack->ReadUInt32(); char name[64] = { 0 }; pack->ReadString(name); auto client = entity_list.GetClientByName(name); @@ -1957,7 +1958,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) pack->ReadString(name); members.push_back(name); } - client->AssignSharedTask(task_id, taskmaster_id, id, members); + client->AssignSharedTask(task_id, taskmaster_id, id, accepted_time, members); } else { // TODO: something failed, tell world to clean up }