mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
[Shared Tasks] Implement task timer groups (#2340)
This adds task replay and request timer groups (an arbitrary id) which allows for different tasks to share lockouts
This commit is contained in:
@@ -2327,8 +2327,19 @@ void ClientTaskState::AcceptNewTask(
|
||||
if (task->type != TaskType::Shared)
|
||||
{
|
||||
auto task_timers = CharacterTaskTimersRepository::GetWhere(database, fmt::format(
|
||||
"character_id = {} AND task_id = {} AND expire_time > NOW() ORDER BY timer_type ASC LIMIT 1",
|
||||
client->CharacterID(), task_id
|
||||
SQL(
|
||||
character_id = {}
|
||||
AND (task_id = {}
|
||||
OR (timer_group > 0 AND timer_type = {} AND timer_group = {})
|
||||
OR (timer_group > 0 AND timer_type = {} AND timer_group = {}))
|
||||
AND expire_time > NOW() ORDER BY timer_type ASC LIMIT 1
|
||||
),
|
||||
client->CharacterID(),
|
||||
task_id,
|
||||
static_cast<int>(TaskTimerType::Replay),
|
||||
task->replay_timer_group,
|
||||
static_cast<int>(TaskTimerType::Request),
|
||||
task->request_timer_group
|
||||
));
|
||||
|
||||
if (!task_timers.empty())
|
||||
@@ -2426,6 +2437,7 @@ void ClientTaskState::AcceptNewTask(
|
||||
timer.character_id = client->CharacterID();
|
||||
timer.task_id = task_id;
|
||||
timer.timer_type = static_cast<int>(TaskTimerType::Request);
|
||||
timer.timer_group = task->request_timer_group;
|
||||
timer.expire_time = expire_time;
|
||||
|
||||
CharacterTaskTimersRepository::InsertOne(database, timer);
|
||||
@@ -2639,13 +2651,17 @@ void ClientTaskState::AddReplayTimer(Client* client, ClientTaskInformation& clie
|
||||
auto timer = CharacterTaskTimersRepository::NewEntity();
|
||||
timer.character_id = client->CharacterID();
|
||||
timer.task_id = client_task.task_id;
|
||||
timer.expire_time = expire_time;
|
||||
timer.timer_type = static_cast<int>(TaskTimerType::Replay);
|
||||
timer.timer_group = task.replay_timer_group;
|
||||
timer.expire_time = expire_time;
|
||||
|
||||
// replace any existing replay timer
|
||||
CharacterTaskTimersRepository::DeleteWhere(database, fmt::format(
|
||||
"task_id = {} AND timer_type = {} AND character_id = {}",
|
||||
client_task.task_id, static_cast<int>(TaskTimerType::Replay), client->CharacterID()));
|
||||
"(task_id = {} OR (timer_group > 0 AND timer_group = {})) AND timer_type = {} AND character_id = {}",
|
||||
client_task.task_id,
|
||||
task.replay_timer_group,
|
||||
static_cast<int>(TaskTimerType::Replay),
|
||||
client->CharacterID()));
|
||||
|
||||
CharacterTaskTimersRepository::InsertOne(database, timer);
|
||||
|
||||
|
||||
@@ -115,7 +115,9 @@ bool TaskManager::LoadTasks(int single_task)
|
||||
m_task_data[task_id]->max_players = task.max_players;
|
||||
m_task_data[task_id]->repeatable = task.repeatable;
|
||||
m_task_data[task_id]->completion_emote = task.completion_emote;
|
||||
m_task_data[task_id]->replay_timer_group = task.replay_timer_group;
|
||||
m_task_data[task_id]->replay_timer_seconds = task.replay_timer_seconds;
|
||||
m_task_data[task_id]->request_timer_group = task.request_timer_group;
|
||||
m_task_data[task_id]->request_timer_seconds = task.request_timer_seconds;
|
||||
m_task_data[task_id]->activity_count = 0;
|
||||
m_task_data[task_id]->sequence_mode = ActivitiesSequential;
|
||||
@@ -125,7 +127,7 @@ bool TaskManager::LoadTasks(int single_task)
|
||||
"[LoadTasks] (Task) task_id [{}] type [{}] () duration [{}] duration_code [{}] title [{}] description [{}] "
|
||||
" reward [{}] rewardid [{}] cashreward [{}] xpreward [{}] rewardmethod [{}] faction_reward [{}] minlevel [{}] "
|
||||
" maxlevel [{}] level_spread [{}] min_players [{}] max_players [{}] repeatable [{}] completion_emote [{}]",
|
||||
" replay_timer_seconds [{}] request_timer_seconds [{}]",
|
||||
" replay_group [{}] replay_timer_seconds [{}] request_group [{}] request_timer_seconds [{}]",
|
||||
task.id,
|
||||
task.type,
|
||||
task.duration,
|
||||
@@ -145,7 +147,9 @@ bool TaskManager::LoadTasks(int single_task)
|
||||
task.max_players,
|
||||
task.repeatable,
|
||||
task.completion_emote,
|
||||
task.replay_timer_group,
|
||||
task.replay_timer_seconds,
|
||||
task.request_timer_group,
|
||||
task.request_timer_seconds
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user