mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-24 07:32:40 +00:00
LoadAAs converted to QueryDatabase
This commit is contained in:
parent
ca84040a39
commit
118c2a9db9
130
zone/bot.cpp
130
zone/bot.cpp
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user