void EQLConfig::DeleteLauncher() { launcher_list.Remove(m_name.c_str()); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; char namebuf[128]; database.DoEscapeString(namebuf, m_name.c_str(), m_name.length()&0x3F); //limit len to 64 namebuf[127] = '\0'; if (!database.RunQuery(query, MakeAnyLenString(&query, "DELETE FROM launcher WHERE name='%s'", namebuf), errbuf)) { LogFile->write(EQEMuLog::Error, "Error in DeleteLauncher 1 query: %s", errbuf); safe_delete_array(query); return; } safe_delete_array(query); if (!database.RunQuery(query, MakeAnyLenString(&query, "DELETE FROM launcher_zones WHERE launcher='%s'", namebuf), errbuf)) { LogFile->write(EQEMuLog::Error, "Error in DeleteLauncher 2 query: %s", errbuf); safe_delete_array(query); return; } safe_delete_array(query); }
void Database::LogPlayerTrade(QSPlayerLogTrade_Struct* QS, uint32 Items) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_trade_record` SET `time`=NOW(), " "`char1_id`='%i', `char1_pp`='%i', `char1_gp`='%i', `char1_sp`='%i', `char1_cp`='%i', `char1_items`='%i', " "`char2_id`='%i', `char2_pp`='%i', `char2_gp`='%i', `char2_sp`='%i', `char2_cp`='%i', `char2_items`='%i'", QS->char1_id, QS->char1_money.platinum, QS->char1_money.gold, QS->char1_money.silver, QS->char1_money.copper, QS->char1_count, QS->char2_id, QS->char2_money.platinum, QS->char2_money.gold, QS->char2_money.silver, QS->char2_money.copper, QS->char2_count), errbuf, 0, 0, &lastid)) { _log(NET__WORLD, "Failed Trade Log Record Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } if(Items > 0) { for(int i = 0; i < Items; i++) { if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_trade_record_entries` SET `event_id`='%i', " "`from_id`='%i', `from_slot`='%i', `to_id`='%i', `to_slot`='%i', `item_id`='%i', " "`charges`='%i', `aug_1`='%i', `aug_2`='%i', `aug_3`='%i', `aug_4`='%i', `aug_5`='%i'", lastid, QS->items[i].from_id, QS->items[i].from_slot, QS->items[i].to_id, 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, errbuf, 0, 0))) { _log(NET__WORLD, "Failed Trade Log Record Entry Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } } } }
void Database::LogPlayerMove(QSPlayerLogMove_Struct* QS, uint32 Items) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_move_record` SET `time`=NOW(), " "`char_id`='%i', `from_slot`='%i', `to_slot`='%i', `stack_size`='%i', `char_items`='%i', `postaction`='%i'", QS->char_id, QS->from_slot, QS->to_slot, QS->stack_size, QS->char_count, QS->postaction), errbuf, 0, 0, &lastid)) { _log(NET__WORLD, "Failed Move Log Record Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } if(Items > 0) { for(int i = 0; i < Items; i++) { if(!RunQuery(query, MakeAnyLenString(&query, "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'", lastid, 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, errbuf, 0, 0))) { _log(NET__WORLD, "Failed Move Log Record Entry Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } } } }
void Database::LogPlayerHandin(QSPlayerLogHandin_Struct* QS, uint32 Items) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_handin_record` SET `time`=NOW(), `quest_id`='%i', " "`char_id`='%i', `char_pp`='%i', `char_gp`='%i', `char_sp`='%i', `char_cp`='%i', `char_items`='%i', " "`npc_id`='%i', `npc_pp`='%i', `npc_gp`='%i', `npc_sp`='%i', `npc_cp`='%i', `npc_items`='%i'", QS->quest_id, QS->char_id, QS->char_money.platinum, QS->char_money.gold, QS->char_money.silver, QS->char_money.copper, QS->char_count, QS->npc_id, QS->npc_money.platinum, QS->npc_money.gold, QS->npc_money.silver, QS->npc_money.copper, QS->npc_count), errbuf, 0, 0, &lastid)) { _log(NET__WORLD, "Failed Handin Log Record Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } if(Items > 0) { for(int i = 0; i < Items; i++) { if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_handin_record_entries` SET `event_id`='%i', " "`action_type`='%s', `char_slot`='%i', `item_id`='%i', `charges`='%i', " "`aug_1`='%i', `aug_2`='%i', `aug_3`='%i', `aug_4`='%i', `aug_5`='%i'", lastid, QS->items[i].action_type, QS->items[i].char_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, errbuf, 0, 0))) { _log(NET__WORLD, "Failed Handin Log Record Entry Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } } } }
void LFGuildManager::ExpireEntries() { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; std::list<PlayerLookingForGuild>::iterator it; std::list<GuildLookingForPlayers>::iterator it2; for(it = Players.begin(); it != Players.end(); ++it) { if((*it).TimePosted + 604800 <= (uint32)time(NULL)) { if(!database.RunQuery(query, MakeAnyLenString(&query, "DELETE from `lfguild` WHERE `type` = 0 AND `name` = '%s'", (*it).Name.c_str()), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error expiring player LFGuild entry, query was %s, %s", query, errbuf); safe_delete_array(query); it = Players.erase(it); } } for(it2 = Guilds.begin(); it2 != Guilds.end(); ++it2) { if((*it2).TimePosted + 2592000 <= time(NULL)) { if(!database.RunQuery(query, MakeAnyLenString(&query, "DELETE from `lfguild` WHERE `type` = 1 AND `name` = '%s'", (*it2).Name.c_str()), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error removing guild LFGuild entry, query was %s, %s", query, errbuf); safe_delete_array(query); it2 = Guilds.erase(it2); } } }
void Database::LogMerchantTransaction(QSMerchantLogTransaction_Struct* QS, uint32 Items) { // Merchant transactions are from the perspective of the merchant, not the player -U char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_merchant_transaction_record` SET `time`=NOW(), " "`zone_id`='%i', `merchant_id`='%i', `merchant_pp`='%i', `merchant_gp`='%i', `merchant_sp`='%i', `merchant_cp`='%i', `merchant_items`='%i', " "`char_id`='%i', `char_pp`='%i', `char_gp`='%i', `char_sp`='%i', `char_cp`='%i', `char_items`='%i'", QS->zone_id, QS->merchant_id, QS->merchant_money.platinum, QS->merchant_money.gold, QS->merchant_money.silver, QS->merchant_money.copper, QS->merchant_count, QS->char_id, QS->char_money.platinum, QS->char_money.gold, QS->char_money.silver, QS->char_money.copper, QS->char_count), errbuf, 0, 0, &lastid)) { _log(NET__WORLD, "Failed Transaction Log Record Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } if(Items > 0) { for(int i = 0; i < Items; i++) { if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_merchant_transaction_record_entries` SET `event_id`='%i', " "`char_slot`='%i', `item_id`='%i', `charges`='%i', `aug_1`='%i', " "`aug_2`='%i', `aug_3`='%i', `aug_4`='%i', `aug_5`='%i'", lastid, QS->items[i].char_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, errbuf, 0, 0))) { _log(NET__WORLD, "Failed Transaction Log Record Entry Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } } } }
bool BaseGuildManager::DBSetGuild(uint32 charid, uint32 guild_id, uint8 rank) { if(m_db == nullptr) { _log(GUILDS__DB, "Requested to set char to guild %d when we have no database object.", guild_id); return(false); } char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; if(guild_id != GUILD_NONE) { if (!m_db->RunQuery(query, MakeAnyLenString(&query, "REPLACE INTO guild_members (char_id,guild_id,rank) VALUES(%d,%d,%d)", charid, guild_id, rank), errbuf)) { _log(GUILDS__ERROR, "Error Changing char %d to guild %d '%s': %s", charid, guild_id, query, errbuf); safe_delete_array(query); return(false); } } else { if (!m_db->RunQuery(query, MakeAnyLenString(&query, "DELETE FROM guild_members WHERE char_id=%d", charid), errbuf)) { _log(GUILDS__ERROR, "Error removing char %d from guild '%s': %s", charid, guild_id, query, errbuf); safe_delete_array(query); return(false); } } safe_delete_array(query); _log(GUILDS__DB, "Set char %d to guild %d and rank %d in the database.", charid, guild_id, rank); return(true); }
//o-------------------------------------------------------------- //| Name: BuildFactionMessage; rembrant, Dec. 16, 2001 //o-------------------------------------------------------------- //| Purpose: duh? //o-------------------------------------------------------------- char* BuildFactionMessage(sint32 tmpvalue, sint32 faction_id, sint32 totalvalue) { char *faction_message = 0; char name[50]; if(database.GetFactionName(faction_id, name, sizeof(name)) == false) { snprintf(name, sizeof(name),"Faction%i",faction_id); } if(totalvalue >= MAX_FACTION) { MakeAnyLenString(&faction_message, "Your faction standing with %s could not possibly get any better!", name); return faction_message; } else if(tmpvalue > 0 && totalvalue < MAX_FACTION) { MakeAnyLenString(&faction_message, "Your faction standing with %s has gotten better!", name); return faction_message; } else if(tmpvalue == 0) { return 0; } else if(tmpvalue < 0 && totalvalue > MIN_FACTION) { MakeAnyLenString(&faction_message, "Your faction standing with %s has gotten worse!", name); return faction_message; } else if(totalvalue <= MIN_FACTION) { MakeAnyLenString(&faction_message, "Your faction standing with %s could not possibly get any worse!", name); return faction_message; } return 0; }
void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) { if(mob && mob->IsClient()) { std::string hashname = package_name + std::string("::hasitem"); //start with an empty hash perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); for(int slot = HASITEM_FIRST; slot <= HASITEM_LAST; slot++) { char *hi_decl=nullptr; int itemid = mob->CastToClient()->GetItemIDAt(slot); if(!HASITEM_ISNULLITEM(itemid)) { MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);", hashname.c_str(), itemid, slot); perl->eval(hi_decl); safe_delete_array(hi_decl); } } } if(mob && mob->IsClient()) { std::string hashname = package_name + std::string("::oncursor"); perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); char *hi_decl = nullptr; int itemid = mob->CastToClient()->GetItemIDAt(30); if(!HASITEM_ISNULLITEM(itemid)) { MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);",hashname.c_str(), itemid, 30); perl->eval(hi_decl); safe_delete_array(hi_decl); } } }
void Database::ExpireMail() { _log(UCS__INIT, "Expiring mail..."); char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; uint32 AffectedRows; if (!RunQuery(query,MakeAnyLenString(&query, "select COUNT(*) from `mail` "),errbuf,&result)){ _log(UCS__ERROR, "Unable to get message count from database. %s %s", query, errbuf); safe_delete_array(query); return ; } safe_delete_array(query); row = mysql_fetch_row(result); _log(UCS__INIT, "There are %s messages in the database.", row[0]); mysql_free_result(result); // Expire Trash if(RuleI(Mail, ExpireTrash) >= 0) { if(RunQuery(query, MakeAnyLenString(&query, "delete from `mail` where `status`=4 and `timestamp` < %i", time(nullptr) - RuleI(Mail, ExpireTrash)), errbuf, 0, &AffectedRows)) { _log(UCS__INIT, "Expired %i trash messages.", AffectedRows); } else { _log(UCS__ERROR, "Error expiring trash messages, %s %s", query, errbuf); } safe_delete_array(query); } // Expire Read if(RuleI(Mail, ExpireRead) >= 0) { if(RunQuery(query, MakeAnyLenString(&query, "delete from `mail` where `status`=3 and `timestamp` < %i", time(nullptr) - RuleI(Mail, ExpireRead)), errbuf, 0, &AffectedRows)) { _log(UCS__INIT, "Expired %i read messages.", AffectedRows); } else { _log(UCS__ERROR, "Error expiring read messages, %s %s", query, errbuf); } safe_delete_array(query); } // Expire Unread if(RuleI(Mail, ExpireUnread) >= 0) { if(RunQuery(query, MakeAnyLenString(&query, "delete from `mail` where `status`=1 and `timestamp` < %i", time(nullptr) - RuleI(Mail, ExpireUnread)), errbuf, 0, &AffectedRows)) { _log(UCS__INIT, "Expired %i unread messages.", AffectedRows); } else { _log(UCS__ERROR, "Error expiring unread messages, %s %s", query, errbuf); } safe_delete_array(query); } }
void Client::LearnRecipe(uint32 recipeID) { char *query = 0; uint32 qlen; uint32 qcount = 0; char errbuf[MYSQL_ERRMSG_SIZE]; MYSQL_RES *result; MYSQL_ROW row; qlen = MakeAnyLenString(&query, "SELECT tr.name, crl.madecount " " FROM tradeskill_recipe as tr " " LEFT JOIN (SELECT recipe_id, madecount FROM char_recipe_list WHERE char_id = %u) AS crl " " ON tr.id = crl.recipe_id " " WHERE tr.id = %u ;", CharacterID(), recipeID); if (!database.RunQuery(query, qlen, errbuf, &result)) { LogFile->write(EQEMuLog::Error, "Error in Client::LearnRecipe query '%s': %s", query, errbuf); safe_delete_array(query); return; } qcount = mysql_num_rows(result); if (qcount != 1) { LogFile->write(EQEMuLog::Normal, "Client::LearnRecipe - RecipeID: %d had %d occurences.", recipeID, qcount); mysql_free_result(result); safe_delete_array(query); return; } safe_delete_array(query); row = mysql_fetch_row(result); if (row != NULL && row[0] != NULL) { // Only give Learn message if character doesn't know the recipe if (row[1] == NULL) { Message_StringID(4, TRADESKILL_LEARN_RECIPE, row[0]); // Actually learn the recipe now qlen = MakeAnyLenString(&query, "INSERT INTO char_recipe_list " " SET recipe_id = %u, char_id = %u, madecount = 0 " " ON DUPLICATE KEY UPDATE madecount = madecount;" , recipeID, CharacterID()); if (!database.RunQuery(query, qlen, errbuf)) { LogFile->write(EQEMuLog::Error, "Error in LearnRecipe query '%s': %s", query, errbuf); } safe_delete_array(query); } } mysql_free_result(result); }
void LFGuildManager::TogglePlayer(uint32 FromZoneID, uint32 FromInstanceID, char *From, uint32 Class, uint32 Level, uint32 AAPoints, char *Comments, uint32 Toggle, uint32 TimeZone) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; std::list<PlayerLookingForGuild>::iterator it; for(it = Players.begin(); it != Players.end(); ++it) { if(!strcasecmp((*it).Name.c_str(), From)) { Players.erase(it); break; } } if(!database.RunQuery(query, MakeAnyLenString(&query, "DELETE FROM `lfguild` WHERE `type` = 0 AND `name` = '%s'", From), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error removing player from LFGuild table, query was %s, %s", query, errbuf); safe_delete_array(query); uint32 Now = time(NULL); if(Toggle == 1) { PlayerLookingForGuild p(From, Comments, Level, Class, AAPoints, TimeZone, Now); Players.push_back(p); if(!database.RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `lfguild` (`type`, `name`, `comment`, `fromlevel`, `tolevel`, `classes`, `aacount`, `timezone`, `timeposted`) VALUES(0, '%s', '%s', %u, 0, %u, %u, %u, %u)", From, Comments, Level, Class, AAPoints, TimeZone, Now), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error inserting player into LFGuild table, query was %s, %s", query, errbuf); safe_delete_array(query); } ServerPacket *pack = new ServerPacket(ServerOP_QueryServGeneric, strlen(From) + strlen(Comments) + 30); pack->WriteUInt32(FromZoneID); pack->WriteUInt32(FromInstanceID); pack->WriteString(From); pack->WriteUInt32(QSG_LFGuild); pack->WriteUInt32(QSG_LFGuild_RequestPlayerInfo); pack->WriteString(Comments); pack->WriteUInt32(TimeZone); pack->WriteUInt32(Now); pack->WriteUInt32(Toggle); worldserver->SendPacket(pack); safe_delete(pack); }
int Database::FindAccount(const char *CharacterName, Client *c) { _log(UCS__TRACE, "FindAccount for character %s", CharacterName); char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; c->ClearCharacters(); if (!RunQuery(query,MakeAnyLenString(&query, "select `id`, `account_id`, `level` from `character_` where `name`='%s' limit 1", CharacterName),errbuf,&result)) { _log(UCS__ERROR, "FindAccount query failed: %s", query); safe_delete_array(query); return -1; } safe_delete_array(query); if (mysql_num_rows(result) != 1) { _log(UCS__ERROR, "Bad result from query"); mysql_free_result(result); return -1; } row = mysql_fetch_row(result); c->AddCharacter(atoi(row[0]), CharacterName, atoi(row[2])); int AccountID = atoi(row[1]); mysql_free_result(result); _log(UCS__TRACE, "Account ID for %s is %i", CharacterName, AccountID); if (!RunQuery(query,MakeAnyLenString(&query, "select `id`, `name`, `level` from `character_` where `account_id`=%i and `name` !='%s'", AccountID, CharacterName),errbuf,&result)) { safe_delete_array(query); return AccountID; } safe_delete_array(query); for(unsigned int i = 0; i < mysql_num_rows(result); i++) { row = mysql_fetch_row(result); c->AddCharacter(atoi(row[0]), row[1], atoi(row[2])); } mysql_free_result(result); return AccountID; }
void LFGuildManager::ToggleGuild(uint32 FromZoneID, uint32 FromInstanceID, char *From, char* GuildName, char *Comments, uint32 FromLevel, uint32 ToLevel, uint32 Classes, uint32 AACount, uint32 Toggle, uint32 TimeZone) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; std::list<GuildLookingForPlayers>::iterator it; for(it = Guilds.begin(); it != Guilds.end(); ++it) { if(!strcasecmp((*it).Name.c_str(), GuildName)) { Guilds.erase(it); break; } } if(!database.RunQuery(query, MakeAnyLenString(&query, "DELETE FROM `lfguild` WHERE `type` = 1 AND `name` = '%s'", GuildName), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error removing guild from LFGuild table, query was %s, %s", query, errbuf); safe_delete_array(query); uint32 Now = time(NULL); if(Toggle == 1) { GuildLookingForPlayers g(GuildName, Comments, FromLevel, ToLevel, Classes, AACount, TimeZone, Now); Guilds.push_back(g); if(!database.RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `lfguild` (`type`, `name`, `comment`, `fromlevel`, `tolevel`, `classes`, `aacount`, `timezone`, `timeposted`) VALUES(1, '%s', '%s', %u, %u, %u, %u, %u, %u)", GuildName, Comments, FromLevel, ToLevel, Classes, AACount, TimeZone, Now), errbuf, 0, 0)) _log(QUERYSERV__ERROR, "Error inserting guild into LFGuild table, query was %s, %s", query, errbuf); safe_delete_array(query); } ServerPacket *pack = new ServerPacket(ServerOP_LFGuildUpdate, strlen(GuildName) + strlen(Comments) + 30); pack->WriteString(GuildName); pack->WriteString(Comments); pack->WriteUInt32(FromLevel); pack->WriteUInt32(ToLevel); pack->WriteUInt32(Classes); pack->WriteUInt32(AACount); pack->WriteUInt32(TimeZone); pack->WriteUInt32(Now); pack->WriteUInt32(Toggle); worldserver->SendPacket(pack); safe_delete(pack); }
bool Group::LearnMembers() { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (database.RunQuery(query,MakeAnyLenString(&query, "SELECT name FROM group_id WHERE groupid=%lu", (unsigned long)GetID()), errbuf,&result)){ safe_delete_array(query); if(mysql_num_rows(result) < 1) { //could prolly be 2 mysql_free_result(result); LogFile->write(EQEMuLog::Error, "Error getting group members for group %lu: %s", (unsigned long)GetID(), errbuf); return(false); } int i = 0; while((row = mysql_fetch_row(result))) { if(!row[0]) continue; members[i] = nullptr; strn0cpy(membername[i], row[0], 64); i++; } mysql_free_result(result); } return(true); }
Spawn2* ZoneDatabase::LoadSpawn2(LinkedList<Spawn2*> &spawn2_list, int32 spawn2id, int32 timeleft) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (RunQuery(query, MakeAnyLenString(&query, "SELECT id, spawngroupID, x, y, z, heading, respawntime, variance, pathgrid, _condition, cond_value, enabled FROM spawn2 WHERE id=%i", spawn2id), errbuf, &result)) { if (mysql_num_rows(result) == 1) { row = mysql_fetch_row(result); bool perl_enabled = atoi(row[11]) == 1 ? true : false; Spawn2* newSpawn = new Spawn2(atoi(row[0]), atoi(row[1]), atof(row[2]), atof(row[3]), atof(row[4]), atof(row[5]), atoi(row[6]), atoi(row[7]), timeleft, atoi(row[8]), atoi(row[9]), atoi(row[10]), perl_enabled); spawn2_list.Insert( newSpawn ); mysql_free_result(result); safe_delete_array(query); return newSpawn; } mysql_free_result(result); } LogFile->write(EQEMuLog::Error, "Error in LoadSpawn2 query '%s': %s", query, errbuf); safe_delete_array(query); return 0; }
bool BaseGuildManager::GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo *> &members) { members.clear(); if(m_db == nullptr) return(false); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; //load up the rank info for each guild. if (!m_db->RunQuery(query, MakeAnyLenString(&query, GuildMemberBaseQuery " WHERE g.guild_id=%d", guild_id ), errbuf, &result)) { _log(GUILDS__ERROR, "Error loading guild member list '%s': %s", query, errbuf); safe_delete_array(query); return(false); } safe_delete_array(query); while ((row = mysql_fetch_row(result))) { CharGuildInfo *ci = new CharGuildInfo; ProcessGuildMember(row, *ci); members.push_back(ci); } mysql_free_result(result); _log(GUILDS__DB, "Retreived entire guild member list for guild %d from the database", guild_id); return(true); }
bool BaseGuildManager::DBSetPublicNote(uint32 charid, const char* note) { if(m_db == nullptr) return(false); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; //escape our strings. uint32 len = strlen(note); char *esc = new char[len*2+1]; m_db->DoEscapeString(esc, note, len); //insert the new `guilds` entry if (!m_db->RunQuery(query, MakeAnyLenString(&query, "UPDATE guild_members SET public_note='%s' WHERE char_id=%d", esc, charid), errbuf)) { _log(GUILDS__ERROR, "Error setting public note for char %d '%s': %s", charid, query, errbuf); safe_delete_array(query); safe_delete_array(esc); return(false); } safe_delete_array(query); safe_delete_array(esc); _log(GUILDS__DB, "Set public not for char %d", charid); return(true); }
bool BaseGuildManager::GetAltFlag(uint32 CharID) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if(!m_db) return false; if(!m_db->RunQuery(query, MakeAnyLenString(&query, "select `alt` from `guild_members` where char_id=%i LIMIT 1", CharID), errbuf, &result)) { _log(GUILDS__ERROR, "Error retrieving alt flag '%s': %s", query, errbuf); safe_delete_array(query); return false; } safe_delete_array(query); if(mysql_num_rows(result) != 1) return false; row = mysql_fetch_row(result); bool IsAlt = atoi(row[0]); mysql_free_result(result); return IsAlt; }
void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) { char vstr[100]; switch(type) { case IntRule: sprintf(vstr, "%d", m_RuleIntValues[index]); break; case RealRule: sprintf(vstr, "%.13f", m_RuleRealValues[index]); break; case BoolRule: sprintf(vstr, "%s", m_RuleBoolValues[index]?"true":"false"); break; } char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; if (!db->RunQuery(query, MakeAnyLenString(&query, "REPLACE INTO rule_values (ruleset_id, rule_name, rule_value) " " VALUES(%d, '%s', '%s')", m_activeRuleset, _GetRuleName(type, index), vstr),errbuf)) { _log(RULES__ERROR, "Fauled to set rule in the database: %s: %s", query,errbuf); } safe_delete_array(query); }
bool Database::GetVariable(const char* varname, char* varvalue, uint16 varvalue_len) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (!RunQuery(query,MakeAnyLenString(&query, "select `value` from `variables` where `varname`='%s'", varname), errbuf, &result)) { _log(UCS__ERROR, "Unable to get message count from database. %s %s", query, errbuf); safe_delete_array(query); return false; } safe_delete_array(query); if (mysql_num_rows(result) != 1) { mysql_free_result(result); return false; } row = mysql_fetch_row(result); snprintf(varvalue, varvalue_len, "%s", row[0]); mysql_free_result(result); return true; }
int RuleManager::_FindOrCreateRuleset(Database *db, const char *ruleset) { int res; res = GetRulesetID(db, ruleset); if(res >= 0) return(res); //found and existing one... uint32 len = strlen(ruleset); char* rst = new char[2*len+1]; db->DoEscapeString(rst, ruleset, len); uint32 new_id; char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; if (!db->RunQuery(query, MakeAnyLenString(&query, "INSERT INTO rule_sets (ruleset_id, name) " " VALUES(0, '%s')", rst),errbuf,nullptr,nullptr,&new_id)) { _log(RULES__ERROR, "Fauled to create rule set in the database: %s: %s", query,errbuf); res = -1; } else { res = new_id; } safe_delete_array(query); return(res); }
int RuleManager::GetRulesetID(Database *db, const char *rulesetname) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; uint32 len = strlen(rulesetname); char* rst = new char[2*len+1]; db->DoEscapeString(rst, rulesetname, len); int res = -1; if (db->RunQuery(query, MakeAnyLenString(&query, "SELECT ruleset_id" " FROM rule_sets" " WHERE name='%s'", rst), errbuf, &result)) { if((row = mysql_fetch_row(result))) { res = atoi(row[0]); } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "Error in LoadRules query %s: %s", query, errbuf); } safe_delete_array(query); safe_delete_array(rst); return(res); }
bool RuleManager::ListRulesets(Database *db, std::map<int, std::string> &into) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; //start out with the default set which is always present. into[0] = "default"; if (db->RunQuery(query, MakeAnyLenString(&query, "SELECT ruleset_id,name" " FROM rule_sets"), errbuf, &result)) { while((row = mysql_fetch_row(result))) { into[ atoi(row[0]) ] = row[1]; } mysql_free_result(result); safe_delete_array(query); } else { LogFile->write(EQEMuLog::Error, "Error in ListRulesets query %s: %s", query, errbuf); safe_delete_array(query); return(false); } return(true); }
bool PTimerList::Clear(Database *db) { _list.clear(); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; uint32 qlen = 0; qlen = MakeAnyLenString(&query, "DELETE FROM timers " " WHERE char_id=%lu ", (unsigned long)_char_id); #ifdef DEBUG_PTIMERS printf("Storing all timers for char %lu: '%s'\n", (unsigned long)_char_id, query); #endif if (!db->RunQuery(query, qlen, errbuf)) { safe_delete_array(query); #if EQDEBUG > 5 LogFile->write(EQEMuLog::Error, "Error in PersistentTimer::Clear, error: %s", errbuf); #endif return(false); } safe_delete_array(query); return(true); }
Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs){ char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; if (RunQuery(query, MakeAnyLenString(&query, "SELECT max_x,max_y,max_z,min_x,min_y,heading,name,item,max_allowed,respawn_timer from ground_spawns where zoneid=%i and (version=%u OR version=-1) limit 50", zone_id, version), errbuf, &result)) { safe_delete_array(query); int i=0; while( (row=mysql_fetch_row(result) ) ) { gs->spawn[i].max_x=atof(row[0]); gs->spawn[i].max_y=atof(row[1]); gs->spawn[i].max_z=atof(row[2]); gs->spawn[i].min_x=atof(row[3]); gs->spawn[i].min_y=atof(row[4]); gs->spawn[i].heading=atof(row[5]); strcpy(gs->spawn[i].name,row[6]); gs->spawn[i].item=atoi(row[7]); gs->spawn[i].max_allowed=atoi(row[8]); gs->spawn[i].respawntimer=atoi(row[9]); i++; } mysql_free_result(result); } else { std::cerr << "Error in LoadGroundSpawns query '" << query << "' " << errbuf << std::endl; safe_delete_array(query); } return gs; }
bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList<Spawn2*> &spawn2_list, int16 version, uint32 repopdelay) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; const char *zone_name = database.GetZoneName(zoneid); MakeAnyLenString(&query, "SELECT id, spawngroupID, x, y, z, heading, respawntime, variance, pathgrid, _condition, cond_value, enabled, animation FROM spawn2 WHERE zone='%s' AND version=%u", zone_name, version); if (RunQuery(query, strlen(query), errbuf, &result)) { safe_delete_array(query); while((row = mysql_fetch_row(result))) { Spawn2* newSpawn = 0; bool perl_enabled = atoi(row[11]) == 1 ? true : false; uint32 spawnLeft = (GetSpawnTimeLeft(atoi(row[0]), zone->GetInstanceID()) * 1000); newSpawn = new Spawn2(atoi(row[0]), atoi(row[1]), atof(row[2]), atof(row[3]), atof(row[4]), atof(row[5]), atoi(row[6]), atoi(row[7]), spawnLeft, atoi(row[8]), atoi(row[9]), atoi(row[10]), perl_enabled, (EmuAppearance)atoi(row[12])); spawn2_list.Insert( newSpawn ); } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "Error in PopulateZoneLists query '%s': %s", query, errbuf); safe_delete_array(query); return false; } return true; }
bool EQLConfig::SetDynamicCount(int count) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; char namebuf[128]; database.DoEscapeString(namebuf, m_name.c_str(), m_name.length()&0x3F); //limit len to 64 namebuf[127] = '\0'; if (!database.RunQuery(query, MakeAnyLenString(&query, "UPDATE launcher SET dynamics=%d WHERE name='%s'", count, namebuf), errbuf)) { LogFile->write(EQEMuLog::Error, "Error in SetDynamicCount query: %s", errbuf); safe_delete_array(query); return false; } safe_delete_array(query); //update in-memory version. m_dynamics = count; //if the launcher is connected, update it. LauncherLink *ll = launcher_list.Get(m_name.c_str()); if(ll != nullptr) { ll->BootDynamics(count); } return(false); }
bool ZoneDatabase::CreateSpawn2(Client *c, uint32 spawngroup, const char* zone, float heading, float x, float y, float z, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; uint32 affected_rows = 0; // if(GetInverseXY()==1) { // float temp=x; // x=y; // y=temp; // } if (RunQuery(query, MakeAnyLenString(&query, "INSERT INTO spawn2 (spawngroupID,zone,x,y,z,heading,respawntime,variance,_condition,cond_value) Values (%i, '%s', %f, %f, %f, %f, %i, %i, %u, %i)", spawngroup, zone, x, y, z, heading, respawn, variance, condition, cond_value ), errbuf, 0, &affected_rows)) { safe_delete_array(query); if (affected_rows == 1) { if(c) c->LogSQL(query); return true; } else { return false; } } else { LogFile->write(EQEMuLog::Error, "Error in CreateSpawn2 query '%s': %s", query, errbuf); safe_delete_array(query); return false; } return false; }
bool PersistentTimer::Store(Database *db) { if(Expired(db, false)) //dont need to store expired timers. return(true); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; uint32 qlen = 0; qlen = MakeAnyLenString(&query, "REPLACE INTO timers " " (char_id,type,start,duration,enable) " " VALUES(%lu,%u,%lu,%lu,%d)", (unsigned long)_char_id, _type, (unsigned long)start_time, (unsigned long)timer_time, enabled?1:0); #ifdef DEBUG_PTIMERS printf("Storing timer: char %lu of type %u: '%s'\n", (unsigned long)_char_id, _type, query); #endif if (!db->RunQuery(query, qlen, errbuf)) { safe_delete_array(query); #if EQDEBUG > 5 LogFile->write(EQEMuLog::Error, "Error in PersistentTimer::Store, error: %s", errbuf); #endif return(false); } safe_delete_array(query); return(true); }