mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
[Shared Tasks] Cleanup shared task request and remove (#2341)
Functionally nothing should change in this patch. This refactors a lot of formatting and code duplication in requests and member removals. The long SharedTaskMessage namespace and its constants were contributing to a lot of formatting that was difficult to read. These were shortened since they're not all shared task specific anyway (though they should probably just be moved to string_ids.h with other eqstrs now) Shared task requests were refactored a little to remove an unnecessary function that filled potential members. The separate functions used for /taskquit and /taskremove were also combined into a single function to remove a member while preserving live message differences.
This commit is contained in:
@@ -15420,7 +15420,7 @@ void Client::Handle_OP_SharedTaskAddPlayer(const EQApplicationPacket *app)
|
||||
|
||||
if (!GetTaskState()->HasActiveSharedTask()) {
|
||||
// this message is generated client-side in newer clients
|
||||
Message(Chat::System, SharedTaskMessage::GetEQStr(SharedTaskMessage::COULD_NOT_USE_COMMAND));
|
||||
Message(Chat::System, TaskStr::Get(TaskStr::COULD_NOT_USE_COMMAND));
|
||||
}
|
||||
else {
|
||||
// struct
|
||||
|
||||
@@ -53,11 +53,11 @@ void SharedTaskZoneMessaging::HandleWorldMessage(ServerPacket *pack)
|
||||
|
||||
break;
|
||||
}
|
||||
case ServerOP_SharedTaskAttemptRemove: {
|
||||
auto p = reinterpret_cast<ServerSharedTaskAttemptRemove_Struct *>(pack->pBuffer);
|
||||
case ServerOP_SharedTaskQuit: {
|
||||
auto p = reinterpret_cast<ServerSharedTaskQuit_Struct *>(pack->pBuffer);
|
||||
auto c = entity_list.GetClientByCharID(p->requested_character_id);
|
||||
if (c) {
|
||||
LogTasks("[ServerOP_SharedTaskAttemptRemove] We're back in zone and I found [{}]", c->GetCleanName());
|
||||
LogTasks("[ServerOP_SharedTaskQuit] We're back in zone and I found [{}]", c->GetCleanName());
|
||||
|
||||
c->m_requested_shared_task_removal = true;
|
||||
c->GetTaskState()->CancelTask(
|
||||
|
||||
+11
-13
@@ -2103,12 +2103,12 @@ void ClientTaskState::CancelTask(Client *c, int sequence_number, TaskType task_t
|
||||
if (!c->m_requested_shared_task_removal && task_type == TaskType::Shared && m_active_shared_task.task_id != 0) {
|
||||
|
||||
// struct
|
||||
auto pack = new ServerPacket(ServerOP_SharedTaskAttemptRemove, sizeof(ServerSharedTaskAttemptRemove_Struct));
|
||||
auto *r = (ServerSharedTaskAttemptRemove_Struct *) pack->pBuffer;
|
||||
auto pack = new ServerPacket(ServerOP_SharedTaskQuit, sizeof(ServerSharedTaskQuit_Struct));
|
||||
auto *r = (ServerSharedTaskQuit_Struct *) pack->pBuffer;
|
||||
|
||||
// fill
|
||||
r->requested_character_id = c->CharacterID();
|
||||
r->requested_task_id = m_active_shared_task.task_id;
|
||||
r->task_id = m_active_shared_task.task_id;
|
||||
r->remove_from_db = remove_from_db;
|
||||
|
||||
// send
|
||||
@@ -2351,16 +2351,14 @@ void ClientTaskState::AcceptNewTask(
|
||||
auto mins = fmt::format_int((seconds / 60) % 60).str();
|
||||
|
||||
// these solo task messages are in SharedTaskMessage for convenience
|
||||
namespace EQStr = SharedTaskMessage;
|
||||
if (timer_type == TaskTimerType::Replay)
|
||||
{
|
||||
int eqstr_id = EQStr::TASK_ASSIGN_WAIT_REPLAY_TIMER;
|
||||
client->MessageString(Chat::Red, eqstr_id, days.c_str(), hours.c_str(), mins.c_str());
|
||||
client->MessageString(Chat::Red, TaskStr::ASSIGN_REPLAY_TIMER, days.c_str(), hours.c_str(), mins.c_str());
|
||||
}
|
||||
else if (timer_type == TaskTimerType::Request)
|
||||
{
|
||||
int eqstr_id = EQStr::TASK_ASSIGN_WAIT_REQUEST_TIMER;
|
||||
client->Message(Chat::Red, fmt::format(EQStr::GetEQStr(eqstr_id), days, hours, mins).c_str());
|
||||
auto eqstr = TaskStr::Get(TaskStr::ASSIGN_REQUEST_TIMER);
|
||||
client->Message(Chat::Red, fmt::format(eqstr, days, hours, mins).c_str());
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -2444,7 +2442,7 @@ void ClientTaskState::AcceptNewTask(
|
||||
}
|
||||
|
||||
client->Message(Chat::Yellow, fmt::format(
|
||||
SharedTaskMessage::GetEQStr(SharedTaskMessage::RECEIVED_REQUEST_TIMER),
|
||||
TaskStr::Get(TaskStr::RECEIVED_REQUEST_TIMER),
|
||||
task->title,
|
||||
fmt::format_int(seconds / 86400).c_str(), // days
|
||||
fmt::format_int((seconds / 3600) % 24).c_str(), // hours
|
||||
@@ -2625,19 +2623,19 @@ void ClientTaskState::ListTaskTimers(Client* client)
|
||||
|
||||
if (timer_type == TaskTimerType::Replay)
|
||||
{
|
||||
client->MessageString(Chat::Yellow, SharedTaskMessage::REPLAY_TIMER_REMAINING,
|
||||
client->MessageString(Chat::Yellow, TaskStr::REPLAY_TIMER_REMAINING,
|
||||
task->title.c_str(), days.c_str(), hours.c_str(), mins.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
auto eqstr = SharedTaskMessage::GetEQStr(SharedTaskMessage::REQUEST_TIMER_REMAINING);
|
||||
auto eqstr = TaskStr::Get(TaskStr::REQUEST_TIMER_REMAINING);
|
||||
client->Message(Chat::Yellow, fmt::format(eqstr, task->title, days, hours, mins).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (character_task_timers.empty()) {
|
||||
client->MessageString(Chat::Yellow, SharedTaskMessage::YOU_NO_CURRENT_REPLAY_TIMERS);
|
||||
client->MessageString(Chat::Yellow, TaskStr::NO_REPLAY_TIMERS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2666,7 +2664,7 @@ void ClientTaskState::AddReplayTimer(Client* client, ClientTaskInformation& clie
|
||||
CharacterTaskTimersRepository::InsertOne(database, timer);
|
||||
|
||||
client->Message(Chat::Yellow, fmt::format(
|
||||
SharedTaskMessage::GetEQStr(SharedTaskMessage::RECEIVED_REPLAY_TIMER),
|
||||
TaskStr::Get(TaskStr::RECEIVED_REPLAY_TIMER),
|
||||
task.title,
|
||||
fmt::format_int(task.replay_timer_seconds / 86400).c_str(), // days
|
||||
fmt::format_int((task.replay_timer_seconds / 3600) % 24).c_str(), // hours
|
||||
|
||||
+11
-18
@@ -696,11 +696,12 @@ void TaskManager::SharedTaskSelector(Client *client, Mob *mob, int count, const
|
||||
|
||||
// check if requester already has a shared task (no need to query group/raid members if so)
|
||||
if (client->GetTaskState()->HasActiveSharedTask()) {
|
||||
client->MessageString(Chat::Red, SharedTaskMessage::NO_REQUEST_BECAUSE_HAVE_ONE);
|
||||
client->MessageString(Chat::Red, TaskStr::REQUEST_HAVE);
|
||||
return;
|
||||
}
|
||||
|
||||
// get group/raid member character data from db (need to query for character ids)
|
||||
// todo: group/raids need refactored to avoid queries and ignore offline members (through world)
|
||||
auto request = SharedTask::GetRequestCharacters(database, client->CharacterID());
|
||||
|
||||
// check if any group/raid member already has a shared task (already checked solo character)
|
||||
@@ -713,25 +714,17 @@ void TaskManager::SharedTaskSelector(Client *client, Mob *mob, int count, const
|
||||
if (!shared_task_members.empty()) {
|
||||
validation_failed = true;
|
||||
|
||||
auto it = std::find_if(
|
||||
request.characters.begin(), request.characters.end(),
|
||||
[&](const CharacterDataRepository::CharacterData &char_data) {
|
||||
return char_data.id == shared_task_members.front().character_id;
|
||||
}
|
||||
);
|
||||
auto it = std::find_if(request.members.begin(), request.members.end(),
|
||||
[&](const SharedTaskMember& member) {
|
||||
return member.character_id == shared_task_members.front().character_id;
|
||||
});
|
||||
|
||||
if (it != request.characters.end()) {
|
||||
if (it != request.members.end()) {
|
||||
if (request.group_type == SharedTaskRequestGroupType::Group) {
|
||||
client->MessageString(
|
||||
Chat::Red,
|
||||
SharedTaskMessage::NO_REQUEST_BECAUSE_GROUP_HAS_ONE,
|
||||
it->name.c_str());
|
||||
client->MessageString(Chat::Red, TaskStr::REQUEST_GROUP_HAS, it->character_name.c_str());
|
||||
}
|
||||
else {
|
||||
client->MessageString(
|
||||
Chat::Red,
|
||||
SharedTaskMessage::NO_REQUEST_BECAUSE_RAID_HAS_ONE,
|
||||
it->name.c_str());
|
||||
client->MessageString(Chat::Red, TaskStr::REQUEST_RAID_HAS, it->character_name.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -758,7 +751,7 @@ void TaskManager::SharedTaskSelector(Client *client, Mob *mob, int count, const
|
||||
SendSharedTaskSelector(client, mob, task_list_index, task_list);
|
||||
}
|
||||
else {
|
||||
client->MessageString(Chat::Red, SharedTaskMessage::YOU_DO_NOT_MEET_REQ_AVAILABLE);
|
||||
client->MessageString(Chat::Red, TaskStr::NOT_MEET_REQ);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1748,7 +1741,7 @@ void TaskManager::SyncClientSharedTaskRemoveLocalIfNotExists(Client *c, ClientTa
|
||||
CharacterTasksRepository::DeleteWhere(database, delete_where);
|
||||
CharacterActivitiesRepository::DeleteWhere(database, delete_where);
|
||||
|
||||
c->MessageString(Chat::Yellow, SharedTaskMessage::YOU_ARE_NO_LONGER_A_MEMBER,
|
||||
c->MessageString(Chat::Yellow, TaskStr::NO_LONGER_MEMBER_TITLE,
|
||||
m_task_data[cts->m_active_shared_task.task_id]->title.c_str());
|
||||
|
||||
// remove as active task if doesn't exist
|
||||
|
||||
@@ -3236,7 +3236,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
||||
}
|
||||
case ServerOP_SharedTaskAcceptNewTask:
|
||||
case ServerOP_SharedTaskUpdate:
|
||||
case ServerOP_SharedTaskAttemptRemove:
|
||||
case ServerOP_SharedTaskQuit:
|
||||
case ServerOP_SharedTaskMemberlist:
|
||||
case ServerOP_SharedTaskMemberChange:
|
||||
case ServerOP_SharedTaskInvitePlayer:
|
||||
|
||||
Reference in New Issue
Block a user