172 lines
4.3 KiB
Plaintext
172 lines
4.3 KiB
Plaintext
NScenePetProxy = class('NScenePetProxy', NSceneNpcProxy)
|
|
|
|
NScenePetProxy.Instance = nil;
|
|
|
|
NScenePetProxy.NAME = "NScenePetProxy"
|
|
|
|
-- autoImport("Table_RoleData")
|
|
|
|
function NScenePetProxy:ctor(proxyName, data)
|
|
self:Reset()
|
|
self:CountClear()
|
|
self.proxyName = proxyName or NScenePetProxy.NAME
|
|
NScenePetProxy.Instance = self
|
|
if data ~= nil then
|
|
self:setData(data)
|
|
end
|
|
if(Game and Game.LogicManager_Creature) then
|
|
Game.LogicManager_Creature:SetScenePetProxy(self)
|
|
end
|
|
EventManager.Me():AddEventListener(SceneUserEvent.SceneAddRoles,self.SceneAddCreaturesHandler,self)
|
|
EventManager.Me():AddEventListener(SceneUserEvent.SceneAddNpcs,self.SceneAddCreaturesHandler,self)
|
|
end
|
|
|
|
function NScenePetProxy:SceneAddCreaturesHandler(creaturesID)
|
|
for i=1,#creaturesID do
|
|
self:PetTryFindOwner(creaturesID[i])
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:Reset()
|
|
if(self.userMap==nil) then
|
|
self.userMap = {}
|
|
else
|
|
TableUtility.TableClear(self.userMap)
|
|
end
|
|
if(self.waitForOwner==nil) then
|
|
self.waitForOwner = {}
|
|
else
|
|
TableUtility.TableClear(self.waitForOwner)
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:Add(data,classRef)
|
|
local pet = NScenePetProxy.super.Add(self,data,NPet)
|
|
local master = NSceneUserProxy.Instance:Find(data.owner)
|
|
-- LogUtility.InfoFormat("NScenePetProxy:Add {0} {1}", pet.data.id, pet.data:GetName())
|
|
if(master) then
|
|
self:SetPetOwner(pet,master)
|
|
else
|
|
master = NSceneNpcProxy.Instance:Find(data.owner)
|
|
if(master) then
|
|
self:SetPetOwner(pet,master)
|
|
else
|
|
self:WaitForOwner(pet)
|
|
end
|
|
end
|
|
return pet;
|
|
end
|
|
|
|
function NScenePetProxy:SetOwnerDressEnable(owner,v)
|
|
if(owner.data and owner.data.petIDs) then
|
|
local petIDs = owner.data.petIDs
|
|
for i=1,#petIDs do
|
|
local pet = self:Find(petIDs[i])
|
|
if(pet) then
|
|
pet:SetDressEnable(v)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:SetPetOwner(pet,owner)
|
|
local petData = pet.data
|
|
if(owner == nil or petData.ownerID~=owner.data.id or not pet.foundOwner) then
|
|
local ownerData = owner.data
|
|
if(petData.ownerID) then
|
|
local oldOwner = SceneCreatureProxy.FindCreature(petData.ownerID)
|
|
if(oldOwner) then
|
|
owner.data:RemovePetID(petData.id)
|
|
end
|
|
end
|
|
if(owner) then
|
|
owner.data:AddPetID(petData.id)
|
|
pet:SetOwner(owner)
|
|
else
|
|
pet:SetOwner(nil)
|
|
end
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:WaitForOwner(pet)
|
|
self.waitForOwner[pet.data.ownerID] = pet.data.id
|
|
end
|
|
|
|
function NScenePetProxy:PetTryFindOwner(ownerID)
|
|
local petID = self.waitForOwner[ownerID]
|
|
if(petID) then
|
|
local pet = self:Find(petID)
|
|
if(pet) then
|
|
local owner = SceneCreatureProxy.FindCreature(ownerID)
|
|
if(owner) then
|
|
self:SetPetOwner(pet,owner)
|
|
self:RemoveWaitForOwner(owner.id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:RemoveWaitForOwner(ownerID)
|
|
self.waitForOwner[ownerID] = nil
|
|
end
|
|
|
|
function NScenePetProxy:Remove(guid,delay,fadeout)
|
|
local pet = self:Find(guid)
|
|
if (pet) then
|
|
-- LogUtility.Info("pet remove "..pet.data.ownerID.." "..guid)
|
|
self:RemoveWaitForOwner(pet.data.ownerID)
|
|
if(delay~=nil and delay>0 or (fadeout ~= nil and fadeout >0 )) then
|
|
self:DelayRemove(pet,delay,fadeout)
|
|
else
|
|
self:RealRemove(guid)
|
|
end
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function NScenePetProxy:DelayRemove(pet,delay,duration)
|
|
if(pet) then
|
|
delay = delay or 0
|
|
pet:SetDelayRemove(delay/1000,duration and duration/1000)
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:RealRemove(guid, fade)
|
|
return SceneCreatureProxy.Remove(self,guid)
|
|
end
|
|
|
|
local tmpPets = {}
|
|
function NScenePetProxy:PureAddSome(datas)
|
|
local data
|
|
for i = 1, #datas do
|
|
data = datas[i]
|
|
if data ~= nil then
|
|
local addnpc = self:Add(data);
|
|
tmpPets[#tmpPets+1] = self:Add(data)
|
|
end
|
|
end
|
|
if(tmpPets and #tmpPets>0) then
|
|
GameFacade.Instance:sendNotification(SceneUserEvent.SceneAddPets,tmpPets)
|
|
EventManager.Me():PassEvent(SceneUserEvent.SceneAddPets, tmpPets)
|
|
TableUtility.ArrayClear(tmpPets)
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:RemoveSome(guids,delay,fadeout)
|
|
local pets = SceneObjectProxy.RemoveSome(self,guids,delay,fadeout)
|
|
if(pets and #pets>0) then
|
|
GameFacade.Instance:sendNotification(SceneUserEvent.SceneRemovePets,pets)
|
|
EventManager.Me():PassEvent(SceneUserEvent.SceneRemovePets, pets)
|
|
end
|
|
end
|
|
|
|
function NScenePetProxy:Clear()
|
|
local pets = SceneCreatureProxy.Clear(self)
|
|
if(pets and #pets>0) then
|
|
GameFacade.Instance:sendNotification(SceneUserEvent.SceneRemovePets,pets)
|
|
EventManager.Me():PassEvent(SceneUserEvent.SceneRemovePets, pets)
|
|
end
|
|
self:Reset()
|
|
end
|