mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-13 02:38:45 +00:00
Stub out some more functions
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "zonelist.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <unordered_set>
|
||||
|
||||
extern ClientList client_list;
|
||||
extern ZSList zoneserver_list;
|
||||
@@ -163,9 +164,70 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack)
|
||||
zoneserver_list.SendPacket(cle_leader->zone(), cle_leader->instance(), reply);
|
||||
safe_delete(reply);
|
||||
|
||||
task.Save();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Just sends the ID of the task that was successfully created zone side
|
||||
* We now need to tell all the other clients to join the task
|
||||
* We could probably try to find all the clients already in the zone and not
|
||||
* worry about them here, but it's simpler this way
|
||||
*/
|
||||
void SharedTaskManager::HandleTaskZoneCreated(ServerPacket *pack)
|
||||
{
|
||||
if (!pack)
|
||||
return;
|
||||
|
||||
int id = pack->ReadUInt32();
|
||||
|
||||
auto task = GetSharedTask(id);
|
||||
|
||||
if (!task) // hmm guess we should tell zone something is broken TODO
|
||||
return;
|
||||
|
||||
auto leader = task->GetLeader();
|
||||
|
||||
if (!leader) // hmmm
|
||||
return;
|
||||
|
||||
// if a zone server isn't in here, we need to send a serialized task state to them -- might not do this way :P
|
||||
std::unordered_set<ZoneServer *> zones;
|
||||
zones.insert(leader->cle->Server());
|
||||
|
||||
// we reuse this, easier this way
|
||||
auto outpack = new ServerPacket(ServerOP_TaskZoneCreated, sizeof(ServerSharedTaskMember_Struct));
|
||||
auto stm = (ServerSharedTaskMember_Struct *)outpack->pBuffer;
|
||||
stm->id = id;
|
||||
|
||||
ServerPacket *taskpack = nullptr; // if we have, we will create this
|
||||
|
||||
for (auto &&m : task->members) {
|
||||
if (m.leader) // leader done!
|
||||
continue;
|
||||
|
||||
if (!m.cle) // hmmm
|
||||
continue;
|
||||
|
||||
if (!m.cle->Server()) // hmm
|
||||
continue;
|
||||
|
||||
auto ret = zones.insert(m.cle->Server());
|
||||
if (ret.second) { // new zone! send serialized task
|
||||
if (!taskpack) { // we need to create the serialized packet
|
||||
}
|
||||
zoneserver_list.SendPacket(m.cle->zone(), m.cle->instance(), taskpack);
|
||||
}
|
||||
|
||||
strn0cpy(stm->name, m.name.c_str(), 64);
|
||||
zoneserver_list.SendPacket(m.cle->zone(), m.cle->instance(), outpack);
|
||||
}
|
||||
|
||||
safe_delete(outpack);
|
||||
safe_delete(taskpack);
|
||||
}
|
||||
|
||||
/*
|
||||
* Loads in the tasks and task_activity tables
|
||||
* We limit to shared to save some memory
|
||||
@@ -462,3 +524,7 @@ void SharedTask::SetCLESharedTasks()
|
||||
}
|
||||
}
|
||||
|
||||
void SharedTask::Save() const
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+19
-1
@@ -31,11 +31,20 @@ public:
|
||||
leader_name = name;
|
||||
}
|
||||
void MemberLeftGame(ClientListEntry *cle);
|
||||
const std::string &GetLeaderName() const { return leader_name; }
|
||||
inline const std::string &GetLeaderName() const { return leader_name; }
|
||||
inline SharedTaskMember *GetLeader() {
|
||||
auto it = std::find_if(members.begin(), members.end(), [](const SharedTaskMember &m) { return m.leader; });
|
||||
if (it != members.end())
|
||||
return &(*it);
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void SerializeMembers(SerializeBuffer &buf, bool include_leader = true) const;
|
||||
void SetCLESharedTasks();
|
||||
|
||||
void Save() const; // save to database
|
||||
|
||||
private:
|
||||
inline void SetID(int in) { id = in; }
|
||||
inline void SetTaskID(int in) { task_id = in; }
|
||||
@@ -62,8 +71,17 @@ public:
|
||||
|
||||
bool AppropriateLevel(int id, int level) const;
|
||||
|
||||
inline SharedTask *GetSharedTask(int id) {
|
||||
auto it = tasks.find(id);
|
||||
if (it != tasks.end())
|
||||
return &it->second;
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// IPC packet processing
|
||||
void HandleTaskRequest(ServerPacket *pack);
|
||||
void HandleTaskZoneCreated(ServerPacket *pack);
|
||||
|
||||
void Process();
|
||||
|
||||
|
||||
@@ -1356,6 +1356,11 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
|
||||
shared_tasks.HandleTaskRequest(pack);
|
||||
break;
|
||||
}
|
||||
case ServerOP_TaskZoneCreated:
|
||||
{
|
||||
shared_tasks.HandleTaskZoneCreated(pack);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
Log(Logs::Detail, Logs::World_Server, "Unknown ServerOPcode from zone 0x%04x, size %d", pack->opcode, pack->size);
|
||||
|
||||
Reference in New Issue
Block a user