More shared tasks stuff

Mostly just OOZ checking
This commit is contained in:
Michael Cook (mackal)
2018-09-05 16:04:49 -04:00
parent 8934235030
commit 93133c289e
8 changed files with 147 additions and 3 deletions
+1
View File
@@ -1038,6 +1038,7 @@ public:
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) { if (taskstate) taskstate->AcceptNewSharedTask(this, TaskID, NPCID, id); }
inline void HandleCanJoinSharedTask(int TaskID, int id) { if (taskstate) taskstate->HandleCanJoinSharedTask(this, TaskID, id); }
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); }
+76 -1
View File
@@ -3455,6 +3455,7 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo
if (!task_state->HasSlotForTask(task)) {
task_failed = true;
c->Message_StringID(13, TASK_REJECT_GROUP_HAVE_ONE, c->GetName());
break;
} else {
if (task->replay_group) {
auto expires = client->GetTaskLockoutExpire(task->replay_group);
@@ -3472,6 +3473,7 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo
client->Message_StringID(13, TASK_REJECT_LOCKEDOUT_ME,
days.c_str(), hours.c_str(),
minutes.c_str());
break;
}
}
}
@@ -3492,6 +3494,7 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo
if (!task_state->HasSlotForTask(task)) {
task_failed = true;
c->Message_StringID(13, TASK_REJECT_RAID_HAVE_ONE, c->GetName());
break;
} else {
if (task->replay_group) {
auto expires = client->GetTaskLockoutExpire(task->replay_group);
@@ -3509,6 +3512,7 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo
client->Message_StringID(13, TASK_REJECT_LOCKEDOUT_ME,
days.c_str(), hours.c_str(),
minutes.c_str());
break;
}
}
}
@@ -3518,8 +3522,10 @@ void ClientTaskState::PendSharedTask(Client *c, int TaskID, int NPCID, bool enfo
}
}
if (task_failed) // we already yelled at them
if (task_failed) { // we already yelled at them
c->ResetPendingTask();
return;
}
// so we've verified all the clients we can and didn't fail, time to pend and yell at world
c->SetPendingTask(TaskID, NPCID);
@@ -3542,6 +3548,75 @@ void ClientTaskState::AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int
}
void ClientTaskState::HandleCanJoinSharedTask(Client *c, int TaskID, int id)
{
if (!c)
return;
SerializeBuffer buf(15);
buf.WriteInt32(id);
buf.WriteString(c->GetName());
if (!taskmanager || TaskID < 0 || TaskID >= MAXTASKS) {
buf.WriteInt32(TASKJOINOOZ_NOTASK);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
auto task = taskmanager->Tasks[TaskID];
if (task == nullptr) {
buf.WriteInt32(TASKJOINOOZ_NOTASK);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
if (task->type != TaskType::Shared) {
buf.WriteInt32(TASKJOINOOZ_NOTASK);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
if (ActiveSharedTask != nullptr) {
buf.WriteInt32(TASKJOINOOZ_HAVEONE);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
if (!taskmanager->AppropriateLevel(TaskID, c->GetLevel())) {
buf.WriteInt32(TASKJOINOOZ_LEVEL);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
if (task->replay_group) {
auto expires = c->GetTaskLockoutExpire(task->replay_group);
if (expires) {
buf.WriteInt32(TASKJOINOOZ_TIMER);
buf.WriteInt32(expires);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
return;
}
}
buf.WriteInt32(TASKJOINOOZ_CAN);
auto pack = new ServerPacket(ServerOP_TaskRequestReply, buf);
worldserver.SendPacket(pack);
delete pack;
}
void ClientTaskState::ProcessTaskProximities(Client *c, float X, float Y, float Z) {
float LastX = c->ProximityX();
+1
View File
@@ -267,6 +267,7 @@ public:
void AcceptNewTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement = false);
void AcceptNewSharedTask(Client *c, int TaskID, int NPCID, int id);
void PendSharedTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement = false);
void HandleCanJoinSharedTask(Client *c, int TaskID, int id);
void FailTask(Client *c, int TaskID);
int TaskTimeLeft(int TaskID);
int IsTaskCompleted(int TaskID);
+1 -1
View File
@@ -1970,7 +1970,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
pack->ReadString(name);
auto client = entity_list.GetClientByName(name);
if (client) {
// do check
client->HandleCanJoinSharedTask(task_id, id);
}
break;
}