local ConditionAnalysis = {} local private = {} --加载需要的模块 local ConditionDataNode = require("Battle/Logic/AI/Condition/ConditionDataNode") local ConditionDataNode_Value = require("Battle/Logic/AI/Condition/ConditionDataNode_Value") local _funcNodeDir = {} local _strTable = {} local _splitorTable = {} local _curSplitor = "E" local _strTableIndex = 0 local string_gsub=string.gsub local string_split=string.split local tonumber=tonumber local FP=FP --[[ 初始化 --]] _funcNodeDir = { [LuaConst.ConditionFuncType.ActiveNum] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_ActiveNum"):new(), [LuaConst.ConditionFuncType.And] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_And"):new(), [LuaConst.ConditionFuncType.AngleCheck] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_AngleCheck"):new(), [LuaConst.ConditionFuncType.CanUseSkillType] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CanUseSkillType"):new(), [LuaConst.ConditionFuncType.CheckBuff] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CheckBuff"):new(), [LuaConst.ConditionFuncType.CurrentHp] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CurrentHp"):new(), [LuaConst.ConditionFuncType.Distance] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Distance"):new(), [LuaConst.ConditionFuncType.Equal] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Equal"):new(), [LuaConst.ConditionFuncType.False] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_False"):new(), [LuaConst.ConditionFuncType.Greater] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Greater"):new(), [LuaConst.ConditionFuncType.GreaterOrEqual] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GreaterOrEqual"):new(), [LuaConst.ConditionFuncType.IsAttacked] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsAttacked"):new(), [LuaConst.ConditionFuncType.Less] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Less"):new(), [LuaConst.ConditionFuncType.LessOrEqual] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LessOrEqual"):new(), [LuaConst.ConditionFuncType.LevelMessage] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LevelMessage"):new(), [LuaConst.ConditionFuncType.LiveTime] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LiveTime"):new(), [LuaConst.ConditionFuncType.Max] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Max"):new(), [LuaConst.ConditionFuncType.Min] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Min"):new(), [LuaConst.ConditionFuncType.Not] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Not"):new(), [LuaConst.ConditionFuncType.NotBorn] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_NotBorn"):new(), [LuaConst.ConditionFuncType.Or] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Or"):new(), [LuaConst.ConditionFuncType.Sub] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Sub"):new(), [LuaConst.ConditionFuncType.Sumf] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Sumf"):new(), [LuaConst.ConditionFuncType.TargetIsNull] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_TargetIsNull"):new(), [LuaConst.ConditionFuncType.TargetIsUsingSkillType] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_TargetIsUsingSkillType"):new(), [LuaConst.ConditionFuncType.ToTragetMeetEntity] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_ToTragetMeetEntity"):new(), [LuaConst.ConditionFuncType.True] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_True"):new(), [LuaConst.ConditionFuncType.DistanceToPoint] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DistanceToPoint"):new(), [LuaConst.ConditionFuncType.TargetCategory] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_TargetCategory"):new(), [LuaConst.ConditionFuncType.FollowTargetIsNull] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_FollowTargetIsNull"):new(), [LuaConst.ConditionFuncType.AiRecord] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_AiRecord"):new(), [LuaConst.ConditionFuncType.Timer] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_Timer"):new(), [LuaConst.ConditionFuncType.TimerIsNull] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_TimerIsNull"):new(), [LuaConst.ConditionFuncType.DistanceLess] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DistanceLess"):new(), [LuaConst.ConditionFuncType.DistanceGreater] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DistanceGreater"):new(), [LuaConst.ConditionFuncType.HpPercentCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HpPercentCompare"):new(), [LuaConst.ConditionFuncType.HpCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HpCompare"):new(), [LuaConst.ConditionFuncType.HpLossWithinTime] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HpLossWithinTime"):new(), [LuaConst.ConditionFuncType.HookMissileLength] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HookMissileLength"):new(), [LuaConst.ConditionFuncType.MissileIDFilter] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MissileIDFilter"):new(), [LuaConst.ConditionFuncType.PossibilityCheck] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_PossibilityCheck"):new(), [LuaConst.ConditionFuncType.RandomValue] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_RandomValue"):new(), [LuaConst.ConditionFuncType.BeHurtCountGreater] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_BeHurtCountGreater"):new(), [LuaConst.ConditionFuncType.AngleRangeCheck] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_AngleRangeCheck"):new(), [LuaConst.ConditionFuncType.ForwardWallDistCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_ForwardWallDistCompare"):new(), [LuaConst.ConditionFuncType.DetourRoundMoveTimeElaCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DetourRoundMoveTimeElaCompare"):new(), [LuaConst.ConditionFuncType.DistanceBuffSource] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DistanceBuffSource"):new(), [LuaConst.ConditionFuncType.GetEntityCategory] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GetEntityCategory"):new(), [LuaConst.ConditionFuncType.IsResAmountReachLimit] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsResAmountReachLimit"):new(), [LuaConst.ConditionFuncType.InteractColliderIsEnemy] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_InteractColliderIsEnemy"):new(), [LuaConst.ConditionFuncType.InteractEntityHasBeDriven] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_InteractEntityHasBeDriven"):new(), [LuaConst.ConditionFuncType.IsInDriving] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInDriving"):new(), [LuaConst.ConditionFuncType.PlayerResourceAmountCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_PlayerResourceAmountCompare"):new(), [LuaConst.ConditionFuncType.LastFrameSpeedCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LastFrameSpeedCompare"):new(), [LuaConst.ConditionFuncType.IsUsingSkillType] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsUsingSkillType"):new(), [LuaConst.ConditionFuncType.IsGuildPartyCanGetBox] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GuildPartyCanPickUpCollectBox"):new(), [LuaConst.ConditionFuncType.DistCompareByMonsterID] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DistCompareByMonsterID"):new(), [LuaConst.ConditionFuncType.HpCompareByMonsterID] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HpCompareByMonsterID"):new(), [LuaConst.ConditionFuncType.IsInCamera] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInCamera"):new(), [LuaConst.ConditionFuncType.IsLeader] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsLeader"):new(), [LuaConst.ConditionFuncType.IsInteractColliderOwnerPlayer] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInteractColliderOwnerPlayer"):new(), [LuaConst.ConditionFuncType.IsFlagAmountReachLimit] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsFlagAmountReachLimit"):new(), [LuaConst.ConditionFuncType.MonsterDeadCount] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MonsterDeadCount"):new(), [LuaConst.ConditionFuncType.IsHeroOfKindom] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsHeroOfKindom"):new(), [LuaConst.ConditionFuncType.IsHeroOfProfession] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsHeroOfProfession"):new(), [LuaConst.ConditionFuncType.IsHeroOfGender] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsHeroOfGender"):new(), [LuaConst.ConditionFuncType.IsHero] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsHero"):new(), [LuaConst.ConditionFuncType.SkillTypeCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_SkillTypeCompare"):new(), [LuaConst.ConditionFuncType.BuffLayerCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_BuffLayerCompare"):new(), [LuaConst.ConditionFuncType.CheckBuffByMonsterID] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CheckBuffByMonsterID"):new(), [LuaConst.ConditionFuncType.NotSyncLevelIsFollowing] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_NotSyncLevelIsFollowing"):new(), [LuaConst.ConditionFuncType.IsFirstPriorityBoss] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsFirstPriorityBoss"):new(), [LuaConst.ConditionFuncType.IsBoss] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsBoss"):new(), [LuaConst.ConditionFuncType.IsElite] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsElite"):new(), [LuaConst.ConditionFuncType.IsMinion] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsMinion"):new(), [LuaConst.ConditionFuncType.IsInMatching] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInMatching"):new(), [LuaConst.ConditionFuncType.HasGuild] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HasGuild"):new(), [LuaConst.ConditionFuncType.DamageRankCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DamageRankCompare"):new(), [LuaConst.ConditionFuncType.MissileGroupFilter] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MissileGroupFilter"):new(), [LuaConst.ConditionFuncType.CasterHeroFilter] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CasterHeroFilter"):new(), [LuaConst.ConditionFuncType.SkillIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_SkillIDCompare"):new(), [LuaConst.ConditionFuncType.SkillKeyPosCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_SkillKeyPosCompare"):new(), [LuaConst.ConditionFuncType.LastBuffSameEventIDCondResult] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LastBuffSameEventIDCondResult"):new(), [LuaConst.ConditionFuncType.IsCollectAmountReachLimit] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsCollectAmountReachLimit"):new(), [LuaConst.ConditionFuncType.EventBuffGroupCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventBuffGroupCompare"):new(), [LuaConst.ConditionFuncType.GetOriginEntityVariable] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GetOriginEntityVariable"):new(), [LuaConst.ConditionFuncType.EventBuffIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventBuffIDCompare"):new(), [LuaConst.ConditionFuncType.EventBuffLayerCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventBuffLayerCompare"):new(), [LuaConst.ConditionFuncType.StratagemIsReady] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_StratagemIsReady"):new(), [LuaConst.ConditionFuncType.MissileGroupFilter] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MissileGroupFilter"):new(), [LuaConst.ConditionFuncType.CheckBuffOfSource] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CheckBuffOfSource"):new(), [LuaConst.ConditionFuncType.HorseIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HorseIDCompare"):new(), [LuaConst.ConditionFuncType.CheckBuffGroup] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CheckBuffGroup"):new(), [LuaConst.ConditionFuncType.IsChangingModel] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsChangingModel"):new(), [LuaConst.ConditionFuncType.HaveBattleProp] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HaveBattleProp"):new(), [LuaConst.ConditionFuncType.EventTargetCasterDistCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventTargetCasterDistCompare"):new(), [LuaConst.ConditionFuncType.HasDragonArtery] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HasDragonArtery"):new(), [LuaConst.ConditionFuncType.DragonArteryReachMagicPropUpper] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_DragonArteryReachMagicPropUpper"):new(), [LuaConst.ConditionFuncType.LevelHasDragonArtery] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LevelHasDragonArtery"):new(), [LuaConst.ConditionFuncType.HasWorshipCount] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_HasWorshipCount"):new(), [LuaConst.ConditionFuncType.MissileAttackerIsMaster] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MissileAttackerIsMaster"):new(), [LuaConst.ConditionFuncType.IsMasterOfMissileAttacker] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsMasterOfMissileAttacker"):new(), [LuaConst.ConditionFuncType.InteractEntityHasWantedTaskID] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_InteractEntityHasWantedTaskID"):new(), [LuaConst.ConditionFuncType.MonsterIDCheck] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MonsterIDCheck"):new(), [LuaConst.ConditionFuncType.GetPlayerComboKillNum] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GetPlayerComboKillNum"):new(), [LuaConst.ConditionFuncType.IsEnemyOfMissileAttacker] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsEnemyOfMissileAttacker"):new(), [LuaConst.ConditionFuncType.IsLevelWaiting] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsLevelWaiting"):new(), [LuaConst.ConditionFuncType.LevelTypeCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LevelTypeCompare"):new(), [LuaConst.ConditionFuncType.GetAttrValue] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_GetAttrValue"):new(), [LuaConst.ConditionFuncType.IsTargetSameAsMasterLastHurtEnemy] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsTargetSameAsMasterLastHurtEnemy"):new(), [LuaConst.ConditionFuncType.IsInRetinueExpectedArea] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInRetinueExpectedArea"):new(), [LuaConst.ConditionFuncType.IsMasterActive] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsMasterActive"):new(), [LuaConst.ConditionFuncType.EventAttrTypeCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventAttrTypeCompare"):new(), [LuaConst.ConditionFuncType.CompareIllusionMarkId] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CompareIllusionMarkId"):new(), [LuaConst.ConditionFuncType.MonsterFeatureSpecialGroupIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_MonsterFeatureSpecialGroupIDCompare"):new(), [LuaConst.ConditionFuncType.IsInTown] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInTown"):new(), [LuaConst.ConditionFuncType.VariableCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_VariableCompare"):new(), [LuaConst.ConditionFuncType.CanUseBuffSkill] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CanUseBuffSkill"):new(), [LuaConst.ConditionFuncType.BuffSkillIdCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_BuffSkillIdCompare"):new(), [LuaConst.ConditionFuncType.IsInAmWeak] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsInAmWeak"):new(), [LuaConst.ConditionFuncType.CampTypeCompareWithBuffHost] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CampTypeCompareWithBuffHost"):new(), [LuaConst.ConditionFuncType.EventMissileIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventMissileIDCompare"):new(), [LuaConst.ConditionFuncType.CheckOriginIsEventKiller] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CheckOriginIsEventKiller"):new(), [LuaConst.ConditionFuncType.FriendAndEnemyHeroCountCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_FriendAndEnemyHeroCountCompare"):new(), [LuaConst.ConditionFuncType.CampIdCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_CampIdCompare"):new(), [LuaConst.ConditionFuncType.EventCampIDCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventCampIDCompare"):new(), [LuaConst.ConditionFuncType.EventHpCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventHpCompare"):new(), [LuaConst.ConditionFuncType.EventBattlePropIdCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventBattlePropIdCompare"):new(), [LuaConst.ConditionFuncType.EventTargetIsVehicle] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventTargetIsVehicle"):new(), [LuaConst.ConditionFuncType.EventMissileIsGodBeast] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventMissileIsGodBeast"):new(), [LuaConst.ConditionFuncType.EventMissileHasHurt] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventMissileHasHurt"):new(), [LuaConst.ConditionFuncType.EventHpChangeTypeCompare] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventHpChangeTypeCompare"):new(), [LuaConst.ConditionFuncType.BuffLayerEqual] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_BuffLayerEqual"):new(), [LuaConst.ConditionFuncType.EventSkillDifferentFromLast] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventSkillDifferentFromLast"):new(), [LuaConst.ConditionFuncType.EventTargetIsEnemy] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventTargetIsEnemy"):new(), [LuaConst.ConditionFuncType.EventMissileHasHit] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_EventMissileHasHit"):new(), [LuaConst.ConditionFuncType.IsSomeBuffBossTarget] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsSomeBuffBossTarget"):new(), [LuaConst.ConditionFuncType.IsBossOrEliteAttackMeNotNormalSkill] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_IsBossOrEliteAttackMeNotNormalSkill"):new(), [LuaConst.ConditionFuncType.LevelPassTime] = require("Battle/Logic/AI/Condition/FuncNode/FuncNode_LevelPassTime"):new(), } function ConditionAnalysis.Init() end --[[ 解析str,并存储成树 --]] function ConditionAnalysis.BuildConditionDataTree(conditionStr) table.clear(_splitorTable) if conditionStr then local char = nil for i=1,#conditionStr do char = string.sub(conditionStr, i, i) if char == "(" or char == "," or char == ")" then table.insert(_splitorTable, char) end end end conditionStr = string_gsub(conditionStr,'%(',',') conditionStr = string_gsub(conditionStr,'%)','') conditionStr = string_gsub(conditionStr,',,',',') _strTable = string_split(conditionStr,',') _strTableIndex = 0 return private.CreateNodeFromStr() end function ConditionAnalysis.SetCurSplitorToNext() if #_splitorTable > 0 then _curSplitor = table.remove(_splitorTable, 1) else _curSplitor = "E" end end function private.CreateNodeFromStr() _strTableIndex = _strTableIndex + 1 local str = _strTable[_strTableIndex] if str == nil or str == "" then return end ConditionAnalysis.SetCurSplitorToNext() local number = tonumber(str) if number then --数字 local node = ConditionDataNode_Value:new() node.Value = FP.newV1(number) return node else --方法 local node = ConditionDataNode:new() local func = _funcNodeDir[str] node.Func = func if func then if func.LimitChildCount == 0 then ConditionAnalysis.SetCurSplitorToNext() elseif func.LimitChildCount == 1 then node.FirstNode = private.CreateNodeFromStr() elseif func.LimitChildCount == 2 then node.FirstNode = private.CreateNodeFromStr() if _curSplitor ~= ')' then node.SecondNode = private.CreateNodeFromStr() end elseif func.LimitChildCount == 3 then node.FirstNode = private.CreateNodeFromStr() if _curSplitor ~= ')' then node.SecondNode = private.CreateNodeFromStr() if _curSplitor ~= ')' then node.ThirdNode = private.CreateNodeFromStr() end end end ConditionAnalysis.SetCurSplitorToNext() end return node end end --传入relationType和左值右值,如果为真时返回FP.Const.One,否则返回FP.Const.Zero function ConditionAnalysis.CommonValueCompare(relationType, leftValue, rightValue) local boolean = false if relationType == LuaConst.EValueCompareType.LESS then boolean = leftValue < rightValue elseif relationType == LuaConst.EValueCompareType.LESS_EQUAL then boolean = leftValue <= rightValue elseif relationType == LuaConst.EValueCompareType.EQUAL then boolean = leftValue == rightValue elseif relationType == LuaConst.EValueCompareType.BIGGER_EQUAL then boolean = leftValue >= rightValue elseif relationType == LuaConst.EValueCompareType.BIGGER then boolean = leftValue > rightValue else logging.error(LTAG.ERROR, "HYW : relationType bad Value : ", relationType) end return boolean and FP.Const.One or FP.Const.Zero end return ConditionAnalysis