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

731 lines
23 KiB
Plaintext

autoImport("SkillPrecondCheck")
autoImport("SkillHelperFunc")
FunctionSkillEnableCheck = class("FunctionSkillEnableCheck")
function FunctionSkillEnableCheck.Me()
if nil == FunctionSkillEnableCheck.me then
FunctionSkillEnableCheck.me = FunctionSkillEnableCheck.new()
end
return FunctionSkillEnableCheck.me
end
function FunctionSkillEnableCheck:ctor()
-- self.enableLog = true
self:SetMySelf(Game.Myself)
self.tick = TimeTickManager.Me():CreateTick(0,100,self.TickCheck,self,1,true)
self.skillsTypeCheck = {whole={}}
self.skillsCondition = {}
self.usedSkillPassTime = {}
--關心人物狀態屬性的技能
self.stateSkill = {}
self.typeChecks = {}
self.typeChecks[SkillPrecondCheck.PreConditionType.AfterUseSkill] = self.AfterUseSkillCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.WearEquip] = self.WearEquipCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.HpLessThan] = self.HpLessThanCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.MyselfState] = self.MyselfStateCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.Partner] = self.MyselfPartnerCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.Buff] = self.BuffCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.BeingState] = self.BeingStateCheck
self.typeChecks[SkillPrecondCheck.PreConditionType.Map] = self.MapCheck
self.typeOnAdd = {}
self.typeOnAdd[SkillPrecondCheck.PreConditionType.MyselfState] = self.OnAddStateCheckSkill
self.typeOnRemove = {}
self.typeOnRemove[SkillPrecondCheck.PreConditionType.MyselfState] = self.OnRemoveStateCheckSkill
self:AddListener()
end
function FunctionSkillEnableCheck:AddListener()
EventManager.Me():AddEventListener(SkillEvent.SkillEquip,self.AddCheckSkill,self)
EventManager.Me():AddEventListener(SkillEvent.SkillDisEquip,self.RemoveCheckSkill,self)
EventManager.Me():AddEventListener(SkillEvent.SkillUpdate,self.SkillUpdateHandler,self)
EventManager.Me():AddEventListener(RoleEquipEvent.TakeOn,self.RoleEquipUpdateCheck,self)
EventManager.Me():AddEventListener(RoleEquipEvent.TakeOff,self.RoleEquipUpdateCheck,self)
EventManager.Me():AddEventListener(MyselfEvent.UsedSkill,self.UsedSkillCheck,self)
EventManager.Me():AddEventListener(SceneCreatureEvent.PropHpChange,self.HpCheck,self)
EventManager.Me():AddEventListener(MyselfEvent.PartnerChange,self.PartnerUpdateCheck,self)
EventManager.Me():AddEventListener(MyselfEvent.BuffChange,self.BuffUpdateCheck,self)
EventManager.Me():AddEventListener(PetEvent.BeingInfoData_SummonChange,self.SummonChangeCheck,self)
EventManager.Me():AddEventListener(PetEvent.BeingInfoData_AliveChange,self.SummonChangeCheck,self)
EventManager.Me():AddEventListener(LoadSceneEvent.FinishLoadScene, self.MapUpdateCheck, self)
FunctionCheck.Me():AddEventListener(MyselfEvent.MyPropChange,self.PropChangeCheck,self)
end
function FunctionSkillEnableCheck:Log(arg1,arg2,arg3,arg4,arg5)
if(self.enableLog) then
helplog(arg1,arg2,arg3,arg4,arg5)
end
end
function FunctionSkillEnableCheck:Reset()
end
function FunctionSkillEnableCheck:SetMySelf(myself)
if(myself) then
self.myself = myself
end
end
function FunctionSkillEnableCheck:Launch()
if(self.isRunning) then
return
end
self.isRunning = true
end
function FunctionSkillEnableCheck:ShutDown()
if(not self.isRunning) then
return
end
self.isRunning = false
end
function FunctionSkillEnableCheck:SkillUpdateHandler()
if(SkillProxy.Instance.equipedAutoArrayDirty) then
local skill,incheck
local instance = SkillProxy.Instance
--檢測自動連招
if(GameConfig.AutoSkillGroup) then
for k,v in pairs(GameConfig.AutoSkillGroup) do
if(#v>1) then
for i=1,#v do
skill = instance:GetLearnedSkillBySortID(v[i])
if(skill) then
incheck = self.skillsCondition[skill.guid]
if(skill) then
if(not incheck)then
self:AddCheckSkill(skill)
end
end
end
end
end
end
end
--移除沒有學習的
for k,v in pairs(self.skillsCondition) do
skill = instance:GetLearnedSkill(v.skillItemData.id)
if(skill == nil) then
self:RemoveCheckSkill(v)
end
end
end
end
function FunctionSkillEnableCheck:AddCheckSkill(skillItemData)
self:Log("新增技能是否能釋放的檢測,id",skillItemData.guid)
local conditionCheck = SkillPrecondCheck.new(skillItemData)
self:AddTypeCheck(skillItemData,conditionCheck)
self.skillsCondition[skillItemData.guid] = conditionCheck
self:CheckSkill(conditionCheck)
end
function FunctionSkillEnableCheck:RemoveCheckSkill(skillItemData)
self:Log("移除技能是否能釋放的檢測,id",skillItemData.guid)
local preCondtionCheck = self.skillsCondition[skillItemData.guid]
if(preCondtionCheck) then
self:OnRemoveStateCheckSkill(preCondtionCheck)
end
self:RemoveTypeCheck(skillItemData)
self.skillsCondition[skillItemData.guid] = nil
end
function FunctionSkillEnableCheck:OnAddStateCheckSkill(preCondtionCheck)
local skill = preCondtionCheck.skillItemData
local preConditions = skill.staticData.PreCondition
local prop = nil
local preCondition
for i=1,#preConditions do
preCondition = preConditions[i]
for k,v in pairs(preCondition) do
if(k~="type") then
prop = k
if(prop) then
local skills = self.stateSkill[prop]
if(skills==nil) then
skills = {}
self.stateSkill[prop] = skills
end
local index = TableUtil.ArrayIndexOf(skills,preCondtionCheck)
if(index==0) then
skills[#skills+1] = preCondtionCheck
end
end
end
end
end
end
function FunctionSkillEnableCheck:OnRemoveStateCheckSkill(preCondtionCheck)
local skill = preCondtionCheck.skillItemData
local preConditions = skill.staticData.PreCondition
local preCondition
for i=1,#preConditions do
preCondition = preConditions[i]
if(preCondition.type == SkillPrecondCheck.PreConditionType.MyselfState) then
local prop = nil
for k,v in pairs(preCondition) do
if(k~="type") then
prop = k
if(prop) then
local skills = self.stateSkill[prop]
if(skills) then
TableUtil.Remove(skills,preCondtionCheck)
end
end
end
end
end
end
end
function FunctionSkillEnableCheck:AddTypeCheck(skill,preCondtionCheck)
local preCondition = skill.staticData.PreCondition
if(preCondition) then
if(preCondition.ProType) then
preCondition = SkillHelperFunc.GetProRelateCheckTypes(preCondition.ProType)
end
if(#preCondition>0) then
local pcond,pcondType
for i=1,#preCondition do
pcond = preCondition[i]
if(type(pcond)=="number") then
pcondType = pcond
else
pcondType = pcond.type
end
local typeMap = self.skillsTypeCheck[pcondType]
if(typeMap == nil) then
typeMap = {}
self.skillsTypeCheck[pcondType] = typeMap
end
local onAdd = self.typeOnAdd[pcondType]
if(onAdd) then
onAdd(self,preCondtionCheck)
end
typeMap[skill.guid] = preCondtionCheck
self.skillsTypeCheck.whole[skill.guid] = preCondtionCheck
end
return true
end
end
return false
end
function FunctionSkillEnableCheck:RemoveTypeCheck(skill)
local preCondition = skill.staticData.PreCondition
if(preCondition) then
if(preCondition.ProType) then
preCondition = SkillHelperFunc.GetProRelateCheckTypes(preCondition.ProType)
end
if(#preCondition>0) then
local pcond,pcondType
for i=1,#preCondition do
pcond = preCondition[i]
if(type(pcond)=="number") then
pcondType = pcond
else
pcondType = pcond.type
end
local typeMap = self.skillsTypeCheck[pcondType]
if(typeMap) then
typeMap[skill.guid] = nil
self.skillsTypeCheck.whole[skill.guid] = nil
end
end
end
end
end
function FunctionSkillEnableCheck:GetFirstNotFitPrecondition(skillItemData)
local precondition = self.skillsTypeCheck.whole[skillItemData.guid]
if(precondition and precondition:HasReason()) then
return precondition:GetFirstReason()
end
return nil
end
function FunctionSkillEnableCheck:MsgNotFit(skillItemData)
local precondition = self.skillsTypeCheck.whole[skillItemData.guid]
if(precondition) then
precondition:MsgReason()
end
end
function FunctionSkillEnableCheck:CheckSkill(conditionCheck)
local skill = conditionCheck.skillItemData
local preCondition = skill.staticData.PreCondition
if(preCondition) then
if(preCondition.ProType) then
local res = SkillHelperFunc.CheckPrecondtionByProType(preCondition.ProType, Game.Myself.data, skill:GetID())
self:_SetSkillPreCondAndFireEvent(skill,res)
elseif(#preCondition>0) then
local pcond,pcondType
for i=1,#preCondition do
pcond = preCondition[i]
if(type(pcond)=="number") then
pcondType = pcond
else
pcondType = pcond.type
end
self:Log("check skill ",skill.staticData.NameZh," type: ",pcondType)
local check = self.typeChecks[pcondType]
if(check) then
check(self,conditionCheck)
end
end
end
end
end
function FunctionSkillEnableCheck:UpdateReason(check,state,skill,reason)
if(state) then
check:SetReason(reason and reason or skill.guid)
else
check:RemoveReason(reason and reason or skill.guid)
end
-- self:Log(string.format("技能%s, 條件%s 滿足%s",skill.staticData.NameZh,reason.type,tostring(state)))
if(check:IsDirty()) then
self:_SetSkillPreCondAndFireEvent(skill,check:HasReason())
end
end
--return true/false
function FunctionSkillEnableCheck:_ProCheckSkillPreCond(conditionCheck)
local skill = conditionCheck.skillItemData
local preCondition = skill.staticData.PreCondition
if(preCondition) then
if(preCondition.ProType) then
local res = SkillHelperFunc.CheckPrecondtionByProType(preCondition.ProType, Game.Myself.data, skill:GetID())
self:_SetSkillPreCondAndFireEvent(skill,res)
return true
end
end
return false
end
function FunctionSkillEnableCheck:_SetSkillPreCondAndFireEvent(skill,value)
local nowPrecond = skill:GetFitPreCond()
if(nowPrecond~=value) then
skill:SetFitPreCond(value)
-- self:Log("技能",skill.guid,"可使用",skill.fitPreCondion)
EventManager.Me():PassEvent(SkillEvent.SkillFitPreCondtion,skill)
end
end
function FunctionSkillEnableCheck:BuffCheck( conditionCheck)
local skill = conditionCheck.skillItemData
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.Buff)
local myself = Game.Myself
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(myself:HasBuff(preCondition.id)) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
function FunctionSkillEnableCheck:AfterUseSkillCheck(conditionCheck)
local skill = conditionCheck.skillItemData
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.AfterUseSkill)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
local passedTime = self.usedSkillPassTime[preCondition.skillid]
if(passedTime ~=nil and passedTime<=preCondition.time) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
function FunctionSkillEnableCheck:WearEquipCheck(conditionCheck)
local skill = conditionCheck.skillItemData
local equipBag = BagProxy.Instance:GetRoleEquipBag()
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.WearEquip)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
local itemtype = preCondition.itemtype
local itemid = preCondition.itemid
if itemtype ~= nil then
local num = equipBag:GetNumByItemType(itemtype)
if(num > 0) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
elseif itemid ~= nil then
local num = equipBag:GetStaticIdMap()[itemid]
if num ~= nil then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
end
function FunctionSkillEnableCheck:HpLessThanCheck(conditionCheck)
if(self.myself) then
local skill = conditionCheck.skillItemData
local hpPercent = (self.myself.data.props.Hp:GetValue() / self.myself.data.props.MaxHp:GetValue())*100
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.HpLessThan)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
local hpPercentCond = preCondition.value
if(hpPercent > hpPercentCond) then
self:UpdateReason(conditionCheck,false,skill,preCondition)
else
self:UpdateReason(conditionCheck,true,skill,preCondition)
end
end
end
end
end
function FunctionSkillEnableCheck:MyselfPartnerCheck(conditionCheck,partnerID)
if(self.myself) then
local skill = conditionCheck.skillItemData
partnerID = partnerID or self.myself.data.userdata:Get(UDEnum.PET_PARTNER)
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.Partner)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
local fitParnter = false
for i=1,#preCondition.id do
if(partnerID == preCondition.id[i]) then
fitParnter = true
end
end
if(fitParnter) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
end
function FunctionSkillEnableCheck:GetPrecondtionProp(preCondition)
local prop
for k,v in pairs(preCondition) do
if(k~="type") then
prop = k
break
end
end
return prop
end
function FunctionSkillEnableCheck:MyselfStateCheck(conditionCheck,prop)
if(self.myself) then
local skill = conditionCheck.skillItemData
local preCondition = skill.staticData.PreCondition
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.MyselfState)
if(needChecks) then
local preCondition
if(prop==nil) then
for i=1,#needChecks do
preCondition = needChecks[i]
for k,v in pairs(preCondition) do
if(k~="type") then
prop = k
if(prop) then
prop = self.myself.data.props[prop]
self:PropCheck(conditionCheck,prop,skill,preCondition)
end
end
end
end
else
for i=1,#needChecks do
preCondition = needChecks[i]
local condP = self:GetPrecondtionProp(preCondition)
if(condP and condP == prop.propVO.name) then
break
end
end
self:PropCheck(conditionCheck,prop,skill,preCondition)
end
end
end
end
function FunctionSkillEnableCheck:PropCheck(conditionCheck,prop,skill,preCondition)
if(prop) then
local propValue = prop:GetValue()
if(prop.propVO.name == "AttrEffect") then
propValue = BitUtil.band(propValue,preCondition.AttrEffect-1)
end
if(propValue>0) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
else
self:UpdateReason(conditionCheck,true,skill,preCondition)
end
end
--使用技能后的檢測,並且記錄
function FunctionSkillEnableCheck:UsedSkillCheck(skillIDAndLevel,passedTime)
passedTime = passedTime or 0
local skillID = math.floor(skillIDAndLevel/1000)
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.AfterUseSkill]
if(preConditions) then
local preCondition
for k,v in pairs(preConditions) do
local needChecks = v:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.AfterUseSkill)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(preCondition.skillid == skillID) then
if(passedTime <=preCondition.time) then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
end
end
end
end
end
self.usedSkillPassTime[skillID] = passedTime
end
--人物身上裝備發生變化時,檢測是否有技能被影響到
function FunctionSkillEnableCheck:RoleEquipUpdateCheck(item)
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.WearEquip]
if(preConditions) then
local preCondition
local equipBag = BagProxy.Instance:GetRoleEquipBag()
local numType = equipBag:GetNumByItemType(item.staticData.Type)
local num = equipBag:GetStaticIdMap()[item.staticData.id]
for k,v in pairs(preConditions) do
if(self:_ProCheckSkillPreCond(v)==false) then
local needChecks = v:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.WearEquip)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(preCondition.itemtype == item.staticData.Type) then
if(numType > 0) then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
elseif preCondition.itemid == item.staticData.id then
if num ~= nil then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
end
end
end
end
end
end
end
function FunctionSkillEnableCheck:BuffUpdateCheck()
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.Buff]
if(preConditions) then
local preCondition
local myself = Game.Myself
for k,v in pairs(preConditions) do
self:_ProCheckSkillPreCond(v)
local needChecks = v:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.Buff)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(myself:HasBuff(preCondition.id)) then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
end
end
end
end
end
--人物血量/最大血量變化時,檢測技能
function FunctionSkillEnableCheck:HpCheck()
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.HpLessThan]
if(preConditions) then
local preCondition
local hpPercent = (self.myself.data.props.Hp:GetValue() / self.myself.data.props.MaxHp:GetValue())*100
for k,v in pairs(preConditions) do
if(self:_ProCheckSkillPreCond(v)==false) then
local needChecks = v:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.HpLessThan)
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(hpPercent <= preCondition.value) then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
end
end
end
end
end
end
--人物狀態屬性變化時,檢測技能
function FunctionSkillEnableCheck:PropChangeCheck(p)
local propName = p.propVO.name
local relativeSkills = self.stateSkill[propName]
if(relativeSkills) then
for k,v in pairs(relativeSkills) do
self:MyselfStateCheck(v,p)
end
end
end
--我的出戰寵物發生變化時,檢測技能
function FunctionSkillEnableCheck:PartnerUpdateCheck(id)
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.Partner]
if(preConditions) then
for k,v in pairs(preConditions) do
self:_ProCheckSkillPreCond(v)
self:MyselfPartnerCheck(v,id)
end
end
end
--每隔x毫秒更新技能已使用時間,並檢測
function FunctionSkillEnableCheck:TickCheck(deltaTime)
--更新已使用時間
for k,v in pairs(self.usedSkillPassTime) do
v = v + deltaTime
self.usedSkillPassTime[k] = v
end
local skills = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.AfterUseSkill]
if(skills) then
for k,v in pairs(skills) do
self:AfterUseSkillCheck(v)
end
end
end
--是否滿足已學了某技能的條件
function FunctionSkillEnableCheck:LearnedSkillCheck(skillIDAndLevel)
local skill = Table_Skill[skillIDAndLevel]
if(skill) then
local preConditions = skill.PreCondition
if(preConditions) then
local precond
for i=1,#preConditions do
precond = preConditions[i]
if(precond~=nil and precond.type == SkillPrecondCheck.PreConditionType.LearnedSkill) then
return SkillProxy.Instance:GetLearnedSkillBySortID(precond.skillid)~=nil,precond.skillid
end
end
end
end
return true
end
function FunctionSkillEnableCheck:BeingStateCheck(conditionCheck)
local skill = conditionCheck.skillItemData
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.BeingState)
local summoned = PetProxy.Instance:GetMySummonBeingInfo()
if(needChecks) then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if(preCondition.not_exist) then
if(summoned==nil) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
elseif(preCondition.died) then
if(summoned~=nil and not summoned:IsAlive()) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
elseif(preCondition.alive)then
local id = preCondition.alive
if(summoned~=nil and summoned:IsAlive() and (id==1 or id == summoned.beingid)) then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
end
function FunctionSkillEnableCheck:SummonChangeCheck(beingInfoData)
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.BeingState]
if(preConditions) then
local preCondition
for k,v in pairs(preConditions) do
if(self:_ProCheckSkillPreCond(v)==false) then
self:BeingStateCheck(v)
end
end
end
end
function FunctionSkillEnableCheck:MapCheck(conditionCheck)
local skill = conditionCheck.skillItemData
local needChecks = conditionCheck:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.Map)
if needChecks then
local preCondition
local mapid = Game.MapManager:GetMapID()
for i=1,#needChecks do
preCondition = needChecks[i]
if preCondition.id == mapid then
self:UpdateReason(conditionCheck,true,skill,preCondition)
else
self:UpdateReason(conditionCheck,false,skill,preCondition)
end
end
end
end
function FunctionSkillEnableCheck:MapUpdateCheck()
local preConditions = self.skillsTypeCheck[SkillPrecondCheck.PreConditionType.Map]
if preConditions then
local preCondition
local mapid = Game.MapManager:GetMapID()
for k,v in pairs(preConditions) do
local needChecks = v:GetPrecondtionsByType(SkillPrecondCheck.PreConditionType.Map)
if needChecks then
local preCondition
for i=1,#needChecks do
preCondition = needChecks[i]
if preCondition.id == mapid then
self:UpdateReason(v,true,v.skillItemData,preCondition)
else
self:UpdateReason(v,false,v.skillItemData,preCondition)
end
end
end
end
end
end