2025-06-04 05:02:57 +08:00

123 lines
3.0 KiB
Plaintext

autoImport("Table_PetAvatar")
PetData = reusableClass("PetData",NpcData)
PetData.PoolSize = 50
function PetData:ctor()
PetData.super.ctor(self)
self.ownerID = nil
end
function PetData:GetHoldScale()
if(self.petStaticData and self.petStaticData.BeHoldScale) then
return self.petStaticData.BeHoldScale
end
return 1
end
function PetData:GetHoldDir()
if(self.petStaticData and self.petStaticData.BeHoldDir) then
return self.petStaticData.BeHoldDir
end
return 0
end
function PetData:GetHoldOffset()
if(self.petStaticData and self.petStaticData.BeHoldOffset) then
return self.petStaticData.BeHoldOffset
end
return PetData.super.GetHoldOffset(self)
end
function PetData:GetCamp()
if(self.ownerID) then
local owner = SceneCreatureProxy.FindCreature(self.ownerID)
if(owner) then
return owner.data:GetCamp()
end
end
return RoleDefines_Camp.NEUTRAL
end
function PetData:SetOwnerID(ownerID)
self.ownerID = ownerID
end
function PetData:GetDynamicSkillInfo(skillID)
return CreatureSkillProxy.Instance:GetDynamicSkillInfoByID(self.staticData.id,skillID)
end
local PART_INDEX =
{
[5] = "Head",
[6] = "Wing",
[7] = "Face",
[8] = "Tail",
[10] = "Mouth",
}
local function GetEquipId(id,cfg)
for k,v in pairs(cfg) do
if id ==v.id then
return v.FakeID or v.id
end
end
return 0
end
function PetData:GetDressParts()
local parts = PetData.super.GetDressParts(self);
if(self.petStaticData == nil)then
return parts;
end
local hasPreviewData = FunctionPet.Me():ExistPreviewData()
if(self.useServerDressData or hasPreviewData) then
--魔物變身,使用userdata
local userData = self.userdata
if(userData~=nil) then
local cloned = NpcData.super.GetDressParts(self)
local bodyID = self:GetBodyId()
if not bodyID then return end
local petAvatar = Table_PetAvatar[bodyID]
local previewData = FunctionPet.Me():GetPreviewData()
for k,v in pairs(cloned) do
local cfg_key = PART_INDEX[k]
if(v==0) then
cloned[k] = previewData and previewData[k] and GetEquipId(previewData[k],petAvatar[cfg_key]) or parts[k]
else
if petAvatar and cfg_key and petAvatar[cfg_key] then
cloned[k] = previewData and previewData[k] and GetEquipId(previewData[k],petAvatar[cfg_key]) or GetEquipId(v,petAvatar[cfg_key])
end
end
end
return cloned
end
end
return parts
end
-- override begin
function PetData:DoConstruct(asArray, serverData)
PetData.super.DoConstruct(self,asArray,serverData)
self.ownerID = serverData.owner
if(NpcMonsterUtility.IsPetByData(self.staticData)) then
self.type = NpcData.NpcType.Pet
end
self.petStaticData = Table_Pet[serverData.npcID]
end
function PetData:GetBodyId()
local DressParts = NpcData.super.GetDressParts(self)
if 0~= DressParts[RoleDefines_EquipBodyIndex.Body] then
return DressParts[RoleDefines_EquipBodyIndex.Body]
else
if self.petStaticData and Table_Monster[self.petStaticData.id] then
return Table_Monster[self.petStaticData.id].Body
end
end
end
function PetData:DoDeconstruct(asArray)
PetData.super.DoDeconstruct(self,asArray)
self.petStaticData = nil
end
-- override end