mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-24 05:18:40 +00:00
Merge branch 'shared_tasks' of github.com:EQEmu/Server into shared_tasks_service
This commit is contained in:
@@ -373,7 +373,7 @@ int ClientListEntry::GetTaskLockoutTimeLeft(int id) const
|
||||
[id](const TaskTimer &a) { return a.ID == id; });
|
||||
|
||||
if (it != m_task_replay_timers.end())
|
||||
return it->expires - Timer::GetCurrentTime();
|
||||
return it->expires - time(nullptr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -384,7 +384,7 @@ int ClientListEntry::GetTaskLockoutTimeLeft(int id) const
|
||||
bool ClientListEntry::CleanExpiredTaskLockouts() const
|
||||
{
|
||||
std::string query =
|
||||
StringFormat("DELETE FROM `character_task_lockouts` WHERE `charid` = %i AND `timestamp` > %i", pcharid,
|
||||
StringFormat("DELETE FROM `character_task_lockouts` WHERE `character_id` = %i AND `timestamp` > %i", pcharid,
|
||||
Timer::GetCurrentTime());
|
||||
auto results = database.QueryDatabase(query);
|
||||
return results.Success();
|
||||
@@ -397,7 +397,7 @@ bool ClientListEntry::LoadTaskLockouts()
|
||||
{
|
||||
CleanExpiredTaskLockouts();
|
||||
std::string query = StringFormat(
|
||||
"SELECT `replay_group`, `original_id`, `timestamp` FROM `character_task_lockouts` WHERE `charid` = %i",
|
||||
"SELECT `replay_group`, `original_id`, `timestamp` FROM `character_task_lockouts` WHERE `character_id` = %i",
|
||||
pcharid);
|
||||
auto results = database.QueryDatabase(query);
|
||||
if (!results.Success())
|
||||
|
||||
@@ -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
|
||||
@@ -133,7 +133,7 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack)
|
||||
|
||||
// check our lock out timer
|
||||
int expires = cle->GetTaskLockoutExpire(task_id);
|
||||
if ((expires - Timer::GetCurrentTime()) >= 0) {
|
||||
if ((expires - time(nullptr)) >= 0) {
|
||||
// failure TODO: appropriate message, we need to send the timestamp here
|
||||
auto pack = new ServerPacket(ServerOP_TaskReject, leader_name.size() + 1 + 8);
|
||||
pack->WriteUInt32(0); // string ID or just generic fail message
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,7 +374,7 @@ bool SharedTaskManager::LoadSharedTaskState()
|
||||
{
|
||||
// one may think we should clean up expired tasks, but we don't just in case world is booting back up after a crash
|
||||
// we will clean them up in the normal process loop so zones get told to clean up
|
||||
std::string query = "SELECT `id`, `taskid`, `acceptedtime`, `locked` FROM `shared_task_state`";
|
||||
std::string query = "SELECT `id`, `task_id`, `accepted_time`, `is_locked` FROM `shared_task_state`";
|
||||
auto results = database.QueryDatabase(query);
|
||||
|
||||
if (results.Success() && results.RowCount() > 0) {
|
||||
@@ -389,14 +389,14 @@ bool SharedTaskManager::LoadSharedTaskState()
|
||||
}
|
||||
}
|
||||
|
||||
query = "SELECT `shared_id`, `charid`, `name`, `leader` FROM `shared_task_members` ORDER BY shared_id ASC";
|
||||
query = "SELECT `shared_task_id`, `character_id`, `character_name`, `is_leader` FROM `shared_task_members` ORDER BY shared_task_id ASC";
|
||||
results = database.QueryDatabase(query);
|
||||
if (results.Success() && results.RowCount() > 0) {
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,7 +404,7 @@ bool SharedTaskManager::LoadSharedTaskState()
|
||||
// But the crash case may actually dictate we should :P
|
||||
|
||||
// set next_id to highest used ID
|
||||
query = "SELECT MAX(id) FROM shared_task_state";
|
||||
query = "SELECT IFNULL(MAX(id), 0) FROM shared_task_state";
|
||||
results = database.QueryDatabase(query);
|
||||
if (results.Success() && results.RowCount() == 1) {
|
||||
auto row = results.begin();
|
||||
|
||||
+15
-4
@@ -6,16 +6,21 @@
|
||||
|
||||
#include "../common/servertalk.h"
|
||||
#include "../common/global_tasks.h"
|
||||
#include "cliententry.h"
|
||||
|
||||
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 {
|
||||
@@ -24,11 +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;
|
||||
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(char_id);
|
||||
}
|
||||
void MemberLeftGame(ClientListEntry *cle);
|
||||
inline const std::string &GetLeaderName() const { return leader_name; }
|
||||
@@ -59,6 +69,7 @@ private:
|
||||
bool locked;
|
||||
std::string leader_name;
|
||||
std::vector<SharedTaskMember> members;
|
||||
std::vector<int> char_ids; // every char id of someone to be locked out, different in case they leave/removed
|
||||
ClientTaskInformation task_state; // book keeping
|
||||
|
||||
friend class SharedTaskManager;
|
||||
|
||||
Reference in New Issue
Block a user