Skip to content

Commit

Permalink
10.2 always send the realm name even if the unit is from the player's…
Browse files Browse the repository at this point in the history
… realm, this patch fixes the issues caused by the change
  • Loading branch information
Tercioo committed Oct 28, 2023
1 parent b304b3b commit f870036
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 233 deletions.
10 changes: 10 additions & 0 deletions Definitions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,17 @@
---@field key5 petname
---@field key6 guid

---@class petownerinfo : table
---@field key1 unitname owner name
---@field key2 guid owner guid
---@field key3 controlflags owner flags
---@field key4 unixtime time when the pet was created
---@field key5 boolean true if the pet is part of the player's group
---@field key6 petname pet name
---@field key7 guid pet guid

---@class details
---@field pets table<guid, petinfo> store the pet guid as the key and the petinfo as the value
---@field SpellTableMixin spelltablemixin
---@field GetInstance fun(self: details) : instance
---@field GetWindow fun(self: details) : instance this is an alias of GetInstance
Expand Down
6 changes: 3 additions & 3 deletions classes/container_actors.lua
Original file line number Diff line number Diff line change
Expand Up @@ -685,8 +685,8 @@ end
local petOwnerFound = function(ownerName, petGUID, petName, petFlags, self, ownerGUID)
local ownerGuid = ownerGUID or UnitGUID(ownerName)
if (ownerGuid) then
Details.tabela_pets:Adicionar(petGUID, petName, petFlags, ownerGuid, ownerName, 0x00000417)
local petNameWithOwner, ownerName, ownerGUID, ownerFlags = Details.tabela_pets:PegaDono(petGUID, petName, petFlags)
Details.tabela_pets:AddPet(petGUID, petName, petFlags, ownerGuid, ownerName, 0x00000417)
local petNameWithOwner, ownerName, ownerGUID, ownerFlags = Details.tabela_pets:GetPetOwner(petGUID, petName, petFlags)

local petOwnerActorObject

Expand Down Expand Up @@ -721,7 +721,7 @@ end
actorSerial = actorSerial or "ns"

if (container_pets[actorSerial]) then --this is a registered pet
local petName, ownerName, ownerGUID, ownerFlag = Details.tabela_pets:PegaDono(actorSerial, actorName, actorFlags)
local petName, ownerName, ownerGUID, ownerFlag = Details.tabela_pets:GetPetOwner(actorSerial, actorName, actorFlags)
if (petName and ownerName and ownerGUID ~= actorSerial) then
actorName = petName
petOwnerObject = self:PegarCombatente(ownerGUID, ownerName, ownerFlag, true)
Expand Down
181 changes: 82 additions & 99 deletions classes/container_pets.lua
Original file line number Diff line number Diff line change
Expand Up @@ -34,85 +34,75 @@ end
local OBJECT_TYPE_PET = 0x00001000
local OBJECT_IN_GROUP = 0x00000007

function container_pets:PegaDono(petGUID, petName, petFlags)
function container_pets:GetPetOwner(petGUID, petName, petFlags)
--sair se o pet estiver na ignore
if (bIsIgnored[petGUID]) then
return
end

--buscar pelo pet no container de pets
local busca = self.pets[petGUID]
if (busca) then
local petInfo = self.pets[petGUID]
if (petInfo) then
--in merging operations, make sure to not add the owner name a second time in the name

--check if the pet name already has the owner name in, if not, add it
if (not petName:find("<")) then
--get the owner name
local ownerName = busca[1]
local ownerName = petInfo[1]
--add the owner name to the pet name
petName = petName .. " <".. ownerName ..">"
end

--return busca[6] or pet_nome, busca[1], busca[2], busca[3] --busca[6] poderia estar causando problemas
return petName, busca[1], busca[2], busca[3] --[1] dono nome[2] dono serial[3] dono flag
return petName, petInfo[1], petInfo[2], petInfo[3] --petName, ownerName, ownerGUID, ownerFlags
end

--buscar pelo pet na raide
local dono_nome, dono_serial, dono_flags
local ownerName, ownerGUID, ownerFlags

if (IsInRaid()) then
for i = 1, GetNumGroupMembers() do
if (petGUID == UnitGUID("raidpet"..i)) then
dono_serial = UnitGUID(unitIDRaidCache[i])
dono_flags = 0x00000417 --emulate sourceflag flag

local nome, realm = UnitName(unitIDRaidCache[i])
if (realm and realm ~= "") then
nome = nome.."-"..realm
end
dono_nome = nome
ownerGUID = UnitGUID(unitIDRaidCache[i])
ownerFlags = 0x00000417 --emulate sourceflag flag
local unitName = Details:GetFullName(unitIDRaidCache[i])
ownerName = unitName
end
end

elseif (IsInGroup()) then
for i = 1, GetNumGroupMembers()-1 do
if (petGUID == UnitGUID("partypet"..i)) then
dono_serial = UnitGUID("party"..i)
dono_flags = 0x00000417 --emulate sourceflag flag

local nome, realm = UnitName("party"..i)
if (realm and realm ~= "") then
nome = nome.."-"..realm
end

dono_nome = nome
ownerGUID = UnitGUID("party"..i)
ownerFlags = 0x00000417 --emulate sourceflag flag
local unitName = Details:GetFullName("party"..i)
ownerName = unitName
end
end
end

if (not dono_nome) then
if (not ownerName) then
if (petGUID == UnitGUID("pet")) then
dono_nome = GetUnitName("player")
dono_serial = UnitGUID("player")
ownerName = Details:GetFullName("player")
ownerGUID = UnitGUID("player")
if (IsInGroup() or IsInRaid()) then
dono_flags = 0x00000417 --emulate sourceflag flag
ownerFlags = 0x00000417 --emulate sourceflag flag
else
dono_flags = 0x00000411 --emulate sourceflag flag
ownerFlags = 0x00000411 --emulate sourceflag flag
end
end
end

if (dono_nome) then
self.pets[petGUID] = {dono_nome, dono_serial, dono_flags, Details._tempo, true, petName, petGUID} --adicionada a flag emulada
if (ownerName) then
local foundTime = Details._tempo
self.pets[petGUID] = {ownerName, ownerGUID, ownerFlags, foundTime, true, petName, petGUID} --adicionada a flag emulada

if (not petName:find("<")) then
petName = petName .. " <".. dono_nome ..">"
petName = petName .. " <".. ownerName ..">"
end

return petName, dono_nome, dono_serial, dono_flags
return petName, ownerName, ownerGUID, ownerFlags
else

if (petFlags and bitBand(petFlags, OBJECT_TYPE_PET) ~= 0) then --� um pet
if (petFlags and bitBand(petFlags, OBJECT_TYPE_PET) ~= 0) then --is a pet
if (not Details.pets_no_owner[petGUID] and bitBand(petFlags, OBJECT_IN_GROUP) ~= 0) then
Details.pets_no_owner[petGUID] = {petName, petFlags}
Details:Msg("couldn't find the owner of the pet:", petName)
Expand All @@ -121,34 +111,35 @@ function container_pets:PegaDono(petGUID, petName, petFlags)
bIsIgnored[petGUID] = true
end
end
return
end

function container_pets:Unpet(...)
local unitid = ...

local owner_serial = UnitGUID(unitid)

if (owner_serial) then
--tira o pet existente da tabela de pets e do cache do core
local existing_pet_serial = Details.pets_players[owner_serial]
if (existing_pet_serial) then
Details.parser:RevomeActorFromCache(existing_pet_serial)
container_pets:Remover(existing_pet_serial)
Details.pets_players[owner_serial] = nil
local unitId = ...
local ownerGUID = UnitGUID(unitId)

if (ownerGUID) then
--remove existing pet from thecache
do
local petGUID = Details.pets_players[ownerGUID]
if (petGUID) then
Details.parser:RevomeActorFromCache(petGUID)
container_pets:Remover(petGUID)
Details.pets_players[ownerGUID] = nil
end
end
--verifica se h� um pet novo deste jogador
local pet_serial = UnitGUID(unitid .. "pet")
if (pet_serial) then
if (not Details.tabela_pets.pets[pet_serial]) then
local nome, realm = UnitName(unitid)
if (realm and realm ~= "") then
nome = nome.."-"..realm

--check if the player has a new pet
do
local petGUID = UnitGUID(unitId .. "pet")
if (petGUID) then
if (not Details.tabela_pets.pets[petGUID]) then
local unitName = Details:GetFullName(unitId)
Details.tabela_pets:AddPet(petGUID, UnitName(unitId .. "pet"), 0x1114, ownerGUID, unitName, 0x514)
end
Details.tabela_pets:Adicionar(pet_serial, UnitName(unitid .. "pet"), 0x1114, owner_serial, nome, 0x514)

Details.parser:RevomeActorFromCache(petGUID)
container_pets:PlayerPet(ownerGUID, petGUID)
end
Details.parser:RevomeActorFromCache(pet_serial)
container_pets:PlayerPet(owner_serial, pet_serial)
end
end
end
Expand All @@ -160,66 +151,58 @@ end
function container_pets:BuscarPets()
if (IsInRaid()) then
for i = 1, GetNumGroupMembers(), 1 do
local pet_serial = UnitGUID("raidpet"..i)
if (pet_serial) then
if (not Details.tabela_pets.pets[pet_serial]) then
local nome, realm = UnitName("raid"..i)
if (realm and realm ~= "") then
nome = nome.."-"..realm
end
local owner_serial = UnitGUID("raid"..i)
Details.tabela_pets:Adicionar(pet_serial, UnitName("raidpet"..i), 0x1114, owner_serial, nome, 0x514)
Details.parser:RevomeActorFromCache(pet_serial)
container_pets:PlayerPet(owner_serial, pet_serial)
local petGUID = UnitGUID("raidpet" .. i)
if (petGUID) then
if (not Details.tabela_pets.pets[petGUID]) then
local unitName = Details:GetFullName(unitIDRaidCache[i])
local ownerGUID = UnitGUID(unitIDRaidCache[i])
Details.tabela_pets:AddPet(petGUID, UnitName("raidpet"..i), 0x1114, ownerGUID, unitName, 0x514)
Details.parser:RevomeActorFromCache(petGUID)
container_pets:PlayerPet(ownerGUID, petGUID)
end
end
end

elseif (IsInGroup()) then
for i = 1, GetNumGroupMembers()-1, 1 do
local pet_serial = UnitGUID("partypet"..i)
if (pet_serial) then
if (not Details.tabela_pets.pets[pet_serial]) then
local nome, realm = UnitName("party"..i)

if (realm and realm ~= "") then
nome = nome.."-"..realm
end
Details.tabela_pets:Adicionar(pet_serial, UnitName("partypet"..i), 0x1114, UnitGUID("party"..i), nome, 0x514)

local petGUID = UnitGUID("partypet"..i)
if (petGUID) then
if (not Details.tabela_pets.pets[petGUID]) then
local unitName = Details:GetFullName("party"..i)
Details.tabela_pets:AddPet(petGUID, UnitName("partypet"..i), 0x1114, UnitGUID("party"..i), unitName, 0x514)
end
end
end

local pet_serial = UnitGUID("pet")
if (pet_serial) then
if (not Details.tabela_pets.pets[pet_serial]) then
Details.tabela_pets:Adicionar(pet_serial, UnitName("pet"), 0x1114, UnitGUID("player"), Details.playername, 0x514)
local petGUID = UnitGUID("pet")
if (petGUID) then
if (not Details.tabela_pets.pets[petGUID]) then
Details.tabela_pets:AddPet(petGUID, UnitName("pet"), 0x1114, UnitGUID("player"), Details.playername, 0x514)
end
end

else
local pet_serial = UnitGUID("pet")
if (pet_serial) then
if (not Details.tabela_pets.pets[pet_serial]) then
Details.tabela_pets:Adicionar(pet_serial, UnitName("pet"), 0x1114, UnitGUID("player"), Details.playername, 0x514)
local petGUID = UnitGUID("pet")
if (petGUID) then
if (not Details.tabela_pets.pets[petGUID]) then
Details.tabela_pets:AddPet(petGUID, UnitName("pet"), 0x1114, UnitGUID("player"), Details.playername, 0x514)
end
end
end
end

function container_pets:Remover(pet_serial)
if (Details.tabela_pets.pets[pet_serial]) then
Details:Destroy(Details.tabela_pets.pets[pet_serial])
function container_pets:Remover(petGUID)
if (Details.tabela_pets.pets[petGUID]) then
Details:Destroy(Details.tabela_pets.pets[petGUID])
end
Details.tabela_pets.pets[pet_serial] = nil
Details.tabela_pets.pets[petGUID] = nil
end

function container_pets:Adicionar(pet_serial, pet_nome, pet_flags, dono_serial, dono_nome, dono_flags)
if (pet_flags and bitBand(pet_flags, OBJECT_TYPE_PET) ~= 0 and bitBand(pet_flags, OBJECT_IN_GROUP) ~= 0) then
self.pets[pet_serial] = {dono_nome, dono_serial, dono_flags, Details._tempo, true, pet_nome, pet_serial}
function container_pets:AddPet(petGUID, petName, petFlags, ownerGUID, ownerName, ownerFlags)
if (petFlags and bitBand(petFlags, OBJECT_TYPE_PET) ~= 0 and bitBand(petFlags, OBJECT_IN_GROUP) ~= 0) then
self.pets[petGUID] = {ownerName, ownerGUID, ownerFlags, Details._tempo, true, petName, petGUID}
else
self.pets[pet_serial] = {dono_nome, dono_serial, dono_flags, Details._tempo, false, pet_nome, pet_serial}
self.pets[petGUID] = {ownerName, ownerGUID, ownerFlags, Details._tempo, false, petName, petGUID}
end
end

Expand All @@ -242,18 +225,18 @@ function Details222.Pets.PetContainerCleanup()
Details:UpdatePetCache()
end

local have_schedule = false
local bHasSchedule = false
function Details:UpdatePets()
have_schedule = false
bHasSchedule = false
return container_pets:BuscarPets()
end

function Details:SchedulePetUpdate(seconds)
if (have_schedule) then
if (bHasSchedule) then
return
end
have_schedule = true
bHasSchedule = true

--_detalhes:ScheduleTimer("UpdatePets", seconds or 5)
Details.Schedules.NewTimer(seconds or 5, Details.UpdatePets, Details)
end

Expand Down
Loading

0 comments on commit f870036

Please sign in to comment.