mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +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:
@@ -16,6 +16,7 @@
|
||||
#include "../../strings.h"
|
||||
#include <ctime>
|
||||
|
||||
|
||||
class BaseCharacterCorpseItemsRepository {
|
||||
public:
|
||||
struct CharacterCorpseItems {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "../../strings.h"
|
||||
#include <ctime>
|
||||
|
||||
|
||||
class BaseCharacterCorpsesRepository {
|
||||
public:
|
||||
struct CharacterCorpses {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef EQEMU_CHARACTER_CORPSES_REPOSITORY_H
|
||||
#define EQEMU_CHARACTER_CORPSES_REPOSITORY_H
|
||||
|
||||
#include <glm/vec4.hpp>
|
||||
#include "../database.h"
|
||||
#include "../strings.h"
|
||||
#include "base/base_character_corpses_repository.h"
|
||||
@@ -44,29 +45,191 @@ public:
|
||||
*/
|
||||
|
||||
// Custom extended repository methods here
|
||||
static int BuryInstance(Database& db, uint16 instance_id) {
|
||||
static int BuryCorpse(Database& db, uint32 corpse_id)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE {} SET is_buried = 1, instance_id = 0 WHERE instance_id = {}",
|
||||
"UPDATE `{}` SET `is_buried` = 1 WHERE `{}` = {}",
|
||||
TableName(),
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static int BuryDecayedCorpses(Database& db)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `is_buried` = 1 WHERE `is_buried` = 0 AND (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > {} AND time_of_death != 0",
|
||||
TableName(),
|
||||
RuleI(Character, CorpseDecayTimeMS) / 1000
|
||||
)
|
||||
);
|
||||
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static int BuryInstance(Database& db, uint16 instance_id)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET is_buried = 1, instance_id = 0 WHERE instance_id = {}",
|
||||
TableName(),
|
||||
instance_id
|
||||
)
|
||||
);
|
||||
|
||||
return (results.Success() ? results.RowsAffected() : 0);
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static int BuryInstances(Database& db, const std::string& joined_instance_ids)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE {} SET is_buried = 1, instance_id = 0 WHERE instance_id IN ({})",
|
||||
"UPDATE `{}` SET is_buried = 1, instance_id = 0 WHERE instance_id IN ({})",
|
||||
TableName(),
|
||||
joined_instance_ids
|
||||
)
|
||||
);
|
||||
|
||||
return (results.Success() ? results.RowsAffected() : 0);
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static uint32 GetDecayTimer(Database& db, uint32 corpse_id)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) FROM `{}` WHERE `{}` = {} AND `time_of_death` != 0",
|
||||
TableName(),
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
|
||||
if (!results.Success() || !results.RowCount()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
|
||||
return Strings::ToUnsignedInt(row[0]);
|
||||
}
|
||||
|
||||
static uint32 ResurrectCorpse(Database& db, uint32 corpse_id)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `is_rezzed` = 1 WHERE `{}` = {}",
|
||||
TableName(),
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static void SendAdventureCorpsesToGraveyard(
|
||||
Database& db,
|
||||
uint32 graveyard_zone_id,
|
||||
uint16 instance_id,
|
||||
const glm::vec4& position
|
||||
)
|
||||
{
|
||||
db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `zone_id` = {}, `instance_id` = 0, `x` = {:.2f}, `y` = {:.2f}, `z` = {:.2f}`, `heading` = {:.2f}, `was_at_graveyard` = 1 WHERE `instance_id` = {}",
|
||||
TableName(),
|
||||
graveyard_zone_id,
|
||||
position.x,
|
||||
position.y,
|
||||
position.z,
|
||||
position.w,
|
||||
instance_id
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
static int SendToGraveyard(
|
||||
Database& db,
|
||||
uint32 corpse_id,
|
||||
uint32 zone_id,
|
||||
uint16 instance_id,
|
||||
const glm::vec4& position
|
||||
)
|
||||
{
|
||||
db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `zone_id` = {}, `instance_id` = {}, `x` = {:.2f}, `y` = {:.2f}, `z` = {:.2f}`, `heading` = {:.2f}, `was_at_graveyard` = 1 WHERE `{}` = {}",
|
||||
TableName(),
|
||||
zone_id,
|
||||
instance_id,
|
||||
position.x,
|
||||
position.y,
|
||||
position.z,
|
||||
position.w,
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
|
||||
return corpse_id;
|
||||
}
|
||||
|
||||
static void SendToNonInstance(Database& db, uint32 corpse_id)
|
||||
{
|
||||
db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `instance_id` = 0 WHERE `{}` = {}",
|
||||
TableName(),
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
static uint32 SetGuildConsentID(Database& db, uint32 character_id, uint32 guild_consent_id)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `guild_consent_id` = {} WHERE `charid` = {}",
|
||||
TableName(),
|
||||
guild_consent_id,
|
||||
character_id
|
||||
)
|
||||
);
|
||||
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
|
||||
static int UnburyCorpse(
|
||||
Database& db,
|
||||
uint32 corpse_id,
|
||||
uint32 zone_id,
|
||||
uint16 instance_id,
|
||||
const glm::vec4& position
|
||||
)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `is_buried` = 0, `zone_id` = {}, `instance_id` = {}, `x` = {:.2f}, `y` = {:.2f}, `z` = {:.2f}, `heading` = {:.2f}, `time_of_death` = {}, `was_at_graveyard` = 0 WHERE `{}` = {}",
|
||||
TableName(),
|
||||
zone_id,
|
||||
instance_id,
|
||||
position.x,
|
||||
position.y,
|
||||
position.z,
|
||||
position.w,
|
||||
std::time(nullptr),
|
||||
PrimaryKey(),
|
||||
corpse_id
|
||||
)
|
||||
);
|
||||
|
||||
return results.Success() ? results.RowsAffected() : 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+13
-21
@@ -45,6 +45,7 @@
|
||||
#include "path_manager.h"
|
||||
#include "repositories/loottable_repository.h"
|
||||
#include "repositories/character_item_recast_repository.h"
|
||||
#include "repositories/character_corpses_repository.h"
|
||||
|
||||
namespace ItemField
|
||||
{
|
||||
@@ -1667,27 +1668,18 @@ EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16
|
||||
return inst;
|
||||
}
|
||||
|
||||
int32 SharedDatabase::DeleteStalePlayerCorpses() {
|
||||
if(RuleB(Zone, EnableShadowrest)) {
|
||||
const std::string query = StringFormat(
|
||||
"UPDATE `character_corpses` SET `is_buried` = 1 WHERE `is_buried` = 0 AND "
|
||||
"(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > %d AND NOT time_of_death = 0",
|
||||
(RuleI(Character, CorpseDecayTimeMS) / 1000));
|
||||
const auto results = QueryDatabase(query);
|
||||
if (!results.Success())
|
||||
return -1;
|
||||
|
||||
return results.RowsAffected();
|
||||
}
|
||||
|
||||
const std::string query = StringFormat(
|
||||
"DELETE FROM `character_corpses` WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > %d "
|
||||
"AND NOT time_of_death = 0", (RuleI(Character, CorpseDecayTimeMS) / 1000));
|
||||
const auto results = QueryDatabase(query);
|
||||
if (!results.Success())
|
||||
return -1;
|
||||
|
||||
return results.RowsAffected();
|
||||
int SharedDatabase::DeleteStalePlayerCorpses() {
|
||||
return (
|
||||
RuleB(Zone, EnableShadowrest) ?
|
||||
CharacterCorpsesRepository::BuryDecayedCorpses(*this) :
|
||||
CharacterCorpsesRepository::DeleteWhere(
|
||||
*this,
|
||||
fmt::format(
|
||||
"(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > {} AND time_of_death != 0",
|
||||
RuleI(Character, CorpseDecayTimeMS) / 1000
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
bool SharedDatabase::GetCommandSettings(std::map<std::string, std::pair<uint8, std::vector<std::string>>> &command_settings)
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ public:
|
||||
bool SetGMSpeed(uint32 account_id, uint8 gmspeed);
|
||||
uint8 GetGMSpeed(uint32 account_id);
|
||||
bool SetHideMe(uint32 account_id, uint8 hideme);
|
||||
int32 DeleteStalePlayerCorpses();
|
||||
int DeleteStalePlayerCorpses();
|
||||
void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct *message);
|
||||
void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct *message);
|
||||
bool GetCommandSettings(std::map<std::string, std::pair<uint8, std::vector<std::string>>> &command_settings);
|
||||
|
||||
Reference in New Issue
Block a user