Option 1: Add a safeguard to RecordPet() so that it doesn't try to execute when information is missing.
Lua Code:
function BattleDex.RecordPet(species, level, quality, primary)
if (species) then
--print(string.format("s=%d, l=%d, q=%d, p=%d", species, level, quality, primary));
_G.BattleDexDB.pets[species] = _G.BattleDexDB.pets[species] or {};
local key = primary.."_"..level.."_"..quality;
_G.BattleDexDB.pets[species][key] = _G.BattleDexDB.pets[species][key] or 0;
_G.BattleDexDB.pets[species][key] = _G.BattleDexDB.pets[species][key] + 1;
end
end
Option 2: Change RecordBattle() so it is smart enough to know you sometimes have fewer than three pets.
I think you can do it using
C_PetBattles.GetNumPets() but its probably also doable with a simple if (s2) then ... end
Lua Code:
function BattleDex.RecordBattle()
if (not C_PetBattles.IsWildBattle()) then
return;
end
-- first pet
local s1 = C_PetBattles.GetPetSpeciesID(2, 1);
local l1 = C_PetBattles.GetLevel(2, 1);
local r1 = C_PetBattles.GetBreedQuality(2, 1);
BattleDex.RecordPet(s1, l1, r1, 0); -- 4th arg means self is primary
-- second pet
if (C_PetBattles.GetNumPets(2) >= 2) then
local s2 = C_PetBattles.GetPetSpeciesID(2, 2);
local l2 = C_PetBattles.GetLevel(2, 2);
local r2 = C_PetBattles.GetBreedQuality(2, 2);
BattleDex.RecordPet(s2, l2, r2, s1); -- 4th arg points to first pet
end
-- third pet
if (C_PetBattles.GetNumPets(2) >= 3) then
local s3 = C_PetBattles.GetPetSpeciesID(2, 3);
local l3 = C_PetBattles.GetLevel(2, 3);
local r3 = C_PetBattles.GetBreedQuality(2, 3);
BattleDex.RecordPet(s3, l3, r3, s1); -- 4th arg points to first pet
end
end