Beispiel #1
0
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);
}
Beispiel #2
0
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);
			}
		}
	}
}
Beispiel #3
0
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);
			}
		}
	}
}
Beispiel #4
0
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);
			}
		}
	}
}
Beispiel #5
0
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);
		}
	}
}
Beispiel #6
0
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);
			}
		}
	}
}
Beispiel #7
0
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);
}
Beispiel #8
0
//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;
}
Beispiel #9
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);
        }
    }
}
Beispiel #10
0
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);
	}
}
Beispiel #11
0
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);
	
}
Beispiel #12
0
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);
	
}
Beispiel #13
0
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;
}
Beispiel #14
0
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);
}
Beispiel #15
0
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);
}
Beispiel #16
0
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;
}
Beispiel #17
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);
}
Beispiel #18
0
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);
}
Beispiel #19
0
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;
}
Beispiel #20
0
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);
}
Beispiel #21
0
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;
}
Beispiel #22
0
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);
}
Beispiel #23
0
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);
}
Beispiel #24
0
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);
}
Beispiel #25
0
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);
}
Beispiel #26
0
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;
}
Beispiel #27
0
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;
}
Beispiel #28
0
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);
}
Beispiel #29
0
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;
}
Beispiel #30
0
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);
}