TryReward converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-08-23 23:15:49 -07:00
parent a48138dfd6
commit 7f92e96ae7

View File

@ -5336,88 +5336,54 @@ bool Client::TryReward(uint32 claim_id)
}
if(free_slot == 0xFFFFFFFF)
{
return false;
}
char errbuf[MYSQL_ERRMSG_SIZE];
char* query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
uint32 amt = 0;
if(database.RunQuery(query,MakeAnyLenString(&query,"SELECT amount FROM"
" account_rewards WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
errbuf,&result))
{
row = mysql_fetch_row(result);
if(row)
{
amt = atoi(row[0]);
}
else
{
mysql_free_result(result);
safe_delete_array(query);
return false;
}
mysql_free_result(result);
safe_delete_array(query);
}
else
{
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
safe_delete_array(query);
std::string query = StringFormat("SELECT amount FROM account_rewards "
"WHERE account_id=%i AND reward_id=%i",
AccountID(), claim_id);
auto results = database.QueryDatabase(query);
if (!results.Success()) {
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
return false;
}
}
if (results.RowCount() == 0)
return false;
uint32 amt = 0;
auto row = results.begin();
amt = atoi(row[0]);
if(amt == 0)
{
return false;
}
std::list<InternalVeteranReward>::iterator iter = zone->VeteranRewards.begin();
while(iter != zone->VeteranRewards.end())
{
auto iter = zone->VeteranRewards.begin();
for (; iter != zone->VeteranRewards.end(); ++iter)
if((*iter).claim_id == claim_id)
{
break;
}
++iter;
}
if(iter == zone->VeteranRewards.end())
{
return false;
}
if(amt == 1)
{
if(!database.RunQuery(query,MakeAnyLenString(&query,"DELETE FROM"
" account_rewards WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
errbuf))
{
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
safe_delete_array(query);
}
else
{
safe_delete_array(query);
}
query = StringFormat("DELETE FROM account_rewards "
"WHERE account_id=%i AND reward_id=%i",
AccountID(), claim_id);
results = database.QueryDatabase(query);
if(!results.ErrorMessage().c_str())
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
}
else
{
if(!database.RunQuery(query,MakeAnyLenString(&query,"UPDATE account_rewards SET amount=(amount-1)"
" WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
errbuf))
{
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
safe_delete_array(query);
}
else
{
safe_delete_array(query);
}
query = StringFormat("UPDATE account_rewards SET amount=(amount-1) "
"WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id);
results = database.QueryDatabase(query);
if(!results.Success())
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
}
InternalVeteranReward ivr = (*iter);