mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 17:51:28 +00:00
[Instances] Convert Instance Quest Methods to Repositories (#4012)
* [Instances] Convert Instance Quest Methods to Repositories # Notes - Convert `UpdateInstanceTimer()` and `GetInstanceTimerByID()` to repositories. - Cleanup other instance methods. * Update questmgr.cpp
This commit is contained in:
parent
5b85f89c21
commit
e9285fd2ca
@ -45,14 +45,41 @@ public:
|
|||||||
|
|
||||||
// Custom extended repository methods here
|
// Custom extended repository methods here
|
||||||
|
|
||||||
static int UpdateDuration(Database& db, int instance_id, uint32_t new_duration)
|
static int UpdateDuration(Database& db, uint16 instance_id, uint32_t new_duration)
|
||||||
{
|
{
|
||||||
auto results = db.QueryDatabase(fmt::format(
|
auto results = db.QueryDatabase(
|
||||||
"UPDATE {} SET duration = {} WHERE {} = {};",
|
fmt::format(
|
||||||
TableName(), new_duration, PrimaryKey(), instance_id
|
"UPDATE `{}` SET `duration` = {} WHERE `{}` = {}",
|
||||||
));
|
TableName(),
|
||||||
|
new_duration,
|
||||||
|
PrimaryKey(),
|
||||||
|
instance_id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
return (results.Success() ? results.RowsAffected() : 0);
|
return results.Success() ? results.RowsAffected() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32 GetRemainingTimeByInstanceID(Database& db, uint16 instance_id)
|
||||||
|
{
|
||||||
|
auto results = db.QueryDatabase(
|
||||||
|
fmt::format(
|
||||||
|
SQL(
|
||||||
|
SELECT ((start_time + duration) - UNIX_TIMESTAMP()) AS `remaining` FROM `{}`
|
||||||
|
WHERE `id` = {}
|
||||||
|
),
|
||||||
|
TableName(),
|
||||||
|
instance_id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!results.Success() || !results.RowCount()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
|
||||||
|
return Strings::ToUnsignedInt(row[0]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -40,6 +40,7 @@
|
|||||||
#include "dialogue_window.h"
|
#include "dialogue_window.h"
|
||||||
|
|
||||||
#include "../common/repositories/tradeskill_recipe_repository.h"
|
#include "../common/repositories/tradeskill_recipe_repository.h"
|
||||||
|
#include "../common/repositories/instance_list_repository.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
@ -3239,7 +3240,7 @@ std::string QuestManager::getcleannpcnamebyid(uint32 npc_id) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 QuestManager::CreateInstance(const char *zone_short_name, int16 instance_version, uint32 duration)
|
uint16 QuestManager::CreateInstance(const std::string& zone_short_name, int16 instance_version, uint32 duration)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
|
|
||||||
@ -3275,57 +3276,56 @@ void QuestManager::DestroyInstance(uint16 instance_id)
|
|||||||
|
|
||||||
void QuestManager::UpdateInstanceTimer(uint16 instance_id, uint32 new_duration)
|
void QuestManager::UpdateInstanceTimer(uint16 instance_id, uint32 new_duration)
|
||||||
{
|
{
|
||||||
std::string query = StringFormat("UPDATE instance_list SET duration = %lu, start_time = UNIX_TIMESTAMP() WHERE id = %lu",
|
auto e = InstanceListRepository::FindOne(database, instance_id);
|
||||||
(unsigned long)new_duration, (unsigned long)instance_id);
|
|
||||||
auto results = database.QueryDatabase(query);
|
|
||||||
|
|
||||||
if (results.Success()) {
|
if (!e.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.duration = new_duration;
|
||||||
|
e.start_time = std::time(nullptr);
|
||||||
|
|
||||||
|
const int updated = InstanceListRepository::UpdateOne(database, e);
|
||||||
|
|
||||||
|
if (updated) {
|
||||||
auto pack = new ServerPacket(ServerOP_InstanceUpdateTime, sizeof(ServerInstanceUpdateTime_Struct));
|
auto pack = new ServerPacket(ServerOP_InstanceUpdateTime, sizeof(ServerInstanceUpdateTime_Struct));
|
||||||
ServerInstanceUpdateTime_Struct *ut = (ServerInstanceUpdateTime_Struct*) pack->pBuffer;
|
|
||||||
|
auto ut = (ServerInstanceUpdateTime_Struct*) pack->pBuffer;
|
||||||
|
|
||||||
ut->instance_id = instance_id;
|
ut->instance_id = instance_id;
|
||||||
ut->new_duration = new_duration;
|
ut->new_duration = new_duration;
|
||||||
|
|
||||||
worldserver.SendPacket(pack);
|
worldserver.SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 QuestManager::GetInstanceTimer() {
|
uint32 QuestManager::GetInstanceTimer()
|
||||||
if (zone && zone->GetInstanceID() > 0 && zone->GetInstanceTimer()) {
|
{
|
||||||
uint32 ttime = zone->GetInstanceTimer()->GetRemainingTime();
|
if (zone && zone->GetInstanceID() && zone->GetInstanceTimer()) {
|
||||||
return ttime;
|
return zone->GetInstanceTimer()->GetRemainingTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 QuestManager::GetInstanceTimerByID(uint16 instance_id) {
|
uint32 QuestManager::GetInstanceTimerByID(uint16 instance_id)
|
||||||
if (instance_id == 0)
|
{
|
||||||
return 0;
|
return instance_id ? InstanceListRepository::GetRemainingTimeByInstanceID(database, instance_id) : 0;
|
||||||
|
|
||||||
std::string query = StringFormat("SELECT ((start_time + duration) - UNIX_TIMESTAMP()) AS `remaining` FROM `instance_list` WHERE `id` = %lu", (unsigned long)instance_id);
|
|
||||||
auto results = database.QueryDatabase(query);
|
|
||||||
|
|
||||||
if (results.Success()) {
|
|
||||||
auto row = results.begin();
|
|
||||||
uint32 timer = Strings::ToInt(row[0]);
|
|
||||||
return timer;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 QuestManager::GetInstanceID(const char *zone, int16 version)
|
uint16 QuestManager::GetInstanceID(const char *zone, int16 version)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
return initiator ? database.GetInstanceID(ZoneID(zone), initiator->CharacterID(), version) : 0;
|
||||||
return database.GetInstanceID(ZoneID(zone), initiator->CharacterID(), version);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint16> QuestManager::GetInstanceIDs(std::string zone_name, uint32 character_id)
|
std::vector<uint16> QuestManager::GetInstanceIDs(std::string zone_name, uint32 character_id)
|
||||||
{
|
{
|
||||||
if (!character_id) {
|
if (!character_id) {
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
|
|
||||||
if (initiator) {
|
if (initiator) {
|
||||||
return database.GetInstanceIDs(ZoneID(zone_name), initiator->CharacterID());
|
return database.GetInstanceIDs(ZoneID(zone_name), initiator->CharacterID());
|
||||||
}
|
}
|
||||||
@ -3336,33 +3336,37 @@ std::vector<uint16> QuestManager::GetInstanceIDs(std::string zone_name, uint32 c
|
|||||||
return database.GetInstanceIDs(ZoneID(zone_name), character_id);
|
return database.GetInstanceIDs(ZoneID(zone_name), character_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 QuestManager::GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id) {
|
uint16 QuestManager::GetInstanceIDByCharID(
|
||||||
return database.GetInstanceID(ZoneID(zone), char_id, version);
|
const std::string &zone_short_name,
|
||||||
|
int16 instance_version,
|
||||||
|
uint32 character_id
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return database.GetInstanceID(ZoneID(zone_short_name), character_id, instance_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::AssignToInstance(uint16 instance_id)
|
void QuestManager::AssignToInstance(uint16 instance_id)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
database.AddClientToInstance(instance_id, initiator->CharacterID());
|
database.AddClientToInstance(instance_id, initiator->CharacterID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::AssignToInstanceByCharID(uint16 instance_id, uint32 char_id) {
|
void QuestManager::AssignToInstanceByCharID(uint16 instance_id, uint32 character_id)
|
||||||
database.AddClientToInstance(instance_id, char_id);
|
{
|
||||||
|
database.AddClientToInstance(instance_id, character_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::AssignGroupToInstance(uint16 instance_id)
|
void QuestManager::AssignGroupToInstance(uint16 instance_id)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
Group* g = initiator->GetGroup();
|
Group* g = initiator->GetGroup();
|
||||||
if (g)
|
if (g) {
|
||||||
{
|
database.AssignGroupToInstance(g->GetID(), instance_id);
|
||||||
uint32 gid = g->GetID();
|
|
||||||
database.AssignGroupToInstance(gid, instance_id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3370,13 +3374,11 @@ void QuestManager::AssignGroupToInstance(uint16 instance_id)
|
|||||||
void QuestManager::AssignRaidToInstance(uint16 instance_id)
|
void QuestManager::AssignRaidToInstance(uint16 instance_id)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
Raid* r = initiator->GetRaid();
|
Raid* r = initiator->GetRaid();
|
||||||
if(r)
|
if (r) {
|
||||||
{
|
database.AssignRaidToInstance(r->GetID(), instance_id);
|
||||||
uint32 rid = r->GetID();
|
|
||||||
database.AssignRaidToInstance(rid, instance_id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3384,14 +3386,15 @@ void QuestManager::AssignRaidToInstance(uint16 instance_id)
|
|||||||
void QuestManager::RemoveFromInstance(uint16 instance_id)
|
void QuestManager::RemoveFromInstance(uint16 instance_id)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
if (database.RemoveClientFromInstance(instance_id, initiator->CharacterID()))
|
if (database.RemoveClientFromInstance(instance_id, initiator->CharacterID())) {
|
||||||
initiator->Message(Chat::Say, "Removed client from instance.");
|
initiator->Message(Chat::Say, "Removed client from instance.");
|
||||||
else
|
} else {
|
||||||
initiator->Message(Chat::Say, "Failed to remove client from instance.");
|
initiator->Message(Chat::Say, "Failed to remove client from instance.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QuestManager::RemoveFromInstanceByCharID(uint16 instance_id, uint32 char_id) {
|
void QuestManager::RemoveFromInstanceByCharID(uint16 instance_id, uint32 char_id) {
|
||||||
database.RemoveClientFromInstance(instance_id, char_id);
|
database.RemoveClientFromInstance(instance_id, char_id);
|
||||||
@ -3404,16 +3407,22 @@ bool QuestManager::CheckInstanceByCharID(uint16 instance_id, uint32 char_id) {
|
|||||||
void QuestManager::RemoveAllFromInstance(uint16 instance_id)
|
void QuestManager::RemoveAllFromInstance(uint16 instance_id)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
std::list<uint32> character_ids;
|
std::list<uint32> character_ids;
|
||||||
|
|
||||||
if (database.RemoveClientsFromInstance(instance_id))
|
if (database.RemoveClientsFromInstance(instance_id)) {
|
||||||
initiator->Message(Chat::Say, "Removed all players from instance.");
|
initiator->Message(Chat::Say, "Removed all players from instance.");
|
||||||
else
|
} else {
|
||||||
{
|
|
||||||
database.GetCharactersInInstance(instance_id, character_ids);
|
database.GetCharactersInInstance(instance_id, character_ids);
|
||||||
initiator->Message(Chat::Say, "Failed to remove %i player(s) from instance.", character_ids.size()); // once the expedition system is in, this message it not relevant
|
initiator->Message(
|
||||||
|
Chat::Say,
|
||||||
|
fmt::format(
|
||||||
|
"Failed to remove {} player{} from instance.",
|
||||||
|
character_ids.size(),
|
||||||
|
character_ids.size() != 1 ? "s" : ""
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3421,8 +3430,8 @@ void QuestManager::RemoveAllFromInstance(uint16 instance_id)
|
|||||||
void QuestManager::MovePCInstance(int zone_id, int instance_id, const glm::vec4& position)
|
void QuestManager::MovePCInstance(int zone_id, int instance_id, const glm::vec4& position)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if(initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
initiator->MovePC(zone_id, instance_id, position.x, position.y, position.z, position.w);
|
initiator->MovePC(zone_id, instance_id, position.x, position.y, position.z, position.w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3430,8 +3439,8 @@ void QuestManager::MovePCInstance(int zone_id, int instance_id, const glm::vec4&
|
|||||||
void QuestManager::FlagInstanceByGroupLeader(uint32 zone, int16 version)
|
void QuestManager::FlagInstanceByGroupLeader(uint32 zone, int16 version)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if(initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
Group* g = initiator->GetGroup();
|
Group* g = initiator->GetGroup();
|
||||||
if (g) {
|
if (g) {
|
||||||
database.FlagInstanceByGroupLeader(zone, version, initiator->CharacterID(), g->GetID());
|
database.FlagInstanceByGroupLeader(zone, version, initiator->CharacterID(), g->GetID());
|
||||||
@ -3442,11 +3451,10 @@ void QuestManager::FlagInstanceByGroupLeader(uint32 zone, int16 version)
|
|||||||
void QuestManager::FlagInstanceByRaidLeader(uint32 zone, int16 version)
|
void QuestManager::FlagInstanceByRaidLeader(uint32 zone, int16 version)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if(initiator)
|
|
||||||
{
|
if (initiator) {
|
||||||
Raid* r = initiator->GetRaid();
|
Raid* r = initiator->GetRaid();
|
||||||
if(r)
|
if (r) {
|
||||||
{
|
|
||||||
database.FlagInstanceByRaidLeader(zone, version, initiator->CharacterID(), r->GetID());
|
database.FlagInstanceByRaidLeader(zone, version, initiator->CharacterID(), r->GetID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -262,7 +262,7 @@ public:
|
|||||||
void UpdateSpawnTimer(uint32 id, uint32 newTime);
|
void UpdateSpawnTimer(uint32 id, uint32 newTime);
|
||||||
void MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity = 0);
|
void MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity = 0);
|
||||||
uint32 MerchantCountItem(uint32 NPCid, uint32 itemid);
|
uint32 MerchantCountItem(uint32 NPCid, uint32 itemid);
|
||||||
uint16 CreateInstance(const char *zone_short_name, int16 instance_version, uint32 duration);
|
uint16 CreateInstance(const std::string& zone_short_name, int16 instance_version, uint32 duration);
|
||||||
void UpdateInstanceTimer(uint16 instance_id, uint32 new_duration);
|
void UpdateInstanceTimer(uint16 instance_id, uint32 new_duration);
|
||||||
void UpdateZoneHeader(std::string type, std::string value);
|
void UpdateZoneHeader(std::string type, std::string value);
|
||||||
uint32 GetInstanceTimer();
|
uint32 GetInstanceTimer();
|
||||||
@ -270,7 +270,7 @@ public:
|
|||||||
void DestroyInstance(uint16 instance_id);
|
void DestroyInstance(uint16 instance_id);
|
||||||
uint16 GetInstanceID(const char *zone, int16 version);
|
uint16 GetInstanceID(const char *zone, int16 version);
|
||||||
std::vector<uint16> GetInstanceIDs(std::string zone_name, uint32 character_id = 0);
|
std::vector<uint16> GetInstanceIDs(std::string zone_name, uint32 character_id = 0);
|
||||||
uint16 GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id);
|
uint16 GetInstanceIDByCharID(const std::string& zone_short_name, int16 instance_version, uint32 character_id);
|
||||||
void AssignToInstance(uint16 instance_id);
|
void AssignToInstance(uint16 instance_id);
|
||||||
void AssignToInstanceByCharID(uint16 instance_id, uint32 char_id);
|
void AssignToInstanceByCharID(uint16 instance_id, uint32 char_id);
|
||||||
void AssignGroupToInstance(uint16 instance_id);
|
void AssignGroupToInstance(uint16 instance_id);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user