875 lines
20 KiB
Plaintext
875 lines
20 KiB
Plaintext
autoImport("BehaviourData")
|
|
autoImport("AttrEffect")
|
|
CreatureData = class("CreatureData",ReusableObject)
|
|
|
|
CreatureData.MoveSpeedFactor = 3.5
|
|
CreatureData.RotateSpeedFactor = 720
|
|
CreatureData.ScaleSpeedFactor = 1
|
|
|
|
local CompatibilityMode_V9 = BackwardCompatibilityUtil.CompatibilityMode_V9
|
|
local CullingIDUtility = CullingIDUtility
|
|
local ArrayRemove = TableUtility.ArrayRemove
|
|
local DestroyArray = ReusableTable.DestroyArray
|
|
|
|
-- 生物的數據基類
|
|
function CreatureData:ctor()
|
|
CreatureData.super.ctor(self)
|
|
--唯一標識ID
|
|
self.id = nil
|
|
--陣營
|
|
self:SetCamp(RoleDefines_Camp.NEUTRAL)
|
|
|
|
self.bodyScale = nil
|
|
|
|
-- options
|
|
-- self.petIDs = nil
|
|
end
|
|
|
|
function CreatureData:GetHoldScale()
|
|
return 1
|
|
end
|
|
|
|
function CreatureData:GetHoldDir()
|
|
return 0
|
|
end
|
|
|
|
local defaultOffest = {}
|
|
function CreatureData:GetHoldOffset()
|
|
return defaultOffest
|
|
end
|
|
|
|
function CreatureData:GetDefaultGear()
|
|
return nil
|
|
end
|
|
|
|
function CreatureData:GetName()
|
|
return nil
|
|
end
|
|
|
|
function CreatureData:SetCamp(camp)
|
|
self.camp = camp
|
|
end
|
|
|
|
function CreatureData:GetCamp()
|
|
return self.camp
|
|
end
|
|
|
|
function CreatureData:NoAccessable()
|
|
return true
|
|
end
|
|
|
|
function CreatureData:NoPlayIdle()
|
|
return false
|
|
end
|
|
|
|
function CreatureData:NoPlayShow()
|
|
return false
|
|
end
|
|
|
|
function CreatureData:NoAutoAttack()
|
|
return false
|
|
end
|
|
|
|
function CreatureData:GetGuid()
|
|
return self.id
|
|
end
|
|
|
|
function CreatureData:GetFollowEP()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:GetFollowType()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:GetInnerRange()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:GetOutterRange()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:GetOutterHeight()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:GetDampDuration()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:ReturnMoveSpeedWithFactor(moveSpeed)
|
|
return (moveSpeed or 1 )*CreatureData.MoveSpeedFactor
|
|
end
|
|
|
|
function CreatureData:ReturnRotateSpeedWithFactor(rotateSpeed)
|
|
return (rotateSpeed or 1 )*CreatureData.RotateSpeedFactor
|
|
end
|
|
|
|
|
|
function CreatureData:ReturnScaleSpeedWithFactor(scaleSpeed)
|
|
return (scaleSpeed or 1 )*CreatureData.ScaleSpeedFactor
|
|
end
|
|
|
|
function CreatureData:GetClickPriority()
|
|
local camp = self:GetCamp()
|
|
if(camp == RoleDefines_Camp.ENEMY) then
|
|
return 0
|
|
elseif(camp == RoleDefines_Camp.NEUTRAL)then
|
|
return 1
|
|
elseif(camp == RoleDefines_Camp.FRIEND)then
|
|
return 2
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:SetDressEnable(v)
|
|
self.dressEnable = v
|
|
end
|
|
|
|
function CreatureData:IsDressEnable()
|
|
return self.dressEnable
|
|
end
|
|
|
|
function CreatureData:SetBaseLv(value)
|
|
self.BaseLv = value;
|
|
end
|
|
|
|
function CreatureData:AddPetID(petID)
|
|
if(self.petIDs == nil) then
|
|
self.petIDs = ReusableTable.CreateArray()
|
|
end
|
|
if(TableUtility.ArrayFindIndex(self.petIDs, petID) < 1) then
|
|
self.petIDs[#self.petIDs+1] = petID
|
|
end
|
|
end
|
|
|
|
function CreatureData:RemovePetID(petID)
|
|
if(self.petIDs ~= nil) then
|
|
TableUtility.ArrayRemove(self.petIDs, petID)
|
|
end
|
|
end
|
|
|
|
function CreatureData:SpawnCullingID()
|
|
if CompatibilityMode_V9 then
|
|
self.cullingID = CullingIDUtility.GetID()
|
|
else
|
|
self.cullingID = self.id
|
|
end
|
|
end
|
|
|
|
function CreatureData:ClearCullingID()
|
|
if CompatibilityMode_V9 and self.cullingID ~=nil then
|
|
CullingIDUtility.ClearID(self.cullingID)
|
|
end
|
|
self.cullingID = nil
|
|
end
|
|
|
|
function CreatureData:GetDefaultScale()
|
|
return 1
|
|
end
|
|
|
|
function CreatureData:GetClassID()
|
|
return 0
|
|
end
|
|
|
|
function CreatureData:IsBeingPresent(beingID)
|
|
local being = PetProxy.Instance:GetMyBeingNpcInfo(beingID)
|
|
if(being) then
|
|
return being:IsSummoned()
|
|
end
|
|
return false
|
|
end
|
|
|
|
function CreatureData:InGuildZone()
|
|
return false;
|
|
end
|
|
|
|
function CreatureData:InSuperGvg()
|
|
return false;
|
|
end
|
|
|
|
--features start
|
|
function CreatureData:GetFeature(bit)
|
|
return false
|
|
end
|
|
|
|
function CreatureData:GetFeature_ChangeLinePunish()
|
|
return false
|
|
end
|
|
|
|
function CreatureData:GetFeature_BeHold()
|
|
return false
|
|
end
|
|
|
|
--features end
|
|
|
|
-- override begin
|
|
function CreatureData:DoConstruct(asArray, parts)
|
|
self.dressEnable = false
|
|
end
|
|
|
|
function CreatureData:DoDeconstruct(asArray)
|
|
if(self.petIDs ~= nil) then
|
|
ReusableTable.DestroyArray(self.petIDs)
|
|
self.petIDs = nil
|
|
end
|
|
self:ClearCullingID()
|
|
end
|
|
|
|
CreatureDataWithPropUserdata = class("CreatureDataWithPropUserdata",CreatureData)
|
|
|
|
-- 生物的數據(帶有屬性)
|
|
function CreatureDataWithPropUserdata:ctor()
|
|
CreatureDataWithPropUserdata.super.ctor(self)
|
|
--生物屬性
|
|
self.props = RolePropsContainer.CreateAsTable()
|
|
self.clientProps = ClientProps.new(self.props.config)
|
|
--生物數據
|
|
self.userdata = UserData.CreateAsTable()
|
|
|
|
self.attrEffect = AttrEffect.new()
|
|
|
|
self.attrEffect2 = AttrEffectB.new()
|
|
|
|
self:Reset()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:Reset()
|
|
--action
|
|
self.idleAction = nil
|
|
self.moveAction = nil
|
|
|
|
--some props
|
|
self.normalAtkID = nil
|
|
self.noStiff = 0;
|
|
self.noAttack = 0;
|
|
self.noSkill = 0;
|
|
self.noPicked = 0;
|
|
self.noAccessable = 0;
|
|
self.noMove = 0;
|
|
self.noAction = 0;
|
|
self.noAttacked = 0;
|
|
|
|
--commonfun要計算的屬性
|
|
self.shape = nil
|
|
self.race = nil
|
|
|
|
self.bodyScale = nil
|
|
end
|
|
|
|
--CommonFun begin
|
|
--獲取屬性
|
|
function CreatureDataWithPropUserdata:GetProperty(name)
|
|
if nil == self.props[name] then
|
|
return 0
|
|
end
|
|
return self.props[name]:GetValue()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetJobLv()
|
|
if( nil ~= self.userdata ) then
|
|
return self.userdata:Get(UDEnum.JOBLEVEL)
|
|
end
|
|
return 1
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBaseLv()
|
|
if( nil ~= self.userdata ) then
|
|
return self.userdata:Get(UDEnum.ROLELEVEL)
|
|
end
|
|
return 1
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetLernedSkillLevel(skillID)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetDynamicSkillInfo(skillID)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsEnemy(creatureData)
|
|
return creatureData:GetCamp() == RoleDefines_Camp.ENEMY
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsImmuneSkill(skillID)
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IgnoreJinzhanDamage()
|
|
return nil ~= self.attrEffect
|
|
and self.attrEffect:IgnoreJinzhanDamage()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsFly()
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:SelfBuffChangeSkill(skillIDAndLevel_0)
|
|
if nil == self.skillBuffs then
|
|
return nil
|
|
end
|
|
local buff = self.skillBuffs:GetOwner(BuffConfig.SelfBuff)
|
|
if nil == buff then
|
|
return nil
|
|
end
|
|
return buff:GetParamsByType(BuffConfig.changeskill)[skillIDAndLevel_0]
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetProfressionID()
|
|
return nil ~= self.userdata
|
|
and self.userdata:Get(UDEnum.PROFESSION) or 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:DefiniteHitAndCritical()
|
|
return nil ~= self.attrEffect
|
|
and self.attrEffect:DefiniteHitAndCritical()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NextPointTargetSkillLargeLaunchRange()
|
|
return nil ~= self.attrEffect2
|
|
and self.attrEffect2:NextPointTargetSkillLargeLaunchRange()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NextSkillNoReady()
|
|
return nil ~= self.attrEffect2
|
|
and self.attrEffect2:NextSkillNoReady()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:CanNotBeSkillTargetByEnemy()
|
|
return nil ~= self.attrEffect2
|
|
and self.attrEffect2:CanNotBeSkillTargetByEnemy()
|
|
end
|
|
|
|
--普攻Id
|
|
function CreatureDataWithPropUserdata:GetAttackSkillIDAndLevel()
|
|
return self.normalAtkID or 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:DamageAlways1()
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetRandom()
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:RemoveInvalidHatred()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:RefreshHatred(id)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:CheckHatred(id, time)
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetArrowID()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipedRefineLv(site)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipedItemNum(itemid)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipedWeaponType()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipedType(site)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipedID(site)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetCartNums()
|
|
return 0,0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetPackageItemNum(itemid)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEnchantAttrsBySite(site)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetCombineEffectsBySite(site)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetCurrentSkill()
|
|
return self.currentSkill
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:SetCurrentSkill(skillLogic)
|
|
self.currentSkill = skillLogic
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:ClearCurrentSkill(skillLogic)
|
|
if self.currentSkill == skillLogic then
|
|
self.currentSkill = nil
|
|
end
|
|
end
|
|
|
|
--訪問距離
|
|
function CreatureDataWithPropUserdata:GetAccessRange()
|
|
return 2
|
|
end
|
|
|
|
--攻擊速度
|
|
function CreatureDataWithPropUserdata:SetAttackSpeed(s)
|
|
self.attackSpeed = s
|
|
self.attackSpeedAdjusted = 1/(1/s+0.1)*1.05
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetAttackSpeed()
|
|
return self.attackSpeed
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetAttackSpeed_Adjusted()
|
|
return self.attackSpeedAdjusted
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoStiff()
|
|
return 0 < self.noStiff
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoAttack()
|
|
return 0 < self.noAttack
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoSkill()
|
|
return 0 < self.noSkill
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoMagicSkill()
|
|
return self.props.NoMagicSkill:GetValue() > 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoHitEffectMove()
|
|
return self.props.NoEffectMove:GetValue() & 1 >0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoAttackEffectMove()
|
|
return self.props.NoEffectMove:GetValue() & 2 >0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoPicked()
|
|
return 0 < self.noPicked
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoAccessable()
|
|
return 0 < self.noAccessable or 0 < self.noPicked
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoMove()
|
|
return 0 < self.noMove
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoAttacked()
|
|
return 0 < self.noAttacked
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:NoAct()
|
|
return 0 < self.props.NoAct:GetValue()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:Freeze()
|
|
if(self:WeakFreeze()) then
|
|
return true
|
|
end
|
|
return 0 < self.props.Freeze:GetValue()
|
|
end
|
|
|
|
--client use
|
|
function CreatureDataWithPropUserdata:WeakFreeze()
|
|
if(self.weakFreezeBuffs and self.weakFreezeBuffs.count > 0) then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:FearRun()
|
|
return 0 < self.props.FearRun:GetValue()
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:FreeCast()
|
|
return self.props.MoveChant:GetValue() > 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:PlusClientProp(prop)
|
|
return prop:GetValue() + self.clientProps:GetValueByName(prop.propVO.name)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsTransformed()
|
|
local prop = self.props.TransformID:GetValue()
|
|
return prop~=0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsSolo()
|
|
return self.props.Solo:GetValue() > 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsEnsemble()
|
|
return self.props.Ensemble:GetValue() > 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetNpcID()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetClassID()
|
|
if(self.userdata) then
|
|
return self.userdata:Get(UDEnum.PROFESSION) or 0
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:HasBuffID(buffID)
|
|
if(self.buffIDs==nil) then
|
|
return false
|
|
end
|
|
return self.buffIDs[buffID]~=nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEquipCardNum(site,cardID)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetRunePoint(specialEffectID)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetActiveAstrolabePoints()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetAdventureSavedHeadWear(quality)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetAdventureSavedCard(quality)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetAdventureTitle()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBuffListByType(typeParam)
|
|
if(typeParam==nil or self.buffIDs == nil) then
|
|
return nil
|
|
end
|
|
local buff,result
|
|
local configs = Table_Buffer
|
|
for k,v in pairs(self.buffIDs) do
|
|
buff = configs[k]
|
|
if(buff ~= nil and buff.BuffEffect ~= nil and buff.BuffEffect.type == typeParam) then
|
|
result = result or {}
|
|
result[#result+1] = k
|
|
end
|
|
end
|
|
return result
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBuffEffectByType(typeParam)
|
|
if(typeParam==nil or self.buffIDs == nil) then
|
|
return nil
|
|
end
|
|
local buff
|
|
local configs = Table_Buffer
|
|
for k,v in pairs(self.buffIDs) do
|
|
buff = configs[k]
|
|
if(buff ~= nil and buff.BuffEffect ~= nil and buff.BuffEffect.type == typeParam) then
|
|
return buff.BuffEffect
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBuffFromID(buffID)
|
|
return self:_GetBuffRelate(self.buffIDs,buffID,0)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBuffLayer(buffID)
|
|
return self:_GetBuffRelate(self.buffIDLayers,buffID,0)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBuffLevel(buffID)
|
|
return self:_GetBuffRelate(self.buffIDLevels,buffID,0)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_GetBuffRelate(t,buffID,defaultValue)
|
|
if(t==nil) then
|
|
return defaultValue or 0
|
|
end
|
|
return t[buffID] or defaultValue
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetDistance(buffFromGuid)
|
|
local proxy = SceneCreatureProxy
|
|
local me = proxy.FindCreature(self.id)
|
|
if(me) then
|
|
local fromCreature = proxy.FindCreature(buffFromGuid)
|
|
if(fromCreature) then
|
|
return VectorUtility.DistanceXZ(me:GetPosition(),fromCreature:GetPosition())
|
|
end
|
|
end
|
|
return 999999
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetRangeEnemy(range)
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetMapInfo()
|
|
return 0,0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetBeingGUID()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsRide(id)
|
|
if self.userdata ~= nil then
|
|
return self.userdata:Get(UDEnum.MOUNT) == id
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:IsPartner(id)
|
|
local me = SceneCreatureProxy.FindCreature(self.id)
|
|
if me ~= nil then
|
|
return me:GetPartnerID() == id
|
|
end
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:getCurElementElfID()
|
|
return 0
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetEnsemblePartner()
|
|
return nil
|
|
end
|
|
--CommonFun end
|
|
|
|
function CreatureDataWithPropUserdata:HasLimitSkill()
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:HasLimitNotSkill()
|
|
return false
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetLimitSkillTarget(skillID)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetLimitNotSkill(skillID)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetLimitSkillTargetBySortID(sortID)
|
|
return nil
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:AddBuff(buffID,fromID,layer,level)
|
|
if(buffID==nil) then
|
|
return
|
|
end
|
|
if(self.buffIDs==nil) then
|
|
self.buffIDs = ReusableTable.CreateTable()
|
|
end
|
|
if(self.buffIDLayers==nil) then
|
|
self.buffIDLayers = ReusableTable.CreateTable()
|
|
end
|
|
if(level~=nil and level>0) then
|
|
if(self.buffIDLevels==nil) then
|
|
self.buffIDLevels = ReusableTable.CreateTable()
|
|
end
|
|
self.buffIDLevels[buffID] = level
|
|
end
|
|
|
|
self.buffIDs[buffID] = fromID
|
|
self.buffIDLayers[buffID] = layer
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_AddBuffRelate(t,buffID,value)
|
|
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:RemoveBuff(buffID)
|
|
if(buffID==nil) then
|
|
return
|
|
end
|
|
self:_RemoveBuffRelate(self.buffIDs,buffID)
|
|
self:_RemoveBuffRelate(self.buffIDLayers,buffID)
|
|
self:_RemoveBuffRelate(self.buffIDLevels,buffID)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_RemoveBuffRelate(t,buffID)
|
|
if(t~=nil) then
|
|
t[buffID] = nil
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_AddWeakFreezeSkillBuff( buffInfo,skillIDs )
|
|
if(self.weakFreezeBuffs==nil) then
|
|
self.weakFreezeBuffs = {}
|
|
self.weakFreezeBuffs.count = 0
|
|
self.weakFreezeBuffs.relateBuffs = {}
|
|
end
|
|
local buffID = buffInfo.id
|
|
if(self.weakFreezeBuffs.relateBuffs[buffID]==nil) then
|
|
self.weakFreezeBuffs.count = self.weakFreezeBuffs.count + 1
|
|
self.weakFreezeBuffs.relateBuffs[buffID] = 1
|
|
local skillBuff
|
|
for i=1,#skillIDs do
|
|
skillBuff = self.weakFreezeBuffs[skillIDs[i]]
|
|
if(skillBuff==nil) then
|
|
skillBuff = ReusableTable.CreateArray()
|
|
self.weakFreezeBuffs[skillIDs[i]] = skillBuff
|
|
end
|
|
skillBuff[#skillBuff+1] = buffID
|
|
end
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_RemoveWeakFreezeSkillBuff( buffInfo,skillIDs )
|
|
if(self.weakFreezeBuffs) then
|
|
local buffID = buffInfo.id
|
|
if(self.weakFreezeBuffs.relateBuffs[buffID]) then
|
|
self.weakFreezeBuffs.relateBuffs[buffID] = nil
|
|
self.weakFreezeBuffs.count = self.weakFreezeBuffs.count - 1
|
|
local skillBuff
|
|
for i=1,#skillIDs do
|
|
skillBuff = self.weakFreezeBuffs[skillIDs[i]]
|
|
ArrayRemove(skillBuff, buffID)
|
|
if(#skillBuff==0) then
|
|
self.weakFreezeBuffs[skillIDs[i]] = nil
|
|
DestroyArray(skillBuff)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:_ClearBuffs()
|
|
if(self.buffIDs~=nil) then
|
|
ReusableTable.DestroyAndClearTable(self.buffIDs)
|
|
self.buffIDs = nil
|
|
end
|
|
if(self.buffIDLayers~=nil) then
|
|
ReusableTable.DestroyAndClearTable(self.buffIDLayers)
|
|
self.buffIDLayers = nil
|
|
end
|
|
if(self.buffIDLevels~=nil) then
|
|
ReusableTable.DestroyAndClearTable(self.buffIDLevels)
|
|
self.buffIDLevels = nil
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:AddClientProp(propName,value)
|
|
local p = self.clientProps:GetPropByName(propName)
|
|
local old ,clientp = self.clientProps:SetValueByName(propName,p.value + value)
|
|
return p,clientp
|
|
end
|
|
|
|
local PartIndex = nil
|
|
local PartIndexEx = nil
|
|
function CreatureDataWithPropUserdata:GetDressParts()
|
|
if(PartIndex==nil) then
|
|
PartIndex = Asset_Role.PartIndex
|
|
end
|
|
if(PartIndexEx==nil) then
|
|
PartIndexEx = Asset_Role.PartIndexEx
|
|
end
|
|
local parts = Asset_Role.CreatePartArray()
|
|
if(self.userdata) then
|
|
local userData = self.userdata
|
|
parts[PartIndex.Body] = userData:Get(UDEnum.BODY) or 0
|
|
parts[PartIndex.Hair] = userData:Get(UDEnum.HAIR) or 0
|
|
parts[PartIndex.LeftWeapon] = userData:Get(UDEnum.LEFTHAND) or 0
|
|
parts[PartIndex.RightWeapon] = userData:Get(UDEnum.RIGHTHAND) or 0
|
|
parts[PartIndex.Head] = userData:Get(UDEnum.HEAD) or 0
|
|
parts[PartIndex.Wing] = userData:Get(UDEnum.BACK) or 0
|
|
parts[PartIndex.Face] = userData:Get(UDEnum.FACE) or 0
|
|
parts[PartIndex.Tail] = userData:Get(UDEnum.TAIL) or 0
|
|
parts[PartIndex.Eye] = userData:Get(UDEnum.EYE) or 0
|
|
parts[PartIndex.Mouth] = userData:Get(UDEnum.MOUTH) or 0
|
|
parts[PartIndex.Mount] = userData:Get(UDEnum.MOUNT) or 0
|
|
parts[PartIndexEx.Gender] = userData:Get(UDEnum.SEX) or 0
|
|
parts[PartIndexEx.HairColorIndex] = userData:Get(UDEnum.HAIRCOLOR) or 0
|
|
parts[PartIndexEx.EyeColorIndex] = userData:Get(UDEnum.EYECOLOR) or 0
|
|
parts[PartIndexEx.BodyColorIndex] = userData:Get(UDEnum.CLOTHCOLOR) or 0
|
|
else
|
|
for i=1,12 do
|
|
parts[i] = 0
|
|
end
|
|
end
|
|
return parts
|
|
end
|
|
|
|
-- guild begin
|
|
autoImport("SimpleGuildData");
|
|
function CreatureDataWithPropUserdata:SetGuildData( data )
|
|
if(data and data[1] and data[1]~=0)then
|
|
if(not self.guildData)then
|
|
self.guildData = SimpleGuildData.CreateAsTable();
|
|
end
|
|
self.guildData:SetData(data);
|
|
else
|
|
self:DestroyGuildData();
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:DestroyGuildData()
|
|
if(self.guildData)then
|
|
self.guildData:Destroy();
|
|
self.guildData = nil;
|
|
end
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:GetGuildData( )
|
|
return self.guildData
|
|
end
|
|
-- guild end
|
|
|
|
function CreatureDataWithPropUserdata:GetUserDataStatus()
|
|
return self.userdata:Get(UDEnum.STATUS)
|
|
end
|
|
|
|
-- override begin
|
|
function CreatureDataWithPropUserdata:DoConstruct(asArray, parts)
|
|
self:SetAttackSpeed(1)
|
|
self.bodyScale = self:GetDefaultScale()
|
|
CreatureDataWithPropUserdata.super.DoConstruct(self,asArray,parts)
|
|
end
|
|
|
|
function CreatureDataWithPropUserdata:DoDeconstruct(asArray)
|
|
CreatureDataWithPropUserdata.super.DoDeconstruct(self,asArray)
|
|
self:Reset()
|
|
self.userdata:Reset()
|
|
self.props:Reset()
|
|
self.clientProps:Reset()
|
|
self.attrEffect:Set(0)
|
|
self.attrEffect2:Reset()
|
|
self:_ClearBuffs()
|
|
self:DestroyGuildData();
|
|
end
|
|
-- override end
|
|
|
|
function CreatureData:IsInMagicMachine()
|
|
return nil ~= self.attrEffect2
|
|
and self.attrEffect2:IsInMagicMachine()
|
|
end |