LearnRecipe converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-10-08 16:02:30 -07:00
parent 97c1c479f9
commit 5dac9a944b

View File

@ -1418,73 +1418,54 @@ bool ZoneDatabase::GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id
return true; return true;
} }
void ZoneDatabase::UpdateRecipeMadecount(uint32 recipe_id, uint32 char_id, uint32 madecount) void ZoneDatabase::UpdateRecipeMadecount(uint32 recipe_id, uint32 char_id, uint32 madeCount)
{ {
char *query = 0; std::string query = StringFormat("INSERT INTO char_recipe_list "
uint32 qlen;
char errbuf[MYSQL_ERRMSG_SIZE];
qlen = MakeAnyLenString(&query, "INSERT INTO char_recipe_list "
"SET recipe_id = %u, char_id = %u, madecount = %u " "SET recipe_id = %u, char_id = %u, madecount = %u "
" ON DUPLICATE KEY UPDATE madecount = %u;" "ON DUPLICATE KEY UPDATE madecount = %u;",
, recipe_id, char_id, madecount, madecount); recipe_id, char_id, madeCount, madeCount);
auto results = QueryDatabase(query);
if (!RunQuery(query, qlen, errbuf)) { if (!results.Success())
LogFile->write(EQEMuLog::Error, "Error in UpdateRecipeMadecount query '%s': %s", query, errbuf); LogFile->write(EQEMuLog::Error, "Error in UpdateRecipeMadecount query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
}
safe_delete_array(query);
} }
void Client::LearnRecipe(uint32 recipeID) void Client::LearnRecipe(uint32 recipeID)
{ {
char *query = 0; std::string query = StringFormat("SELECT tr.name, crl.madecount "
uint32 qlen; "FROM tradeskill_recipe AS tr "
uint32 qcount = 0; "LEFT JOIN (SELECT recipe_id, madecount "
char errbuf[MYSQL_ERRMSG_SIZE]; "FROM char_recipe_list WHERE char_id = %u) AS crl "
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 " "ON tr.id = crl.recipe_id "
"WHERE tr.id = %u ;", CharacterID(), recipeID); "WHERE tr.id = %u ;", CharacterID(), recipeID);
auto results = database.QueryDatabase(query);
if (!database.RunQuery(query, qlen, errbuf, &result)) { if (!results.Success()) {
LogFile->write(EQEMuLog::Error, "Error in Client::LearnRecipe query '%s': %s", query, errbuf); LogFile->write(EQEMuLog::Error, "Error in Client::LearnRecipe query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
safe_delete_array(query);
return; return;
} }
qcount = mysql_num_rows(result); if (results.RowCount() != 1) {
if (qcount != 1) { LogFile->write(EQEMuLog::Normal, "Client::LearnRecipe - RecipeID: %d had %d occurences.", recipeID, results.RowCount());
LogFile->write(EQEMuLog::Normal, "Client::LearnRecipe - RecipeID: %d had %d occurences.", recipeID, qcount);
mysql_free_result(result);
safe_delete_array(query);
return; return;
} }
safe_delete_array(query);
row = mysql_fetch_row(result); auto row = results.begin();
if (row[0] == nullptr)
return;
if (row != nullptr && row[0] != nullptr) {
// Only give Learn message if character doesn't know the recipe // Only give Learn message if character doesn't know the recipe
if (row[1] == nullptr) { if (row[1] != nullptr)
return;
Message_StringID(4, TRADESKILL_LEARN_RECIPE, row[0]); Message_StringID(4, TRADESKILL_LEARN_RECIPE, row[0]);
// Actually learn the recipe now // Actually learn the recipe now
qlen = MakeAnyLenString(&query, "INSERT INTO char_recipe_list " query = StringFormat("INSERT INTO char_recipe_list "
"SET recipe_id = %u, char_id = %u, madecount = 0 " "SET recipe_id = %u, char_id = %u, madecount = 0 "
" ON DUPLICATE KEY UPDATE madecount = madecount;" "ON DUPLICATE KEY UPDATE madecount = madecount;",
, recipeID, CharacterID()); recipeID, CharacterID());
results = database.QueryDatabase(query);
if (!database.RunQuery(query, qlen, errbuf)) { if (!results.Success())
LogFile->write(EQEMuLog::Error, "Error in LearnRecipe query '%s': %s", query, errbuf); LogFile->write(EQEMuLog::Error, "Error in LearnRecipe query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
}
safe_delete_array(query);
}
}
mysql_free_result(result);
} }