Logs::QSServer to LogInfo

This commit is contained in:
Akkadius 2019-09-02 04:23:50 -05:00
parent 89bfbe6bd2
commit acae5d81ab
3 changed files with 268 additions and 216 deletions

View File

@ -39,8 +39,10 @@
#define strncasecmp _strnicmp #define strncasecmp _strnicmp
#define strcasecmp _stricmp #define strcasecmp _stricmp
#else #else
#include "../common/unix.h" #include "../common/unix.h"
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
#include "database.h" #include "database.h"
@ -48,7 +50,7 @@
#include "../common/string_util.h" #include "../common/string_util.h"
#include "../common/servertalk.h" #include "../common/servertalk.h"
Database::Database () Database::Database()
{ {
DBInitVars(); DBInitVars();
} }
@ -57,37 +59,36 @@ Database::Database ()
Establish a connection to a mysql database with the supplied parameters Establish a connection to a mysql database with the supplied parameters
*/ */
Database::Database(const char* host, const char* user, const char* passwd, const char* database, uint32 port) Database::Database(const char *host, const char *user, const char *passwd, const char *database, uint32 port)
{ {
DBInitVars(); DBInitVars();
Connect(host, user, passwd, database, port); Connect(host, user, passwd, database, port);
} }
bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port) bool Database::Connect(const char *host, const char *user, const char *passwd, const char *database, uint32 port)
{ {
uint32 errnum= 0; uint32 errnum = 0;
char errbuf[MYSQL_ERRMSG_SIZE]; char errbuf[MYSQL_ERRMSG_SIZE];
if (!Open(host, user, passwd, database, port, &errnum, errbuf)) if (!Open(host, user, passwd, database, port, &errnum, errbuf)) {
{
LogError("Failed to connect to database: Error: {}", errbuf); LogError("Failed to connect to database: Error: {}", errbuf);
HandleMysqlError(errnum); HandleMysqlError(errnum);
return false; return false;
} }
else else {
{ LogInfo("Using database [{}] at [{}]:[{}]", database, host, port);
LogInfo("Using database [{}] at [{}]:[{}]",database,host,port);
return true; return true;
} }
} }
void Database::DBInitVars() { void Database::DBInitVars()
{
} }
void Database::HandleMysqlError(uint32 errnum)
void Database::HandleMysqlError(uint32 errnum) { {
} }
/* /*
@ -98,300 +99,351 @@ Database::~Database()
{ {
} }
void Database::AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type) { void Database::AddSpeech(
const char *from,
const char *to,
const char *message,
uint16 minstatus,
uint32 guilddbid,
uint8 type
)
{
auto escapedFrom = new char[strlen(from) * 2 + 1]; auto escapedFrom = new char[strlen(from) * 2 + 1];
auto escapedTo = new char[strlen(to) * 2 + 1]; auto escapedTo = new char[strlen(to) * 2 + 1];
auto escapedMessage = new char[strlen(message) * 2 + 1]; auto escapedMessage = new char[strlen(message) * 2 + 1];
DoEscapeString(escapedFrom, from, strlen(from)); DoEscapeString(escapedFrom, from, strlen(from));
DoEscapeString(escapedTo, to, strlen(to)); DoEscapeString(escapedTo, to, strlen(to));
DoEscapeString(escapedMessage, message, strlen(message)); DoEscapeString(escapedMessage, message, strlen(message));
std::string query = StringFormat("INSERT INTO `qs_player_speech` " std::string query = StringFormat(
"SET `from` = '%s', `to` = '%s', `message`='%s', " "INSERT INTO `qs_player_speech` "
"`minstatus`='%i', `guilddbid`='%i', `type`='%i'", "SET `from` = '%s', `to` = '%s', `message`='%s', "
escapedFrom, escapedTo, escapedMessage, minstatus, guilddbid, type); "`minstatus`='%i', `guilddbid`='%i', `type`='%i'",
safe_delete_array(escapedFrom); escapedFrom, escapedTo, escapedMessage, minstatus, guilddbid, type
);
safe_delete_array(escapedFrom);
safe_delete_array(escapedTo); safe_delete_array(escapedTo);
safe_delete_array(escapedMessage); safe_delete_array(escapedMessage);
auto results = QueryDatabase(query); auto results = QueryDatabase(query);
if(!results.Success()) { if (!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed Speech Entry Insert: %s", results.ErrorMessage().c_str()); LogInfo("Failed Speech Entry Insert: [{}]", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); LogInfo("[{}]", query.c_str());
} }
} }
void Database::LogPlayerDropItem(QSPlayerDropItem_Struct* QS) { void Database::LogPlayerDropItem(QSPlayerDropItem_Struct *QS)
{
std::string query = StringFormat("INSERT INTO `qs_player_drop_record` SET `time` = NOW(), " std::string query = StringFormat(
"`char_id` = '%i', `pickup` = '%i', " "INSERT INTO `qs_player_drop_record` SET `time` = NOW(), "
"`zone_id` = '%i', `x` = '%i', `y` = '%i', `z` = '%i' ", "`char_id` = '%i', `pickup` = '%i', "
QS->char_id, QS->pickup, QS->zone_id, QS->x, QS->y, QS->z); "`zone_id` = '%i', `x` = '%i', `y` = '%i', `z` = '%i' ",
QS->char_id, QS->pickup, QS->zone_id, QS->x, QS->y, QS->z
);
auto results = QueryDatabase(query); auto results = QueryDatabase(query);
if (!results.Success()) { if (!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed Drop Record Insert: %s", results.ErrorMessage().c_str()); LogInfo("Failed Drop Record Insert: [{}]", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); LogInfo("[{}]", query.c_str());
} }
if (QS->_detail_count == 0) if (QS->_detail_count == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for (int i = 0; i < QS->_detail_count; i++) { for (int i = 0; i < QS->_detail_count; i++) {
query = StringFormat("INSERT INTO `qs_player_drop_record_entries` SET `event_id` = '%i', " query = StringFormat(
"`item_id` = '%i', `charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', " "INSERT INTO `qs_player_drop_record_entries` SET `event_id` = '%i', "
"`aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'", "`item_id` = '%i', `charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', "
lastIndex, QS->items[i].item_id, "`aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2, lastIndex, QS->items[i].item_id,
QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5); QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2,
QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5
);
results = QueryDatabase(query); results = QueryDatabase(query);
if (!results.Success()) { if (!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed Drop Record Entry Insert: %s", results.ErrorMessage().c_str()); LogInfo("Failed Drop Record Entry Insert: [{}]", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); LogInfo("[{}]", query.c_str());
} }
} }
} }
void Database::LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 detailCount) { void Database::LogPlayerTrade(QSPlayerLogTrade_Struct *QS, uint32 detailCount)
{
std::string query = StringFormat("INSERT INTO `qs_player_trade_record` SET `time` = NOW(), " std::string query = StringFormat(
"`char1_id` = '%i', `char1_pp` = '%i', `char1_gp` = '%i', " "INSERT INTO `qs_player_trade_record` SET `time` = NOW(), "
"`char1_sp` = '%i', `char1_cp` = '%i', `char1_items` = '%i', " "`char1_id` = '%i', `char1_pp` = '%i', `char1_gp` = '%i', "
"`char2_id` = '%i', `char2_pp` = '%i', `char2_gp` = '%i', " "`char1_sp` = '%i', `char1_cp` = '%i', `char1_items` = '%i', "
"`char2_sp` = '%i', `char2_cp` = '%i', `char2_items` = '%i'", "`char2_id` = '%i', `char2_pp` = '%i', `char2_gp` = '%i', "
QS->char1_id, QS->char1_money.platinum, QS->char1_money.gold, "`char2_sp` = '%i', `char2_cp` = '%i', `char2_items` = '%i'",
QS->char1_money.silver, QS->char1_money.copper, QS->char1_count, QS->char1_id, QS->char1_money.platinum, QS->char1_money.gold,
QS->char2_id, QS->char2_money.platinum, QS->char2_money.gold, QS->char1_money.silver, QS->char1_money.copper, QS->char1_count,
QS->char2_money.silver, QS->char2_money.copper, QS->char2_count); QS->char2_id, QS->char2_money.platinum, QS->char2_money.gold,
auto results = QueryDatabase(query); QS->char2_money.silver, QS->char2_money.copper, QS->char2_count
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Trade Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed Trade Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(detailCount == 0) if (detailCount == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for(int i = 0; i < detailCount; i++) { for (int i = 0; i < detailCount; i++) {
query = StringFormat("INSERT INTO `qs_player_trade_record_entries` SET `event_id` = '%i', " query = StringFormat(
"`from_id` = '%i', `from_slot` = '%i', `to_id` = '%i', `to_slot` = '%i', " "INSERT INTO `qs_player_trade_record_entries` SET `event_id` = '%i', "
"`item_id` = '%i', `charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', " "`from_id` = '%i', `from_slot` = '%i', `to_id` = '%i', `to_slot` = '%i', "
"`aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'", "`item_id` = '%i', `charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', "
lastIndex, QS->items[i].from_id, QS->items[i].from_slot, "`aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
QS->items[i].to_id, QS->items[i].to_slot, QS->items[i].item_id, lastIndex, QS->items[i].from_id, QS->items[i].from_slot,
QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2, QS->items[i].to_id, QS->items[i].to_slot, QS->items[i].item_id,
QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5); QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2,
results = QueryDatabase(query); QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Trade Log Record Entry Insert: %s", results.ErrorMessage().c_str()); results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
} LogInfo("Failed Trade Log Record Entry Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
}
} }
} }
void Database::LogPlayerHandin(QSPlayerLogHandin_Struct* QS, uint32 detailCount) { void Database::LogPlayerHandin(QSPlayerLogHandin_Struct *QS, uint32 detailCount)
{
std::string query = StringFormat("INSERT INTO `qs_player_handin_record` SET `time` = NOW(), " std::string query = StringFormat(
"`quest_id` = '%i', `char_id` = '%i', `char_pp` = '%i', " "INSERT INTO `qs_player_handin_record` SET `time` = NOW(), "
"`char_gp` = '%i', `char_sp` = '%i', `char_cp` = '%i', " "`quest_id` = '%i', `char_id` = '%i', `char_pp` = '%i', "
"`char_items` = '%i', `npc_id` = '%i', `npc_pp` = '%i', " "`char_gp` = '%i', `char_sp` = '%i', `char_cp` = '%i', "
"`npc_gp` = '%i', `npc_sp` = '%i', `npc_cp` = '%i', " "`char_items` = '%i', `npc_id` = '%i', `npc_pp` = '%i', "
"`npc_items`='%i'", "`npc_gp` = '%i', `npc_sp` = '%i', `npc_cp` = '%i', "
QS->quest_id, QS->char_id, QS->char_money.platinum, "`npc_items`='%i'",
QS->char_money.gold, QS->char_money.silver, QS->char_money.copper, QS->quest_id, QS->char_id, QS->char_money.platinum,
QS->char_count, QS->npc_id, QS->npc_money.platinum, QS->char_money.gold, QS->char_money.silver, QS->char_money.copper,
QS->npc_money.gold, QS->npc_money.silver, QS->npc_money.copper, QS->char_count, QS->npc_id, QS->npc_money.platinum,
QS->npc_count); QS->npc_money.gold, QS->npc_money.silver, QS->npc_money.copper,
auto results = QueryDatabase(query); QS->npc_count
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Handin Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed Handin Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(detailCount == 0) if (detailCount == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for(int i = 0; i < detailCount; i++) { for (int i = 0; i < detailCount; i++) {
query = StringFormat("INSERT INTO `qs_player_handin_record_entries` SET `event_id` = '%i', " query = StringFormat(
"`action_type` = '%s', `char_slot` = '%i', `item_id` = '%i', " "INSERT INTO `qs_player_handin_record_entries` SET `event_id` = '%i', "
"`charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', `aug_3` = '%i', " "`action_type` = '%s', `char_slot` = '%i', `item_id` = '%i', "
"`aug_4` = '%i', `aug_5` = '%i'", "`charges` = '%i', `aug_1` = '%i', `aug_2` = '%i', `aug_3` = '%i', "
lastIndex, QS->items[i].action_type, QS->items[i].char_slot, "`aug_4` = '%i', `aug_5` = '%i'",
QS->items[i].item_id, QS->items[i].charges, QS->items[i].aug_1, lastIndex, QS->items[i].action_type, QS->items[i].char_slot,
QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].item_id, QS->items[i].charges, QS->items[i].aug_1,
QS->items[i].aug_5); QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4,
if(!results.Success()) { QS->items[i].aug_5
Log(Logs::Detail, Logs::QSServer, "Failed Handin Log Record Entry Insert: %s", results.ErrorMessage().c_str()); );
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
} LogInfo("Failed Handin Log Record Entry Insert: [{}]", results.ErrorMessage().c_str());
} LogInfo("[{}]", query.c_str());
}
}
} }
void Database::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct* QS, uint32 members){ void Database::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct *QS, uint32 members)
{
std::string query = StringFormat("INSERT INTO `qs_player_npc_kill_record` " std::string query = StringFormat(
"SET `npc_id` = '%i', `type` = '%i', " "INSERT INTO `qs_player_npc_kill_record` "
"`zone_id` = '%i', `time` = NOW()", "SET `npc_id` = '%i', `type` = '%i', "
QS->s1.NPCID, QS->s1.Type, QS->s1.ZoneID); "`zone_id` = '%i', `time` = NOW()",
auto results = QueryDatabase(query); QS->s1.NPCID, QS->s1.Type, QS->s1.ZoneID
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed NPC Kill Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed NPC Kill Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(members == 0) if (members == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for (int i = 0; i < members; i++) { for (int i = 0; i < members; i++) {
query = StringFormat("INSERT INTO `qs_player_npc_kill_record_entries` " query = StringFormat(
"SET `event_id` = '%i', `char_id` = '%i'", "INSERT INTO `qs_player_npc_kill_record_entries` "
lastIndex, QS->Chars[i].char_id); "SET `event_id` = '%i', `char_id` = '%i'",
lastIndex, QS->Chars[i].char_id
);
auto results = QueryDatabase(query); auto results = QueryDatabase(query);
if(!results.Success()) { if (!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed NPC Kill Log Entry Insert: %s", results.ErrorMessage().c_str()); LogInfo("Failed NPC Kill Log Entry Insert: [{}]", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); LogInfo("[{}]", query.c_str());
} }
} }
} }
void Database::LogPlayerDelete(QSPlayerLogDelete_Struct* QS, uint32 items) { void Database::LogPlayerDelete(QSPlayerLogDelete_Struct *QS, uint32 items)
{
std::string query = StringFormat("INSERT INTO `qs_player_delete_record` SET `time` = NOW(), " std::string query = StringFormat(
"`char_id` = '%i', `stack_size` = '%i', `char_items` = '%i'", "INSERT INTO `qs_player_delete_record` SET `time` = NOW(), "
QS->char_id, QS->stack_size, QS->char_count, QS->char_count); "`char_id` = '%i', `stack_size` = '%i', `char_items` = '%i'",
auto results = QueryDatabase(query); QS->char_id, QS->stack_size, QS->char_count, QS->char_count
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Delete Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed Delete Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(items == 0) if (items == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for(int i = 0; i < items; i++) { for (int i = 0; i < items; i++) {
query = StringFormat("INSERT INTO `qs_player_delete_record_entries` SET `event_id` = '%i', " query = StringFormat(
"`char_slot` = '%i', `item_id` = '%i', `charges` = '%i', `aug_1` = '%i', " "INSERT INTO `qs_player_delete_record_entries` SET `event_id` = '%i', "
"`aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'", "`char_slot` = '%i', `item_id` = '%i', `charges` = '%i', `aug_1` = '%i', "
lastIndex, QS->items[i].char_slot, QS->items[i].item_id, QS->items[i].charges, "`aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
QS->items[i].aug_1, QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4, lastIndex, QS->items[i].char_slot, QS->items[i].item_id, QS->items[i].charges,
QS->items[i].aug_5); QS->items[i].aug_1, QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4,
results = QueryDatabase(query); QS->items[i].aug_5
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Delete Log Record Entry Insert: %s", results.ErrorMessage().c_str()); results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
} LogInfo("Failed Delete Log Record Entry Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
}
} }
} }
void Database::LogPlayerMove(QSPlayerLogMove_Struct* QS, uint32 items) { void Database::LogPlayerMove(QSPlayerLogMove_Struct *QS, uint32 items)
{
/* These are item moves */ /* These are item moves */
std::string query = StringFormat("INSERT INTO `qs_player_move_record` SET `time` = NOW(), " std::string query = StringFormat(
"`char_id` = '%i', `from_slot` = '%i', `to_slot` = '%i', " "INSERT INTO `qs_player_move_record` SET `time` = NOW(), "
"`stack_size` = '%i', `char_items` = '%i', `postaction` = '%i'", "`char_id` = '%i', `from_slot` = '%i', `to_slot` = '%i', "
QS->char_id, QS->from_slot, QS->to_slot, QS->stack_size, "`stack_size` = '%i', `char_items` = '%i', `postaction` = '%i'",
QS->char_count, QS->postaction); QS->char_id, QS->from_slot, QS->to_slot, QS->stack_size,
auto results = QueryDatabase(query); QS->char_count, QS->postaction
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Move Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed Move Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(items == 0) if (items == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for(int i = 0; i < items; i++) {
query = StringFormat("INSERT INTO `qs_player_move_record_entries` SET `event_id` = '%i', "
"`from_slot` = '%i', `to_slot` = '%i', `item_id` = '%i', `charges` = '%i', "
"`aug_1` = '%i', `aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
lastIndex, QS->items[i].from_slot, QS->items[i].to_slot, QS->items[i].item_id,
QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2,
QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5);
results = QueryDatabase(query);
if(!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed Move Log Record Entry Insert: %s", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str());
}
}
for (int i = 0; i < items; i++) {
query = StringFormat(
"INSERT INTO `qs_player_move_record_entries` SET `event_id` = '%i', "
"`from_slot` = '%i', `to_slot` = '%i', `item_id` = '%i', `charges` = '%i', "
"`aug_1` = '%i', `aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
lastIndex, QS->items[i].from_slot, QS->items[i].to_slot, QS->items[i].item_id,
QS->items[i].charges, QS->items[i].aug_1, QS->items[i].aug_2,
QS->items[i].aug_3, QS->items[i].aug_4, QS->items[i].aug_5
);
results = QueryDatabase(query);
if (!results.Success()) {
LogInfo("Failed Move Log Record Entry Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
}
}
} }
void Database::LogMerchantTransaction(QSMerchantLogTransaction_Struct* QS, uint32 items) { void Database::LogMerchantTransaction(QSMerchantLogTransaction_Struct *QS, uint32 items)
{
/* Merchant transactions are from the perspective of the merchant, not the player */ /* Merchant transactions are from the perspective of the merchant, not the player */
std::string query = StringFormat("INSERT INTO `qs_merchant_transaction_record` SET `time` = NOW(), " std::string query = StringFormat(
"`zone_id` = '%i', `merchant_id` = '%i', `merchant_pp` = '%i', " "INSERT INTO `qs_merchant_transaction_record` SET `time` = NOW(), "
"`merchant_gp` = '%i', `merchant_sp` = '%i', `merchant_cp` = '%i', " "`zone_id` = '%i', `merchant_id` = '%i', `merchant_pp` = '%i', "
"`merchant_items` = '%i', `char_id` = '%i', `char_pp` = '%i', " "`merchant_gp` = '%i', `merchant_sp` = '%i', `merchant_cp` = '%i', "
"`char_gp` = '%i', `char_sp` = '%i', `char_cp` = '%i', " "`merchant_items` = '%i', `char_id` = '%i', `char_pp` = '%i', "
"`char_items` = '%i'", "`char_gp` = '%i', `char_sp` = '%i', `char_cp` = '%i', "
QS->zone_id, QS->merchant_id, QS->merchant_money.platinum, "`char_items` = '%i'",
QS->merchant_money.gold, QS->merchant_money.silver, QS->zone_id, QS->merchant_id, QS->merchant_money.platinum,
QS->merchant_money.copper, QS->merchant_count, QS->char_id, QS->merchant_money.gold, QS->merchant_money.silver,
QS->char_money.platinum, QS->char_money.gold, QS->char_money.silver, QS->merchant_money.copper, QS->merchant_count, QS->char_id,
QS->char_money.copper, QS->char_count); QS->char_money.platinum, QS->char_money.gold, QS->char_money.silver,
auto results = QueryDatabase(query); QS->char_money.copper, QS->char_count
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Transaction Log Record Insert: %s", results.ErrorMessage().c_str()); auto results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
LogInfo("Failed Transaction Log Record Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
} }
if(items == 0) if (items == 0) {
return; return;
}
int lastIndex = results.LastInsertedID(); int lastIndex = results.LastInsertedID();
for(int i = 0; i < items; i++) { for (int i = 0; i < items; i++) {
query = StringFormat("INSERT INTO `qs_merchant_transaction_record_entries` SET `event_id` = '%i', " query = StringFormat(
"`char_slot` = '%i', `item_id` = '%i', `charges` = '%i', `aug_1` = '%i', " "INSERT INTO `qs_merchant_transaction_record_entries` SET `event_id` = '%i', "
"`aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'", "`char_slot` = '%i', `item_id` = '%i', `charges` = '%i', `aug_1` = '%i', "
lastIndex, QS->items[i].char_slot, QS->items[i].item_id, QS->items[i].charges, "`aug_2` = '%i', `aug_3` = '%i', `aug_4` = '%i', `aug_5` = '%i'",
QS->items[i].aug_1, QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4, lastIndex, QS->items[i].char_slot, QS->items[i].item_id, QS->items[i].charges,
QS->items[i].aug_5); QS->items[i].aug_1, QS->items[i].aug_2, QS->items[i].aug_3, QS->items[i].aug_4,
results = QueryDatabase(query); QS->items[i].aug_5
if(!results.Success()) { );
Log(Logs::Detail, Logs::QSServer, "Failed Transaction Log Record Entry Insert: %s", results.ErrorMessage().c_str()); results = QueryDatabase(query);
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); if (!results.Success()) {
} LogInfo("Failed Transaction Log Record Entry Insert: [{}]", results.ErrorMessage().c_str());
LogInfo("[{}]", query.c_str());
}
} }
} }
// this function does not delete the ServerPacket, so it must be handled at call site // this function does not delete the ServerPacket, so it must be handled at call site
void Database::GeneralQueryReceive(ServerPacket *pack) { void Database::GeneralQueryReceive(ServerPacket *pack)
{
/* /*
These are general queries passed from anywhere in zone instead of packing structures and breaking them down again and again These are general queries passed from anywhere in zone instead of packing structures and breaking them down again and again
*/ */
auto queryBuffer = new char[pack->ReadUInt32() + 1]; auto queryBuffer = new char[pack->ReadUInt32() + 1];
pack->ReadString(queryBuffer); pack->ReadString(queryBuffer);
std::string query(queryBuffer); std::string query(queryBuffer);
auto results = QueryDatabase(query); auto results = QueryDatabase(query);
if (!results.Success()) { if (!results.Success()) {
Log(Logs::Detail, Logs::QSServer, "Failed Delete Log Record Insert: %s", results.ErrorMessage().c_str()); LogInfo("Failed Delete Log Record Insert: [{}]", results.ErrorMessage().c_str());
Log(Logs::Detail, Logs::QSServer, "%s", query.c_str()); LogInfo("[{}]", query.c_str());
} }
safe_delete_array(queryBuffer); safe_delete_array(queryBuffer);

View File

@ -52,16 +52,16 @@ int main() {
set_exception_handler(); set_exception_handler();
Timer LFGuildExpireTimer(60000); Timer LFGuildExpireTimer(60000);
Log(Logs::General, Logs::QSServer, "Starting EQEmu QueryServ."); LogInfo("Starting EQEmu QueryServ");
if (!queryservconfig::LoadConfig()) { if (!queryservconfig::LoadConfig()) {
Log(Logs::General, Logs::QSServer, "Loading server configuration failed."); LogInfo("Loading server configuration failed");
return 1; return 1;
} }
Config = queryservconfig::get(); Config = queryservconfig::get();
WorldShortName = Config->ShortName; WorldShortName = Config->ShortName;
Log(Logs::General, Logs::QSServer, "Connecting to MySQL..."); LogInfo("Connecting to MySQL");
/* MySQL Connection */ /* MySQL Connection */
if (!database.Connect( if (!database.Connect(
@ -70,7 +70,7 @@ int main() {
Config->QSDatabasePassword.c_str(), Config->QSDatabasePassword.c_str(),
Config->QSDatabaseDB.c_str(), Config->QSDatabaseDB.c_str(),
Config->QSDatabasePort)) { Config->QSDatabasePort)) {
Log(Logs::General, Logs::QSServer, "Cannot continue without a database connection."); LogInfo("Cannot continue without a database connection");
return 1; return 1;
} }
@ -79,11 +79,11 @@ int main() {
LogSys.StartFileLogs(); LogSys.StartFileLogs();
if (signal(SIGINT, CatchSignal) == SIG_ERR) { if (signal(SIGINT, CatchSignal) == SIG_ERR) {
Log(Logs::General, Logs::QSServer, "Could not set signal handler"); LogInfo("Could not set signal handler");
return 1; return 1;
} }
if (signal(SIGTERM, CatchSignal) == SIG_ERR) { if (signal(SIGTERM, CatchSignal) == SIG_ERR) {
Log(Logs::General, Logs::QSServer, "Could not set signal handler"); LogInfo("Could not set signal handler");
return 1; return 1;
} }

View File

@ -168,7 +168,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
break; break;
} }
default: default:
Log(Logs::Detail, Logs::QSServer, "Received unhandled ServerOP_QueryServGeneric", Type); LogInfo("Received unhandled ServerOP_QueryServGeneric", Type);
break; break;
} }
break; break;