LoadPetInfo converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-08-21 15:58:11 -07:00
parent e731cfd48d
commit 833227f7f6

View File

@ -2173,28 +2173,28 @@ void ZoneDatabase::RemoveTempFactions(Client *client) {
} }
void ZoneDatabase::LoadPetInfo(Client *c) { void ZoneDatabase::LoadPetInfo(Client *client) {
// Load current pet and suspended pet
char errbuf[MYSQL_ERRMSG_SIZE];
char* query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
PetInfo *petinfo = c->GetPetInfo(0); // Load current pet and suspended pet
PetInfo *suspended = c->GetPetInfo(1); PetInfo *petinfo = client->GetPetInfo(0);
PetInfo *pi; PetInfo *suspended = client->GetPetInfo(1);
uint16 pet;
memset(petinfo, 0, sizeof(PetInfo)); memset(petinfo, 0, sizeof(PetInfo));
memset(suspended, 0, sizeof(PetInfo)); memset(suspended, 0, sizeof(PetInfo));
if(database.RunQuery(query, MakeAnyLenString(&query, std::string query = StringFormat("SELECT `pet`, `petname`, `petpower`, `spell_id`, "
"SELECT `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size` from `character_pet_info` where `char_id`=%u", "`hp`, `mana`, `size` FROM `character_pet_info` "
c->CharacterID()), errbuf, &result)) "WHERE `char_id` = %u", client->CharacterID());
{ auto results = database.QueryDatabase(query);
safe_delete_array(query); if(!results.Success()) {
while ((row = mysql_fetch_row(result))) { LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
pet = atoi(row[0]); return;
}
PetInfo *pi;
for (auto row = results.begin(); row != results.end(); ++row) {
uint16 pet = atoi(row[0]);
if (pet == 0) if (pet == 0)
pi = petinfo; pi = petinfo;
else if (pet == 1) else if (pet == 1)
@ -2209,26 +2209,18 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
pi->Mana = atoul(row[5]); pi->Mana = atoul(row[5]);
pi->size = atof(row[6]); pi->size = atof(row[6]);
} }
mysql_free_result(result);
} query = StringFormat("SELECT `pet`, `slot`, `spell_id`, `caster_level`, `castername`, "
else "`ticsremaining`, `counters` FROM `character_pet_buffs` "
{ "WHERE `char_id` = %u", client->CharacterID());
LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query, errbuf); results = QueryDatabase(query);
safe_delete_array(query); if (!results.Success()) {
LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
return; return;
} }
for (auto row = results.begin(); row != results.end(); ++row) {
if (RunQuery(query, MakeAnyLenString(&query, uint16 pet = atoi(row[0]);
"SELECT `pet`, `slot`, `spell_id`, `caster_level`, `castername`, "
"`ticsremaining`, `counters` FROM `character_pet_buffs` "
"WHERE `char_id`=%u",
c->CharacterID()), errbuf, &result))
{
safe_delete_array(query);
while ((row = mysql_fetch_row(result)))
{
pet = atoi(row[0]);
if (pet == 0) if (pet == 0)
pi = petinfo; pi = petinfo;
else if (pet == 1) else if (pet == 1)
@ -2237,19 +2229,16 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
continue; continue;
uint32 slot_id = atoul(row[1]); uint32 slot_id = atoul(row[1]);
if(slot_id >= RuleI(Spells, MaxTotalSlotsPET)) { if(slot_id >= RuleI(Spells, MaxTotalSlotsPET))
continue; continue;
}
uint32 spell_id = atoul(row[2]); uint32 spell_id = atoul(row[2]);
if(!IsValidSpell(spell_id)) { if(!IsValidSpell(spell_id))
continue; continue;
}
uint32 caster_level = atoi(row[3]); uint32 caster_level = atoi(row[3]);
int caster_id = 0; int caster_id = 0;
// The castername field is currently unused // The castername field is currently unused
//Client *caster = entity_list.GetClientByName(row[4]);
//if (caster) { caster_id = caster->GetID(); }
uint32 ticsremaining = atoul(row[5]); uint32 ticsremaining = atoul(row[5]);
uint32 counters = atoul(row[6]); uint32 counters = atoul(row[6]);
@ -2261,21 +2250,18 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
pi->Buffs[slot_id].duration = ticsremaining; pi->Buffs[slot_id].duration = ticsremaining;
pi->Buffs[slot_id].counters = counters; pi->Buffs[slot_id].counters = counters;
} }
mysql_free_result(result);
} query = StringFormat("SELECT `pet`, `slot`, `item_id` "
else { "FROM `character_pet_inventory` "
LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query, errbuf); "WHERE `char_id`=%u",client->CharacterID());
safe_delete_array(query); results = database.QueryDatabase(query);
if (!results.Success()) {
LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query.c_str(), results.ErrorMessage().c_str());
return; return;
} }
if (database.RunQuery(query, MakeAnyLenString(&query, for(auto row = results.begin(); row != results.end(); ++row) {
"SELECT `pet`, `slot`, `item_id` FROM `character_pet_inventory` WHERE `char_id`=%u", uint16 pet = atoi(row[0]);
c->CharacterID()), errbuf, &result))
{
safe_delete_array(query);
while((row = mysql_fetch_row(result))) {
pet = atoi(row[0]);
if (pet == 0) if (pet == 0)
pi = petinfo; pi = petinfo;
else if (pet == 1) else if (pet == 1)
@ -2289,13 +2275,7 @@ void ZoneDatabase::LoadPetInfo(Client *c) {
pi->Items[slot] = atoul(row[2]); pi->Items[slot] = atoul(row[2]);
} }
mysql_free_result(result);
}
else {
LogFile->write(EQEMuLog::Error, "Error in LoadPetInfo query '%s': %s", query, errbuf);
safe_delete_array(query);
return;
}
} }
bool ZoneDatabase::GetFactionData(FactionMods* fm, uint32 class_mod, uint32 race_mod, uint32 deity_mod, int32 faction_id) { bool ZoneDatabase::GetFactionData(FactionMods* fm, uint32 class_mod, uint32 race_mod, uint32 deity_mod, int32 faction_id) {