mirror of
https://github.com/EQEmu/Server.git
synced 2026-08-30 17:58:16 +00:00
[Character] Convert Character Corpses to Repositories (#3941)
* asdsa * Final push * Update character_corpses_repository.h * Update character_corpses_repository.h * Update zonedb.cpp * Update zonedb.cpp * Final push * Update character_corpses_repository.h
This commit is contained in:
+35
-34
@@ -1,3 +1,4 @@
|
||||
#include <glm/vec4.hpp>
|
||||
#include "../common/global_define.h"
|
||||
#include "../common/servertalk.h"
|
||||
#include "../common/extprofile.h"
|
||||
@@ -12,6 +13,7 @@
|
||||
#include "clientlist.h"
|
||||
#include "cliententry.h"
|
||||
#include "../common/zone_store.h"
|
||||
#include "../common/repositories/character_corpses_repository.h"
|
||||
|
||||
extern ZSList zoneserver_list;
|
||||
extern ClientList client_list;
|
||||
@@ -370,54 +372,53 @@ void Adventure::Finished(AdventureWinStatus ws)
|
||||
|
||||
void Adventure::MoveCorpsesToGraveyard()
|
||||
{
|
||||
if(GetTemplate()->graveyard_zone_id == 0)
|
||||
{
|
||||
if (GetTemplate()->graveyard_zone_id == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::list<uint32> dbid_list;
|
||||
std::list<uint32> charid_list;
|
||||
glm::vec4 position;
|
||||
|
||||
std::string query = StringFormat("SELECT id, charid FROM character_corpses WHERE instance_id=%d", GetInstanceID());
|
||||
auto results = database.QueryDatabase(query);
|
||||
if(!results.Success())
|
||||
float x = GetTemplate()->graveyard_x + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
|
||||
float y = GetTemplate()->graveyard_y + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
|
||||
float z = GetTemplate()->graveyard_z;
|
||||
|
||||
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||
dbid_list.push_back(Strings::ToInt(row[0]));
|
||||
charid_list.push_back(Strings::ToInt(row[1]));
|
||||
}
|
||||
position.x = x;
|
||||
position.y = y;
|
||||
position.z = z;
|
||||
position.w = 0.0f;
|
||||
|
||||
for (auto &elem : dbid_list) {
|
||||
float x = GetTemplate()->graveyard_x + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
|
||||
float y = GetTemplate()->graveyard_y + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
|
||||
float z = GetTemplate()->graveyard_z;
|
||||
CharacterCorpsesRepository::SendAdventureCorpsesToGraveyard(database, GetTemplate()->graveyard_zone_id, GetInstanceID(), position);
|
||||
|
||||
query = StringFormat("UPDATE character_corpses "
|
||||
"SET zone_id = %d, instance_id = 0, "
|
||||
"x = %f, y = %f, z = %f WHERE instance_id = %d",
|
||||
GetTemplate()->graveyard_zone_id,
|
||||
x, y, z, GetInstanceID());
|
||||
database.QueryDatabase(query);
|
||||
}
|
||||
const auto& l = CharacterCorpsesRepository::GetWhere(
|
||||
database,
|
||||
fmt::format(
|
||||
"`instance_id` = {}",
|
||||
GetInstanceID()
|
||||
)
|
||||
);
|
||||
|
||||
for (const auto& e : l) {
|
||||
auto pack = new ServerPacket(ServerOP_DepopAllPlayersCorpses, sizeof(ServerDepopAllPlayersCorpses_Struct));
|
||||
|
||||
auto d = (ServerDepopAllPlayersCorpses_Struct*) pack->pBuffer;
|
||||
|
||||
d->CharacterID = e.charid;
|
||||
d->InstanceID = 0;
|
||||
d->ZoneID = GetTemplate()->graveyard_zone_id;
|
||||
|
||||
auto c_iter = charid_list.begin();
|
||||
for (auto iter = dbid_list.begin(); iter != dbid_list.end(); ++iter, ++c_iter)
|
||||
{
|
||||
auto pack =
|
||||
new ServerPacket(ServerOP_DepopAllPlayersCorpses, sizeof(ServerDepopAllPlayersCorpses_Struct));
|
||||
ServerDepopAllPlayersCorpses_Struct *dpc = (ServerDepopAllPlayersCorpses_Struct*)pack->pBuffer;
|
||||
dpc->CharacterID = (*c_iter);
|
||||
dpc->InstanceID = 0;
|
||||
dpc->ZoneID = GetTemplate()->graveyard_zone_id;
|
||||
zoneserver_list.SendPacket(0, GetInstanceID(), pack);
|
||||
|
||||
delete pack;
|
||||
|
||||
pack = new ServerPacket(ServerOP_SpawnPlayerCorpse, sizeof(SpawnPlayerCorpse_Struct));
|
||||
SpawnPlayerCorpse_Struct* spc = (SpawnPlayerCorpse_Struct*)pack->pBuffer;
|
||||
spc->player_corpse_id = (*iter);
|
||||
spc->zone_id = GetTemplate()->graveyard_zone_id;
|
||||
|
||||
auto spc = (SpawnPlayerCorpse_Struct*) pack->pBuffer;
|
||||
|
||||
spc->player_corpse_id = e.id;
|
||||
spc->zone_id = GetTemplate()->graveyard_zone_id;
|
||||
|
||||
zoneserver_list.SendPacket(spc->zone_id, 0, pack);
|
||||
|
||||
delete pack;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user