Exemple #1
0
Account IOAccount::loadAccount(uint32_t accno)
{
	Account acc;

	Database* db = Database::instance();
	DBQuery query;
	DBResult* result;

	query << "SELECT `id`, `password`, `premend`, `warnings` FROM `accounts` WHERE `id` = " << accno;
	if((result = db->storeQuery(query.str()))){
		acc.accnumber = result->getDataInt("id");
		acc.password = result->getDataString("password");
		acc.premEnd = result->getDataInt("premend");
		acc.warnings = result->getDataInt("warnings");
		db->freeResult(result);

		query.str("");
		query << "SELECT `name` FROM `players` WHERE `account_id` = " << accno;
		if((result = db->storeQuery(query.str()))){
			do {
				std::string ss = result->getDataString("name");
				acc.charList.push_back(ss.c_str());
			} while(result->next());

			acc.charList.sort();
			db->freeResult(result);
		}
	}

	return acc;
}
bool IOMapSerialize::updateAuctions()
{
	Database* db = Database::getInstance();
	DBQuery query;

	time_t now = time(NULL);
	query << "SELECT `house_id`, `player_id`, `bid` FROM `house_auctions` WHERE `endtime` < " << now;

	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return true;

	bool success = true;
	House* house = NULL;
	do
	{
		query.str("");
		query << "DELETE FROM `house_auctions` WHERE `house_id` = " << result->getDataInt("house_id");
		if(!(house = Houses::getInstance()->getHouse(result->getDataInt(
			"house_id"))) || !db->query(query.str()))
		{
			success = false;
			continue;
		}

		house->setOwner(result->getDataInt("player_id"));
		Houses::getInstance()->payHouse(house, now, result->getDataInt("bid"));
	}
	while(result->next());
	result->free();
	return success;
}
Exemple #3
0
GuildWarList IOGuild::getWarList(uint32_t guildId)
{
	GuildWarList guildWarList;

	Database* db = Database::getInstance();

	DBQuery query;
	DBResult* result;
	query << "SELECT `guild1` FROM `guild_wars` WHERE `guild2` = " << guildId << " AND `ended` = 0 AND `status` = 1;";
	if((result = db->storeQuery(query.str())))
	{
		do {
			guildWarList.push_back(result->getDataInt("guild1"));
		} while (result->next());
		db->freeResult(result);
	}

	query.str("");
	query << "SELECT `guild2` FROM `guild_wars` WHERE `guild1` = " << guildId << " AND `ended` = 0 AND `status` = 1;";
	if((result = db->storeQuery(query.str())))
	{
		do {
			guildWarList.push_back(result->getDataInt("guild2"));
		} while (result->next());
		db->freeResult(result);
	}
	return guildWarList;
}
Exemple #4
0
const PlayerGroup* IOPlayer::getPlayerGroup(uint32_t groupid)
{
	PlayerGroupMap::const_iterator it = playerGroupMap.find(groupid);

	if(it != playerGroupMap.end()){
		return it->second;
	}
	else{
		Database* db = Database::instance();
		DBQuery query;
		DBResult* result;

		query << "SELECT * FROM `groups` WHERE `id`= " << groupid;

		if((result = db->storeQuery(query.str()))){
			PlayerGroup* group = new PlayerGroup;

			group->m_name = result->getDataString("name");
			group->m_flags = result->getDataLong("flags");
			group->m_access = result->getDataInt("access");
			group->m_maxDepotItems = result->getDataInt("maxdepotitems");
			group->m_maxVip = result->getDataInt("maxviplist");

			playerGroupMap[groupid] = group;

			db->freeResult(result);
			return group;
		}
	}
	return NULL;
}
std::list<VIPEntry> IOLoginData::getVIPEntries(uint32_t accountId)
{
	std::list<VIPEntry> entries;

	Database* db = Database::getInstance();

	std::ostringstream query;
	query << "SELECT `player_id`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `name`, `description`, `icon`, `notify` FROM `account_viplist` WHERE `account_id` = " << accountId;

	DBResult* result;

	if ((result = db->storeQuery(query.str()))) {
		do {
			VIPEntry entry;
			entry.guid = result->getDataInt("player_id");
			entry.name = result->getDataString("name");
			entry.description = result->getDataString("description");
			entry.icon = result->getDataInt("icon");
			entry.notify = result->getDataInt("notify") != 0;
			entries.push_back(entry);
		} while (result->next());

		db->freeResult(result);
	}

	return entries;
}
Exemple #6
0
MarketOfferList IOMarket::getOwnOffers(MarketAction_t action, uint32_t playerId)
{
	Database* db = Database::getInstance();
	DBQuery query;
	query << "SELECT `id`, `amount`, `price`, `created`, `anonymous`, `itemtype` FROM `market_offers` WHERE `player_id` = "
		<< playerId << " AND `sale` = " << action << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << ";";

	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return MarketOfferList();

	MarketOfferList offerList;
	do
	{
		MarketOffer offer;
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.timestamp = result->getDataInt("created") + g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION);
		offer.counter = result->getDataInt("id") & 0xFFFF;
		offer.itemId = result->getDataInt("itemtype");

		offerList.push_back(offer);
	}
	while(result->next());
	result->free();
	return offerList;
}
MarketOfferList IOMarket::getOwnOffers(MarketAction_t action, uint32_t playerId)
{
	MarketOfferList offerList;

	const int32_t marketOfferDuration = g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION);

	std::ostringstream query;
	query << "SELECT `id`, `amount`, `price`, `created`, `anonymous`, `itemtype` FROM `market_offers` WHERE `player_id` = " << playerId << " AND `sale` = " << action;

	Database* db = Database::getInstance();

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return offerList;
	}

	do {
		MarketOffer offer;
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.timestamp = result->getDataInt("created") + marketOfferDuration;
		offer.counter = result->getDataInt("id") & 0xFFFF;
		offer.itemId = result->getDataInt("itemtype");

		offerList.push_back(offer);
	} while (result->next());

	db->freeResult(result);
	return offerList;
}
bool IOLoginData::getGuidByNameEx(uint32_t& guid, bool& specialVip, std::string& name)
{
	Database* db = Database::getInstance();

	std::ostringstream query;
	query << "SELECT `name`, `id`, `group_id`, `account_id` FROM `players` WHERE `name` = " << db->escapeString(name);

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return false;
	}

	name = result->getDataString("name");
	guid = result->getDataInt("id");
	Group* group = g_game.getGroup(result->getDataInt("group_id"));
	db->freeResult(result);

	uint64_t flags;
	if (group) {
		flags = group->flags;
	} else {
		flags = 0;
	}

	specialVip = (0 != (flags & ((uint64_t)1 << PlayerFlag_SpecialVIP)));
	return true;
}
ExpiredMarketOfferList IOMarket::getExpiredOffers(MarketAction_t action)
{
	ExpiredMarketOfferList offerList;

	const time_t lastExpireDate = time(nullptr) - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION);

	std::ostringstream query;
	query << "SELECT `id`, `amount`, `price`, `itemtype`, `player_id` FROM `market_offers` WHERE `sale` = " << action << " AND `created` <= " << lastExpireDate;

	Database* db = Database::getInstance();

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return offerList;
	}

	do {
		ExpiredMarketOffer offer;
		offer.id = result->getDataInt("id");
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.itemId = result->getDataInt("itemtype");
		offer.playerId = result->getDataInt("player_id");

		offerList.push_back(offer);
	} while (result->next());

	db->freeResult(result);
	return offerList;
}
const PlayerGroup* IOLoginData::getPlayerGroup(uint32_t groupid)
{
	PlayerGroupMap::const_iterator it = playerGroupMap.find(groupid);
	if (it != playerGroupMap.end()) {
		return it->second;
	}

	Database* db = Database::getInstance();

	std::ostringstream query;
	query << "SELECT `name`, `flags`, `access`, `maxdepotitems`, `maxviplist` FROM `groups` WHERE `id` = " << groupid;

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return NULL;
	}

	PlayerGroup* group = new PlayerGroup;
	group->m_name = result->getDataString("name");
	group->m_flags = result->getDataLong("flags");
	group->m_access = result->getDataInt("access");
	group->m_maxdepotitems = result->getDataInt("maxdepotitems");
	group->m_maxviplist = result->getDataInt("maxviplist");
	db->freeResult(result);

	playerGroupMap[groupid] = group;
	return group;
}
Exemple #11
0
bool IOGuild::updateWar(War_t& war)
{
	Database* db = Database::getInstance();
	DBResult* result;

	DBQuery query;
	query << "SELECT `g`.`name` AS `guild_name`, `e`.`name` AS `enemy_name`, `w`.* FROM `guild_wars` w LEFT JOIN `guilds` g ON `w`.`guild_id` = `g`.`id` LEFT JOIN `guilds` e ON `w`.`enemy_id` = `e`.`id` WHERE `w`.`id` = " << war.war;
	if(!(result = db->storeQuery(query.str())))
		return false;

	war.ids[WAR_GUILD] = result->getDataInt("guild_id");
	war.ids[WAR_ENEMY] = result->getDataInt("enemy_id");
	war.names[WAR_GUILD] = result->getDataString("guild_name");
	war.names[WAR_ENEMY] = result->getDataString("enemy_name");

	war.frags[WAR_GUILD] = result->getDataInt("guild_kills");
	war.frags[WAR_ENEMY] = result->getDataInt("enemy_kills");
	war.frags[war.type]++;

	war.limit = result->getDataInt("frags");
	war.payment = result->getDataInt("payment");

	result->free();
	if(war.frags[WAR_GUILD] >= war.limit || war.frags[WAR_ENEMY] >= war.limit)
	{
		Scheduler::getInstance().addEvent(createSchedulerTask(1000,
			boost::bind(&IOGuild::finishWar, this, war, true)));
		return true;
	}

	query.str("");
	query << "UPDATE `guild_wars` SET `guild_kills` = " << war.frags[WAR_GUILD] << ", `enemy_kills` = " << war.frags[WAR_ENEMY] << " WHERE `id` = " << war.war;
	return db->query(query.str());
}
Exemple #12
0
HistoryMarketOfferList IOMarket::getOwnHistory(MarketAction_t action, uint32_t playerId)
{
	Database* db = Database::getInstance();
	DBQuery query;
	query << "SELECT `id`, `itemtype`, `amount`, `price`, `expires_at`, `state` FROM `market_history` WHERE `player_id` = "
		<< playerId << " AND `sale` = " << action << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << ";";

	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return HistoryMarketOfferList();

	HistoryMarketOfferList offerList;
	do
	{
		HistoryMarketOffer offer;
		offer.itemId = result->getDataInt("itemtype");
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.timestamp = result->getDataInt("expires_at");

		MarketOfferState_t offerState = (MarketOfferState_t)result->getDataInt("state");
		if(offerState == OFFERSTATE_ACCEPTEDEX)
			offerState = OFFERSTATE_ACCEPTED;

		offer.state = offerState;
		offerList.push_back(offer);
	}
	while(result->next());
	result->free();
	return offerList;
}
Exemple #13
0
ExpiredMarketOfferList IOMarket::getExpiredOffers(MarketAction_t action)
{
	Database* db = Database::getInstance();
	DBQuery query;
	query << "SELECT `id`, `amount`, `price`, `itemtype`, `player_id` FROM `market_offers` WHERE `sale` = " << action << " AND `created` <= "
		<< (time(NULL) - g_config.getNumber(ConfigManager::MARKET_OFFER_DURATION)) << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << ";";
	
	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return ExpiredMarketOfferList();

	ExpiredMarketOfferList offerList;
	do
	{
		ExpiredMarketOffer offer;
		offer.id = result->getDataInt("id");
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.itemId = result->getDataInt("itemtype");
		offer.playerId = result->getDataInt("player_id");

		offerList.push_back(offer);
	}
	while(result->next());
	result->free();
	return offerList;
}
HistoryMarketOfferList IOMarket::getOwnHistory(MarketAction_t action, uint32_t playerId)
{
	HistoryMarketOfferList offerList;

	std::ostringstream query;
	query << "SELECT `id`, `itemtype`, `amount`, `price`, `expires_at`, `state` FROM `market_history` WHERE `player_id` = " << playerId << " AND `sale` = " << action;

	Database* db = Database::getInstance();

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return offerList;
	}

	do {
		HistoryMarketOffer offer;
		offer.itemId = result->getDataInt("itemtype");
		offer.amount = result->getDataInt("amount");
		offer.price = result->getDataInt("price");
		offer.timestamp = result->getDataInt("expires_at");

		MarketOfferState_t offerState = (MarketOfferState_t)result->getDataInt("state");

		if (offerState == OFFERSTATE_ACCEPTEDEX) {
			offerState = OFFERSTATE_ACCEPTED;
		}

		offer.state = offerState;

		offerList.push_back(offer);
	} while (result->next());

	db->freeResult(result);
	return offerList;
}
Exemple #15
0
std::vector<Ban> BanManager::getBans(const BanType_t& type)
{
	assert(type == BAN_IPADDRESS || type == BAN_PLAYER || type == BAN_ACCOUNT || type == BAN_NOTATION);
	Database* db = Database::instance();
	DBQuery query;
	query <<
	      "SELECT "
	      "`id`, "
	      "`value`, "
	      "`param`, "
	      "`expires`, "
	      "`added`, "
	      "`admin_id`, "
	      "`comment`, "
	      "`reason`, "
	      "`action`, "
	      "`statement` "
	      "FROM "
	      "`bans` "
	      "WHERE "
	      "`type` = " << type << " AND "
	      "`active` = 1 AND " <<
	      "(`expires` >= " << std::time(NULL) << " OR `expires` = 0)";
	std::vector<Ban> vec;
	DBResult* result;

	if (!(result = db->storeQuery(query.str())))
	{
		return vec;
	}

	do
	{
		Ban ban;
		ban.type = type;
		ban.id = result->getDataInt("id");
		ban.value = result->getDataString("value");
		ban.param = result->getDataString("param");
		ban.expires = result->getDataLong("expires");
		ban.added = (uint32_t)result->getDataLong("id");
		ban.adminId = result->getDataInt("admin_id");
		ban.reason = result->getDataInt("reason");
		ban.action = (violationAction_t)result->getDataInt("action");
		ban.comment = result->getDataString("comment");
		ban.statement = result->getDataString("statement");
		vec.push_back(ban);
	}
	while (result->next());

	db->freeResult(result);
	return vec;
}
Exemple #16
0
MarketOfferEx IOMarket::getOfferById(uint32_t id)
{
	Database* db = Database::getInstance();
	DBQuery query;
	query << "SELECT `id`, `sale`, `itemtype`, `amount`, `created`, `price`, `player_id`, `anonymous` FROM `market_offers` WHERE `id` = " << id 
		<< " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << ";";

	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return MarketOfferEx();

	MarketOfferEx offer;
	offer.type = (MarketAction_t)result->getDataInt("sale");
	offer.amount = result->getDataInt("amount");
	offer.counter = result->getDataInt("id") & 0xFFFF;
	offer.timestamp = result->getDataInt("created");
	offer.price = result->getDataInt("price");
	offer.itemId = result->getDataInt("itemtype");

	int32_t playerId = result->getDataInt("player_id");
	offer.playerId = playerId;
	if(!result->getDataInt("anonymous"))
	{
		IOLoginData::getInstance()->getNameByGuid(playerId, offer.playerName);
		if(offer.playerName.empty())
			offer.playerName = "Anonymous";
	}
	else
		offer.playerName = "Anonymous";

	result->free();
	return offer;
}
MarketOfferEx IOMarket::getOfferById(uint32_t id)
{
	MarketOfferEx offer;
	std::ostringstream query;
	query << "SELECT `id`, `sale`, `itemtype`, `amount`, `created`, `price`, `player_id`, `anonymous` FROM `market_offers` WHERE `id` = " << id;
	Database* db = Database::getInstance();

	DBResult* result = db->storeQuery(query.str());
	if (result) {
		offer.type = (MarketAction_t)result->getDataInt("sale");
		offer.amount = result->getDataInt("amount");
		offer.counter = result->getDataInt("id") & 0xFFFF;
		offer.timestamp = result->getDataInt("created");
		offer.price = result->getDataInt("price");
		offer.itemId = result->getDataInt("itemtype");

		int32_t playerId = result->getDataInt("player_id");
		offer.playerId = playerId;

		if (result->getDataInt("anonymous") == 0) {
			IOLoginData::getInstance()->getNameByGuid(playerId, offer.playerName);

			if (offer.playerName.empty()) {
				offer.playerName = "Anonymous";
			}
		} else {
			offer.playerName = "Anonymous";
		}

		db->freeResult(result);
	}

	return offer;
}
Exemple #18
0
bool BanManager::isIpBanished(uint32_t clientip, uint32_t mask /*= 0xFFFFFFFF*/) const
{
	if(clientip == 0) return false;
	Database* db = Database::instance();

	DBQuery query;
	query <<
		"SELECT "
			"COUNT(*) AS `count` "
		"FROM "
			"`bans` "
		"WHERE "
			"`type` = " << BAN_IPADDRESS << " AND "
			"((" << clientip << " & " << mask << " & `param`) = (`value` & `param` & " << mask << ")) AND "
			"`active` = 1 AND "
			"(`expires` >= " << std::time(NULL) << " OR `expires` <= 0)";

	DBResult* result;
	if(!(result = db->storeQuery(query.str())))
		return false;

	int t = result->getDataInt("count");
	db->freeResult(result);
	return t > 0;
}
bool IOLoginData::getGuidByName(uint32_t& guid, std::string& name)
{
	GuidCacheMap::const_iterator it = guidCacheMap.find(name);

	if (it != guidCacheMap.end()) {
		name = it->first;
		guid = it->second;
		return true;
	}

	Database* db = Database::getInstance();

	std::ostringstream query;
	query << "SELECT `id`, `name` FROM `players` WHERE `name` = " << db->escapeString(name);

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return false;
	}

	name = result->getDataString("name");
	guid = result->getDataInt("id");
	db->freeResult(result);

	guidCacheMap[name] = guid;
	return true;
}
Exemple #20
0
bool BanManager::isPlayerBanished(const uint32_t& playerId) const
{
	Database* db = Database::instance();
	DBQuery query;
	query <<
	      "SELECT "
	      "COUNT(*) AS `count` "
	      "FROM "
	      "`bans` "
	      "WHERE "
	      "`type` = " << BAN_PLAYER << " AND "
	      "`value` = " << playerId << " AND "
	      "`active` = 1 AND "
	      "(`expires` >= " << std::time(NULL) << " OR `expires` <= 0)";
	DBResult* result;

	if (!(result = db->storeQuery(query.str())))
	{
		return false;
	}

	int t = result->getDataInt("count");
	db->freeResult(result);
	return t > 0;
}
Exemple #21
0
bool IOGuild::joinGuild(Player* player, uint32_t guildId)
{
	Database* db = Database::getInstance();

	DBQuery query;
	DBResult* result;

	query << "SELECT `id`, `name` FROM `guild_ranks` WHERE `guild_id` = " << guildId << " AND `level` = 1 LIMIT 1";
	if(!(result = db->storeQuery(query.str())))
		return false;

	query.str("");

	player->setGuildRank(result->getDataString("name"));
	player->setGuildId(guildId);
	query << "UPDATE `players` SET `rank_id` = " << result->getDataInt("id") << " WHERE `id` = " << player->getGUID() << db->getUpdateLimiter();
	if(!db->executeQuery(query.str()))
		return false;

	query.str("");

	player->setGuildName(getGuildNameById(guildId));
	query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guildId << " AND `level` = 1 LIMIT 1;";
	if(!(result = db->storeQuery(query.str())))
		return false;

	player->setGuildLevel(GUILDLEVEL_MEMBER);
	player->invitedToGuildsList.clear();
	return true;
}
Exemple #22
0
bool IOGuild::changeRank(uint32_t guild, const std::string& oldName, const std::string& newName)
{
	Database* db = Database::getInstance();
	DBResult* result;

	DBQuery query;
	query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << " AND `name` " << db->getStringComparer() << db->escapeString(oldName) << " LIMIT 1";
	if(!(result = db->storeQuery(query.str())))
		return false;

	const uint32_t id = result->getDataInt("id");
	result->free();

	query.str("");
	query << "UPDATE `guild_ranks` SET `name` = " << db->escapeString(newName) << " WHERE `id` = " << id << db->getUpdateLimiter();
	if(!db->query(query.str()))
		return false;

	for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
	{
		if(it->second->getRankId() == id)
			it->second->setRankName(newName);
	}

	return true;
}
Exemple #23
0
bool Database::connect()
{
	// connection handle initialization
	m_handle = mysql_init(nullptr);
	if (!m_handle) {
		std::cout << std::endl << "Failed to initialize MySQL connection handle." << std::endl;
		return false;
	}

	// automatic reconnect
	my_bool reconnect = true;
	mysql_options(m_handle, MYSQL_OPT_RECONNECT, &reconnect);

	// connects to database
	if (!mysql_real_connect(m_handle, g_config.getString(ConfigManager::MYSQL_HOST).c_str(), g_config.getString(ConfigManager::MYSQL_USER).c_str(), g_config.getString(ConfigManager::MYSQL_PASS).c_str(), g_config.getString(ConfigManager::MYSQL_DB).c_str(), g_config.getNumber(ConfigManager::SQL_PORT), nullptr, 0)) {
		std::cout << std::endl << "MySQL Error Message: " << mysql_error(m_handle) << std::endl;
		return false;
	}

	m_connected = true;

	DBResult* result = storeQuery("SHOW variables LIKE 'max_allowed_packet'");
	if (result) {
		int32_t max_query = result->getDataInt("Value");
		freeResult(result);

		if (max_query < 16777216) {
			std::cout << std::endl << "[Warning] max_allowed_packet might too low for house item storage" << std::endl;
			std::cout << "Use the following query to raise max_allow_packet: ";
			std::cout << "SET GLOBAL max_allowed_packet = 16777216";
		}
	}
	return true;
}
void IOLoginData::updateHouseOwners()
{
	Database* db = Database::getInstance();

	std::ostringstream query;
	DBResult* result;
	query << "SELECT `id`, `highest_bidder`, `last_bid` FROM `houses` WHERE `owner` = 0 AND `bid_end` != 0 AND `bid_end` < " << time(nullptr);

	if ((result = db->storeQuery(query.str()))) {
		do {
			House* house = Houses::getInstance().getHouse(result->getDataInt("id"));

			if (house) {
				DBResult* result2;
				query.str("");
				query << "SELECT `balance` FROM `players` WHERE `id` = " << result->getDataInt("highest_bidder");
				bool canPay = false;

				if ((result2 = db->storeQuery(query.str()))) {
					if (result2->getDataInt("balance") >= result->getDataInt("last_bid")) {
						canPay = true;
					}

					db->freeResult(result2);
				}

				if (canPay) {
					query.str("");
					query << "UPDATE `players` SET `balance` = `balance` - " << result->getDataInt("last_bid") << " WHERE `id` = " << result->getDataInt("highest_bidder");
					db->executeQuery(query.str());

					house->setHouseOwner(result->getDataInt("highest_bidder"));
				}

				query.str("");
				query << "UPDATE `houses` SET `last_bid` = 0, `bid_end` = 0, `highest_bidder` = 0, `bid` = 0 WHERE `id` = " << result->getDataInt("id");
				db->executeQuery(query.str());
			}
		} while (result->next());

		db->freeResult(result);
	}
}
Exemple #25
0
bool BanManager::isAccountBanished(uint32_t accountId) const
{
	Database* db = Database::instance();
	DBQuery query;
	DBResult* result;

	int32_t t = 0;

	//Check for banishments
	query <<
		"SELECT "
			"COUNT(*) AS `count` "
		"FROM "
			"`bans` "
		"WHERE "
			"`type` = " << BAN_ACCOUNT << " AND "
			"`value` = " << accountId << " AND "
			"`active` = 1 AND "
			"(`expires` >= " << std::time(NULL) << " OR `expires` <= 0)";

	if((result = db->storeQuery(query.str()))){
		t += result->getDataInt("count");
		db->freeResult(result);
	}
	
	//Check if account is blocked
	query.str("");
	query <<
		"SELECT "
			"COUNT(*) AS `count` "
		"FROM "
			"`accounts` "
		"WHERE "
			"`id` = " << accountId << " AND "
			"`blocked` = 1";

	if((result = db->storeQuery(query.str()))){
		t += result->getDataInt("count");
		db->freeResult(result);
	}
	
	return t > 0;
}
bool IOLoginData::loginserverAuthentication(const std::string& name, const std::string& password, Account& account)
{
	if (name.empty()) {
		return true;
	}

	Database* db = Database::getInstance();

	std::ostringstream query;
	query << "SELECT `id`, `name`, `password`, `type`, `premdays`, `lastday` FROM `accounts` WHERE `name` = " << db->escapeString(name);

	DBResult* result = db->storeQuery(query.str());
	if (!result) {
		return false;
	}

	if (transformToSHA1(password) != result->getDataString("password")) {
		db->freeResult(result);
		return false;
	}

	account.id = result->getDataInt("id");
	account.name = result->getDataString("name");
	account.accountType = (AccountType_t)result->getDataInt("type");
	account.premiumDays = result->getDataInt("premdays");
	account.lastDay = result->getDataInt("lastday");
	db->freeResult(result);

	query.str("");
	query << "SELECT `name`, `deletion` FROM `players` WHERE `account_id` = " << account.id;
	result = db->storeQuery(query.str());
	if (result) {
		do {
			if (result->getDataInt("deletion") == 0) {
				account.charList.push_back(result->getDataString("name"));
			}
		} while (result->next());
		db->freeResult(result);
		account.charList.sort();
	}
	return true;
}
bool IOMapSerialize::loadMap(Map* map)
{
	int64_t start = OTSYS_TIME();

	Database* db = Database::getInstance();
	std::ostringstream query;

	DBResult* result = db->storeQuery("SELECT `id` FROM `houses`");
	if (!result) {
		return true;
	}

	do {
		query.str("");
		query << "SELECT `data` FROM `tile_store` WHERE `house_id` = " << result->getDataInt("id");
		DBResult* tileResult = db->storeQuery(query.str());
		if (!tileResult) {
			continue;
		}

		do {
			unsigned long attrSize = 0;
			const char* attr = tileResult->getDataStream("data", attrSize);

			PropStream propStream;
			propStream.init(attr, attrSize);

			uint16_t x = 0, y = 0;
			uint8_t z = 0;
			propStream.GET_USHORT(x);
			propStream.GET_USHORT(y);
			propStream.GET_UCHAR(z);
			if (x == 0 || y == 0) {
				continue;
			}

			Tile* tile = map->getTile(x, y, z);
			if (!tile) {
				continue;
			}

			uint32_t item_count = 0;
			propStream.GET_ULONG(item_count);

			while (item_count--) {
				loadItem(propStream, tile);
			}
		} while (tileResult->next());
		db->freeResult(tileResult);
	} while (result->next());
	db->freeResult(result);
	std::cout << "> Loaded house items in: " << (OTSYS_TIME() - start) / (1000.) << " s" << std::endl;
	return true;
}
Exemple #28
0
uint32_t IOGuild::getGuildId(uint32_t guid)
{
	Database* db = Database::getInstance();

	DBQuery query;
	DBResult* result;
	query << "SELECT `rank_id` FROM `players` WHERE `id` = " << guid << ";";
	if(!(result = db->storeQuery(query.str())))
		return 0;

	query.str("");
	query << "SELECT `guild_id` FROM `guild_ranks` WHERE `id` = " << result->getDataInt("rank_id") << ";";
	db->freeResult(result);
	if(!(result = db->storeQuery(query.str())))
		return 0;

	uint32_t guildId = result->getDataInt("guild_id");
	db->freeResult(result);
	return guildId;
}
Exemple #29
0
int8_t IOGuild::getGuildLevel(uint32_t guid)
{
	Database* db = Database::getInstance();

	DBQuery query;
	DBResult* result;
	query << "SELECT `rank_id` FROM `players` WHERE `id` = " << guid << " LIMIT 1;";
	if(!(result = db->storeQuery(query.str())))
		return 0;

	query.str("");
	query << "SELECT `level` FROM `guild_ranks` WHERE `id` = " << result->getDataInt("rank_id") << " LIMIT 1;";
	db->freeResult(result);
	if(!(result = db->storeQuery(query.str())))
		return 0;

	int8_t level = result->getDataInt("level");
	db->freeResult(result);
	return level;
}
bool IOMapSerialize::loadHouseInfo()
{
	Database* db = Database::getInstance();

	DBResult* result = db->storeQuery("SELECT `id`, `owner`, `paid`, `warnings` FROM `houses`");
	if (!result) {
		return false;
	}

	do {
		House* house = Houses::getInstance().getHouse(result->getDataInt("id"));
		if (house) {
			house->setOwner(result->getDataInt("owner"), false);
			house->setPaidUntil(result->getDataInt("paid"));
			house->setPayRentWarnings(result->getDataInt("warnings"));
		}
	} while (result->next());
	db->freeResult(result);

	result = db->storeQuery("SELECT `house_id`, `listid`, `list` FROM `house_lists`");
	if (result) {
		do {
			House* house = Houses::getInstance().getHouse(result->getDataInt("house_id"));
			if (house) {
				house->setAccessList(result->getDataInt("listid"), result->getDataString("list"));
			}
		} while (result->next());
		db->freeResult(result);
	}
	return true;
}