diff --git a/zone/forage.cpp b/zone/forage.cpp index b4d35993a..19e52d96d 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -139,12 +139,6 @@ uint32 ZoneDatabase::GetZoneForage(uint32 ZoneID, uint8 skill) { uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, uint8 &npc_chance) { - char errbuf[MYSQL_ERRMSG_SIZE]; - char *query = 0; - MYSQL_RES *result; - MYSQL_ROW row; - - uint8 index = 0; uint32 item[50]; uint32 chance[50]; uint32 npc_ids[50]; @@ -157,44 +151,44 @@ uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, chance[c]=0; } - if (RunQuery(query, MakeAnyLenString(&query, "SELECT itemid,chance,npc_id,npc_chance FROM fishing WHERE (zoneid= '%i' || zoneid = 0) and skill_level <= '%i'",ZoneID, skill ), errbuf, &result)) - { - safe_delete_array(query); - while ((row = mysql_fetch_row(result))&&(index<50)) { - item[index] = atoi(row[0]); - chance[index] = atoi(row[1])+chancepool; - chancepool = chance[index]; - - npc_ids[index] = atoi(row[2]); - npc_chances[index] = atoi(row[3]); - index++; - } - - mysql_free_result(result); - } - else { - std::cerr << "Error in Fishing query '" << query << "' " << errbuf << std::endl; - safe_delete_array(query); + std::string query = StringFormat("SELECT itemid, chance, npc_id, npc_chance " + "FROM fishing WHERE (zoneid = '%i' || zoneid = 0) AND skill_level <= '%i'", + ZoneID, skill); + auto results = QueryDatabase(query); + if (!results.Success()) { + std::cerr << "Error in Fishing query '" << query << "' " << results.ErrorMessage() << std::endl; return 0; - } + } + + uint8 index = 0; + for (auto row = results.begin(); row != results.end(); ++row, ++index) { + if (index >= 50) + break; + + item[index] = atoi(row[0]); + chance[index] = atoi(row[1])+chancepool; + chancepool = chance[index]; + + npc_ids[index] = atoi(row[2]); + npc_chances[index] = atoi(row[3]); + } npc_id = 0; npc_chance = 0; - if (index>0) { - uint32 random = MakeRandomInt(1, chancepool); - for (int i = 0; i < index; i++) - { - if (random <= chance[i]) - { - ret = item[i]; - npc_id = npc_ids[i]; - npc_chance = npc_chances[i]; - break; - } - } - } else { - ret = 0; - } + if (index <= 0) + return 0; + + uint32 random = MakeRandomInt(1, chancepool); + for (int i = 0; i < index; i++) + { + if (random > chance[i]) + continue; + + ret = item[i]; + npc_id = npc_ids[i]; + npc_chance = npc_chances[i]; + break; + } return ret; }