LoadAAs converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-09-03 13:49:04 -07:00
parent ca84040a39
commit 118c2a9db9

View File

@ -1466,85 +1466,75 @@ void Bot::GenerateAABonuses(StatBonuses* newbon) {
} }
void Bot::LoadAAs() { void Bot::LoadAAs() {
std::string errorMessage;
char* Query = 0;
int length = 0;
char TempErrorMessageBuffer[MYSQL_ERRMSG_SIZE];
MYSQL_RES* DatasetResult;
MYSQL_ROW DataRow;
int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to int maxAAExpansion = RuleI(Bots, BotAAExpansion); //get expansion to get AAs up to
botAAs.clear(); //start fresh botAAs.clear(); //start fresh
std::string query;
if(GetClass() == BERSERKER) if(GetClass() == BERSERKER)
length = MakeAnyLenString(&Query, "SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion); query = StringFormat("SELECT skill_id FROM altadv_vars WHERE berserker = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetLevel(), maxAAExpansion);
else else
length = MakeAnyLenString(&Query, "SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion); query = StringFormat("SELECT skill_id FROM altadv_vars WHERE ((classes & ( 1 << %i )) >> %i) = 1 AND class_type > 1 AND class_type <= %i AND aa_expansion <= %i ORDER BY skill_id;", GetClass(), GetClass(), GetLevel(), maxAAExpansion);
if(!database.RunQuery(Query, length, TempErrorMessageBuffer, &DatasetResult)) { auto results = database.QueryDatabase(query);
errorMessage = std::string(TempErrorMessageBuffer);
}
else {
int totalAAs = database.CountAAs();
while(DataRow = mysql_fetch_row(DatasetResult)) { if(!results.Success()) {
uint32 skill_id = 0;
skill_id = atoi(DataRow[0]);
if(skill_id > 0 && skill_id < totalAAs) {
SendAA_Struct *sendAA = zone->FindAA(skill_id);
if(sendAA) {
for(int i=0; i<sendAA->max_level; i++) {
//Get AA info & add to list
uint32 aaid = sendAA->id + i;
uint8 total_levels = 0;
uint8 req_level;
std::map<uint32, AALevelCost_Struct>::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid);
//Get level required for AA
if(RequiredLevel != AARequiredLevelAndCost.end())
req_level = RequiredLevel->second.Level;
else
req_level = (sendAA->class_type + i * sendAA->level_inc);
if(req_level > GetLevel())
break;
//Bot is high enough level for AA
std::map<uint32, BotAA>::iterator foundAA = botAAs.find(aaid);
// AA is not already in list
if(foundAA == botAAs.end()) {
if(sendAA->id == aaid) {
BotAA newAA;
newAA.total_levels = 0;
newAA.aa_id = aaid;
newAA.req_level = req_level;
newAA.total_levels += 1;
botAAs[aaid] = newAA; //add to list
}
else {
//update master AA record with number of levels a bot has in AA, based on level.
botAAs[sendAA->id].total_levels+=1;
}
}
}
}
}
}
mysql_free_result(DatasetResult);
}
safe_delete(Query);
Query = 0;
if(!errorMessage.empty()) {
LogFile->write(EQEMuLog::Error, "Error in Bot::LoadAAs()"); LogFile->write(EQEMuLog::Error, "Error in Bot::LoadAAs()");
return;
} }
int totalAAs = database.CountAAs();
for (auto row = results.begin(); row != results.end(); ++row) {
uint32 skill_id = 0;
skill_id = atoi(row[0]);
if(skill_id <= 0 || skill_id >= totalAAs)
continue;
SendAA_Struct *sendAA = zone->FindAA(skill_id);
if(!sendAA)
continue;
for(int i=0; i<sendAA->max_level; i++) {
//Get AA info & add to list
uint32 aaid = sendAA->id + i;
uint8 total_levels = 0;
uint8 req_level;
std::map<uint32, AALevelCost_Struct>::iterator RequiredLevel = AARequiredLevelAndCost.find(aaid);
//Get level required for AA
if(RequiredLevel != AARequiredLevelAndCost.end())
req_level = RequiredLevel->second.Level;
else
req_level = (sendAA->class_type + i * sendAA->level_inc);
if(req_level > GetLevel())
break;
//Bot is high enough level for AA
std::map<uint32, BotAA>::iterator foundAA = botAAs.find(aaid);
// AA is already in list
if(foundAA != botAAs.end())
continue;
if(sendAA->id == aaid) {
BotAA newAA;
newAA.total_levels = 0;
newAA.aa_id = aaid;
newAA.req_level = req_level;
newAA.total_levels += 1;
botAAs[aaid] = newAA; //add to list
}
else //update master AA record with number of levels a bot has in AA, based on level.
botAAs[sendAA->id].total_levels+=1;
}
}
} }
uint32 Bot::GetAA(uint32 aa_id) { uint32 Bot::GetAA(uint32 aa_id) {