--战斗外部(UI之类的)获取战斗内部数据,统一通过这个类 --这个类只允许添加数据的获取方法,不允许添加数据修改方法,谨慎添加提供获取引用的接口 --这个类可以直接访问所有System的数据获取方法 local TargetSystem = require "Battle/Logic/Entity/System/TargetSystem" local SkillBaseSystem = require "Battle/Logic/Entity/System/SkillBaseSystem" local TownCartManager = require "Battle/Logic/MainLoop/SyncMoveManager/TownCartManager" --战斗数据获取 local BattleDataGetter = {} local table_insert=table.insert local table_remove=table.remove local LuaConst_LevelItemType_Npc=LuaConst.LevelItemType.Npc local LuaConst = LuaConst local Const_AutoRevive_Key = "Const_AutoRevive_Key" function BattleDataGetter.GetAcID() return PlayerInfoManager.AcID end function BattleDataGetter.GetPKModel() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetFightMode() end return nil end function BattleDataGetter.GetPlayerName() return PlayerInfoManager.PlayerName end function BattleDataGetter.GetPlayerNameByPlayerID(playerID) return LevelPlayerManager.GetPlayerName(playerID) end function BattleDataGetter.GetMyCountryID() local playerInfo = LevelPlayerManager.PlayersArmyTable[LevelPlayerManager.MyPlayerIDInRoom].playerInfo return playerInfo.countryId end function BattleDataGetter.IsOriginalArmy() return LevelPlayerManager.IsOriginalArmy() end function BattleDataGetter.GetSwitchArmyData() return LevelPlayerManager.GetSwitchArmyData() end function BattleDataGetter.GetCurLevelType() return LevelManager.GetCurLevelType() end function BattleDataGetter.IsSelectOneReviveLevel() return LevelManager.IsSelectOneReviveLevel() end function BattleDataGetter.IsShowTeammateInSelectOneReviveLevel() return LevelManager.IsShowTeammateInSelectOneReviveLevel() end function BattleDataGetter.HasWaitingPlayerBuffInfo() return LevelManager.HasWaitingPlayerBuffInfo() end function BattleDataGetter.GetCurLevelID() return LevelManager.GetCurLevelID() end function BattleDataGetter.GetBossList() return LevelManager.CurLevelFunc.bossList end --返回的是binser生成的bytes数组,不少 function BattleDataGetter.GetCurLevelSaveRecordBytes() return LevelManager.CurLevelFunc:GetSaveRecordBytes() end function BattleDataGetter.HadStopLevel() return LevelManager.CurLevelFunc:GetHadStopLevel() end function BattleDataGetter.GetNextLevelID() return LevelManager.GetNextLevelID() end --目前只有世界boss统计了,如果别的关卡也要,需要拓展 function BattleDataGetter.GetPlayerAllHeroDeadCount() return LevelManager.CurLevelFunc.allPlayerHeroDeadCount or 0 end function BattleDataGetter.GetReviveFromServerCount(playerID) return LevelManager.CurLevelFunc:GetReviveFromServerCount(playerID) end function BattleDataGetter.GetHeroName(entity) local data = entity._logicInitData._characterData.HeroNumData if data then return data.NameIDS else return "" end end function BattleDataGetter.GetHeroHeadIcon(entity) local data = entity._logicInitData._characterData.HeroNumData if data then return data.SquareHead else return "" end end function BattleDataGetter.GetMainHeroHeadIcon() local data = LogicUpdateManager._curEntity:GetOriginCharacterData().HeroNumData if data then return data.SquareHead else return "" end end --不应该返回空,返回空就是bug。 function BattleDataGetter.GetEnemyPlayerName(index) return LevelPlayerManager.GetPlayerName(index or LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) end function BattleDataGetter.GetCurPlayerID() return LevelPlayerManager.MyPlayerIDInRoom end function BattleDataGetter.GetRoomPlayerIDList() return LevelPlayerManager.PlayerIDList end function BattleDataGetter.GetMyTeamID() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetTeamID() else logging.error(LTAG.ERROR, "HYW : 警告 :GetAutoFightState 查询时间过早,LogicUpdateManager._curEntity还未初始化(程序用,测试可忽略)") end end function BattleDataGetter.GetPlayerInfo(playerID) return LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) end function BattleDataGetter.GetMyPlayerInfo() return LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetPlayerInfoByAcid(acid) return LevelPlayerManager.GetPlayerInfoByAcid(acid) end function BattleDataGetter.GetPlayerInfoByName(name) return LevelPlayerManager.GetPlayerInfoByName(name) end function BattleDataGetter.GetPlayerIDListOfTeam(teamId) return LevelPlayerManager.GetPlayerIDListOfTeam(teamId) end --传入队长名字,获取这个队伍所有玩家的acid list function BattleDataGetter.GetTeamPlayerAcidListByLeaderName(teamLeaderName) return LevelPlayerManager.GetTeamPlayerAcidListByLeaderName(teamLeaderName) end function BattleDataGetter.GetPlayerKillNum(playerID) return LevelManager.CurLevelFunc:GetPlayerKillNum(playerID) end function BattleDataGetter.GetCityWarTotalKillNum(playerID) if LevelManager.CurLevelFunc.GetPlayerKillNum then local killNum = LevelManager.CurLevelFunc:GetPlayerKillNum(playerID) -- 当前层 local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local acid = playerInfo and playerInfo.acid --加上上一层数据 if LevelManager.CurLevelFunc.preBattleResults then for i,preBattleResult in ipairs(LevelManager.CurLevelFunc.preBattleResults) do if acid == preBattleResult.playerAcid then killNum = killNum + (preBattleResult.killNum or 0) break end end end return killNum else return 0 end end function BattleDataGetter.GetCityWarAssistKillNum(playerID) if LevelManager.CurLevelFunc.GetPlayerAssistKillNum then local assistNum = LevelManager.CurLevelFunc:GetPlayerAssistKillNum(playerID) -- 当前层 local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local acid = playerInfo and playerInfo.acid --加上上一层数据 if LevelManager.CurLevelFunc.preBattleResults then for i,preBattleResult in ipairs(LevelManager.CurLevelFunc.preBattleResults) do if acid == preBattleResult.playerAcid then assistNum = assistNum + (preBattleResult.assistNum or 0) break end end end return assistNum else return 0 end end function BattleDataGetter.GetMyPlayerKillNum() return LevelManager.CurLevelFunc:GetPlayerKillNum(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetPlayerComboKillNum(playerID) return LevelManager.CurLevelFunc:GetPlayerComboKillNum(playerID) end function BattleDataGetter.GetPlayerAssistKillNum(playerID) return LevelManager.CurLevelFunc:GetPlayerAssistKillNum(playerID) end function BattleDataGetter.GetMyPlayerAssistKillNum() return LevelManager.CurLevelFunc:GetPlayerAssistKillNum(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetPlayerInvolvedKillNum(playerID) return LevelManager.CurLevelFunc:GetPlayerInvolvedKillNum(playerID) end function BattleDataGetter.GetKickedFromVehicleNum(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.KickFromVehicleCount] or count end return count end function BattleDataGetter.GetBiggestDrivingComboKillAndAssistNum(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.BiggestDrivingComboKillAndAssistNum] or count end return count end function BattleDataGetter.GetSwitchHeroCount(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.SwitchHeroCount] or count end return count end function BattleDataGetter.GetKillerName(entity) local killer = entity.components.record.KillerEntity if killer then local killerName = killer._logicInitData.Name if string.isNilOrEmpty(killerName) then killerName = UIUtils.GetLocalizedTxt(Const_IDS[killer.components.base.CurCharacterData.MonsterNameIDS]) end return killerName else logging.error(LTAG.ERROR, "[gws]: 当获取击杀entity的凶手时,没有找到! entityID = ", entity.EntityID) return "" end end function BattleDataGetter.GetKillerIsPlayer(entity) local killer = entity.components.record.KillerEntity return killer._logicInitData.IsPlayer end function BattleDataGetter.GetRevengeCount(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.RevengeCount] or count end return count end function BattleDataGetter.GetKilledByTowerCount(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.KilledByTowerCount] or count end return count end function BattleDataGetter.GetKillerAcid(entity) local killer = entity.components.record.KillerEntity local acid = nil if killer then local killerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(killer:GetPlayerID()) if killerInfo then acid = killerInfo.acid end end return acid end function BattleDataGetter.GetKillerPlayerInfoEntity(entity) local killer = entity.components.record.KillerEntity local killerInfo = nil if killer then killerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(killer:GetPlayerID()) end return killerInfo end function BattleDataGetter.GetEntityName(entity) local name = entity._logicInitData.Name if string.isNilOrEmpty(name) then if entity.isNpc then name = UIUtils.GetLocalizedTxt(Const_IDS[entity.components.base.CurCharacterData.NpcNameIDS]) elseif not entity.isHero and not entity.isAdjuntant then name = UIUtils.GetLocalizedTxt(Const_IDS[entity.components.base.CurCharacterData.MonsterNameIDS]) end end return name end function BattleDataGetter.GetEntityUIName(entity) local name = "" if entity:IsHero() then if LevelManager.IsShowHeroLifeBarLevel() then name = entity.ExpEntity:GetPlayerModelName() end else -- 如果有问题 ,可参考 ExpUISystem.DispatchModelUIEvent 方法中的获取名字 name = UIUtils.GetLocalizedTxt(Const_IDS[entity.components.base.CurCharacterData.MonsterNameIDS]) end return name end function BattleDataGetter.GetBuffSourceEntityName(entity) local originEntity = entity:GetOriginEntity() return BattleDataGetter.GetEntityName(originEntity) end function BattleDataGetter.GetCurEntityID() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.EntityID end end function BattleDataGetter.GetCurEntityHorseModelID() if LogicUpdateManager._curEntity and LogicUpdateManager._curEntity._logicInitData.HorseModelData then return LogicUpdateManager._curEntity._logicInitData.HorseModelData.HorseModelID end return nil end function BattleDataGetter.GetEntityBanSkillDic(entity) return entity.components.skillBase.banKeyPosDic end function BattleDataGetter.GetEntityByCurCharacterID(monsterID) for _, entity in pairs(LogicUpdateManager._entityDic) do if entity.components.base.CurCharacterData.ID == monsterID then return entity end end return nil end function BattleDataGetter.GetEntityByCharacterID(monsterID) for _, entity in pairs(LogicUpdateManager._entityDic) do if entity:GetCharacterID() == monsterID then return entity end end return nil end --返回离pos距离radius以内的最近的entity的敌人 pos可以自由设置,不一定是entity的LogicPos -- noInvincible : 不选择无敌的敌人 function BattleDataGetter.GetNearestEnemyInCircle(entity, pos, radius, ignoreCanNotBeTargetBuff, noInvincible) return TargetManager.GetNearestEnemyInCircle(entity, pos, radius, ignoreCanNotBeTargetBuff, noInvincible) end --返回离pos最近的,且位于扇形内的entity的敌人 --如果不传pos,则使用entiy的pos --如果不传fanshapeDir,则使用entity的面向 function BattleDataGetter.GetNearestEnemyInFanShape(entity, radius, fanshapeAngle, ignoreCanNotBeTargetBuff, noInvincible, pos, fanshapeDir) return TargetManager.GetNearestEnemyInFanShape(entity, radius, fanshapeAngle, ignoreCanNotBeTargetBuff, noInvincible, pos, fanshapeDir) end function BattleDataGetter.GetTargetByJoystick(entity, skillJoyStickData, joystickPos, count, ignoreBeSkillTargetBuff, sortType) return TargetManager.GetTargetByJoystick(entity, skillJoyStickData, joystickPos, count, ignoreBeSkillTargetBuff, sortType) end --预测entity释放skillID的时候瞄准的位置的坐标 function BattleDataGetter.PredictSkillAimPos(entity,skillID) return TargetSystem.PredictSkillAimPos(entity,skillID) end --获取在选取范围内,优先选中的目标 function BattleDataGetter.GetSkillHighestPriorityTarget(entity) local skillHighestPriorityTarget = entity.components.target.SkillHighestPriorityTarget return skillHighestPriorityTarget end function BattleDataGetter.HasObstacleTowardsPos(startPos,endPos) return LuaShoveManager.HasObstacleTowardsPos(startPos,endPos) end function BattleDataGetter.IsOnlinePlay() return LogicUpdateManager.IsOnlinePlay end function BattleDataGetter.IsInReconnectFastPlay() return LogicUpdateManager.IsInReconnectFastPlay() end function BattleDataGetter.HasCurEntity() return LogicUpdateManager._curEntity ~= nil end function BattleDataGetter.GetCurFrameIndex() return LogicUpdateManager._clientHandleFrame end function BattleDataGetter.GetLevelTotalFrame() return LogicUpdateManager.GetServerFrame() end function BattleDataGetter.GetLevelScore() return LevelManager.CurLevelFunc:GetLevelScore() end function BattleDataGetter.GetFourCountryScoreOfCountryId(countryId) return LevelManager.CurLevelFunc:GetCountryScore(countryId) end function BattleDataGetter.GetFourCountryScoreOfPlayerID(playerID) return LevelManager.CurLevelFunc:GetPlayerScore(playerID) end function BattleDataGetter.IsFourCountry() return LevelManager.IsFourCountry() end function BattleDataGetter.GetMainPlayerCharacterID() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetCharacterID() end end function BattleDataGetter.GetCharacterIDByEntityID(entityID) return LogicUpdateManager._entityDic[entityID]:GetCharacterID() end function BattleDataGetter.GetMainPlayerReviveTime() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.revive.ReviveTimer else return 0 end end function BattleDataGetter.GetMainPlayerAttrValueNum(attrType) if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetAttrValueNum(attrType) end end function BattleDataGetter.GetMainPlayerLastLogicPos() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetLastLogicPos() end end function BattleDataGetter.GetMainEntityLogicPos() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:GetLogicPos() end end function BattleDataGetter.GetMainEntitySkillJoystickData(skillID) if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.skillBase:GetSkillJoystickData(skillID) end end function BattleDataGetter.GetMainAdjutantSkillJoystickData() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.adjutant.AdjutantEntity.components.skillBase:GetJoystickDataByKeyPosition(LuaConst.ESkillKeyPosition.AdjutantSkillMain) end end function BattleDataGetter.GetMainBuffSkillJoystickData(buffSkillId) if LogicUpdateManager._curEntity then for i,v in ipairs(LogicUpdateManager._curEntity.components.buffSkill.buffSkillUpdateList) do if v.BuffSkillData.ID == buffSkillId then if v.BuffSkillData.JoystickID > 0 then return DataSheetManager.SkillJoyStickData:GetDataByID(v.BuffSkillData.JoystickID) end break end end end end function BattleDataGetter.GetCurSkillUIEntity() if LogicUpdateManager._curEntity then local carEntity = LogicUpdateManager._curEntity.components.drive.DriveEntity if carEntity then --有载具就返回载具 return carEntity else return LogicUpdateManager._curEntity end end end function BattleDataGetter.GetMainPlayerSkillIDByKeyPos(keyPos) if LogicUpdateManager._curEntity then if LogicUpdateManager._curEntity.components.drive.DriveEntity then --有载具就返回载具的技能信息 return SkillBaseSystem.GetSkillIDByKeyPosOfEntity(LogicUpdateManager._curEntity.components.drive.DriveEntity,keyPos) else return SkillBaseSystem.GetSkillIDByKeyPosOfEntity(LogicUpdateManager._curEntity,keyPos) end end end -- 获取自动寻路状态 function BattleDataGetter.GetAutoFindPathInTownState() return SystemManager.GetAutoFindPathInTownState(LogicUpdateManager._curEntity) end function BattleDataGetter.GetEntityCurSkillDataListOfEntity(entity) if entity then return entity.components.skillBase.CurSkillDataList end end function BattleDataGetter.GetDrivedEntitySkillDataList(entity) if entity and entity.components.drive and entity.components.drive.DriveEntity then return entity.components.drive.DriveEntity.components.skillBase.CurSkillDataList end return nil end function BattleDataGetter.GetMainPlayerLogicMoveDir() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.move.LogicMoveDir end end function BattleDataGetter.GetMainPlayerBattleMemberType() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity._logicInitData.BattleMemberType end end function BattleDataGetter.GetMainExpEntityEulerAngleY() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.ExpEntity:GetEulerAngleY() end end function BattleDataGetter.GetMainEntityCurSkillData() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.skillBase:GetCurSkillData() end end function BattleDataGetter.GetAdjutantCurSkillDataList() if LogicUpdateManager._curEntity then if LogicUpdateManager._curEntity.components.adjutant.AdjutantEntity then return LogicUpdateManager._curEntity.components.adjutant.AdjutantEntity.components.skillBase.CurSkillDataList end end end function BattleDataGetter.GetEntitySkillCDLeft(entity, skillID, ignoreCommonCD) if entity and entity.components.skillBase then local skillBaseComp = entity.components.skillBase local updateData = skillBaseComp.CurUpdateDataGroup[skillID] if updateData then local result if updateData.CD < skillBaseComp.CurCommonCD and not ignoreCommonCD then result = FP.tonumberV1(skillBaseComp.CurCommonCD) else result = FP.tonumberV1(updateData.CD) end return result or 0 end end end function BattleDataGetter.GetEntityChargeSkillInfo(entity, skillID) local count = 0 local skillData = entity:GetSkillData(skillID) local totalCount, onceTime = entity.components.skillBase:GetMaxChargeCountOfSkillData(skillData), skillData.ParamInt2 if entity and entity.components.skillBase then local updateData = entity.components.skillBase.CurUpdateDataGroup[skillID] if updateData then count = updateData.ChargeCount end end return count, totalCount, onceTime end function BattleDataGetter.GetAdjutantCD() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.adjutant.AdjutantCD end end function BattleDataGetter.GetAdjutantTotalCD() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.adjutant.TotalCD end end function BattleDataGetter.GetStratagemSkill() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.stratagem.StratagemSkillInfo end end function BattleDataGetter.GetStratagemCurCD() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.stratagem:GetStratagemCurCD() end end function BattleDataGetter.GetStratagemTotalCD() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.stratagem:GetStratagemTotalCD() end end function BattleDataGetter.GetTopBattlePropID(btnIndex) if LogicUpdateManager._curEntity then local propInfo = LogicUpdateManager._curEntity.components.battleProp:GetTopBattlePropInfo(btnIndex) return propInfo and propInfo.battlePropID or nil end end -- 获取某个按钮的道具信息(id,cd,totalCD,lifeTime,叠加数量) function BattleDataGetter.GetTopBattlePropInfos(btnIndex) if LogicUpdateManager._curEntity then local battlePropComp = LogicUpdateManager._curEntity.components.battleProp if battlePropComp then local propInfo = battlePropComp:GetTopBattlePropInfo(btnIndex) if propInfo then local battlePropID = propInfo.battlePropID local cd = battlePropComp.propCDDic[battlePropID] local totalCD = battlePropComp.propTotalCDDic[battlePropID] local lifeTime = propInfo.lifeTime local count = propInfo.count local usingTime = battlePropComp.curUsingTimerDic[btnIndex] return battlePropID, cd, totalCD, lifeTime, count, usingTime end end end return nil end function BattleDataGetter.GetEntityList_Sync() return LogicUpdateManager.EntityList_Sync end function BattleDataGetter.GetEntityList_Normal() return LogicUpdateManager.EntityList_Normal end function BattleDataGetter.GetAutoFightStateSaveKey() if LevelManager.CurLevelFunc then return LevelManager.CurLevelFunc:GetAutoFightStateSaveKey() else return nil end end function BattleDataGetter.GetInitAutoFightState() if LevelManager.CurLevelFunc then return LevelManager.CurLevelFunc:GetInitAutoFightState() else return false end end --获取主玩家战斗模式(强制、和平), 可能返回nil function BattleDataGetter.GetFightMode() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.target:GetFightMode() end end function BattleDataGetter.AutoFightIsSystemLevel() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.autoFight.IsSystemLevel else return false end end -- 系统级别的自动战斗不算是自动战斗 function BattleDataGetter.GetAutoFightState() if LogicUpdateManager._curEntity then return LevelManager:IsSyncLevel() and LogicUpdateManager._curEntity.components.autoFight.IsSyncAuto or LogicUpdateManager._curEntity.components.autoFight.IsStandaloneAuto else --logging.error(LTAG.ERROR, "HYW : 警告 :GetAutoFightState 查询时间过早,LogicUpdateManager._curEntity还未初始化(程序用,测试可忽略)") return false end end --这个方法只会返回有限的几个buff(BuffStates.lua写死的那些),使用的时候千万注意 --BuffStates代码不太优雅,据说是为了性能加的 function BattleDataGetter.CheckMainPlayerHasBuffState(buffID) if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:CheckHasBuffState(buffID) end end function BattleDataGetter.CheckCurEntityHasBuff(buffID) if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity:HasBuff(buffID) end end function BattleDataGetter.CheckHasBuff(entity,buffID) if entity then return entity:HasBuff(buffID) end end local function SetShowingBuffInfo(showingBuffInfo,buffObject,buffUpdateData) showingBuffInfo.BuffID = buffObject.BuffID --裸调以节省性能 showingBuffInfo.BuffInfoData = buffObject:GetData() showingBuffInfo.BuffLayer = buffUpdateData.BuffLayer showingBuffInfo.BuffTimer = FP.tonumberV1(buffUpdateData.BuffTimer) showingBuffInfo.SourceEntity = buffUpdateData.SourceEntity end local function CreateShowingBuffInfo(buffObject,buffUpdateData) local showingBuffInfo = {} SetShowingBuffInfo(showingBuffInfo,buffObject,buffUpdateData) return showingBuffInfo end local function ShouldShowBuff(buffObject,buffUpdateData) return buffUpdateData.BuffLayer > 0 and buffObject:IsShowingBuff() end local function AddShowingBuffInfoToListIfShould(buffObject,buffUpdateData,resultList) if ShouldShowBuff(buffObject,buffUpdateData) then local isExist = false for i,v in ipairs(resultList) do if buffObject.BuffID == v.BuffID and buffUpdateData.SourceEntity == v.SourceEntity then isExist = true SetShowingBuffInfo(v,buffObject,buffUpdateData) break end end if not isExist then table_insert(resultList,CreateShowingBuffInfo(buffObject,buffUpdateData)) end else for i,v in ipairs(resultList) do if buffObject.BuffID == v.BuffID and buffUpdateData.SourceEntity == v.SourceEntity then table_remove(resultList,i) break end end end end --resultList :info会被填充进入resultList里 function BattleDataGetter.GetShowingBuffInfoByEntityId(entityId, resultList) local entity = LogicUpdateManager._entityDic[entityId] if entity then for i, buffObject in ipairs(entity.components.buff.CurBuffObjectList) do if buffObject.BuffInfoData.IsRecordSource then if buffObject.BuffUpdateList then for i, buffUpdateData in ipairs(buffObject.BuffUpdateList) do AddShowingBuffInfoToListIfShould(buffObject, buffUpdateData, resultList) end end else if buffObject.BuffUpdateData then AddShowingBuffInfoToListIfShould(buffObject, buffObject.BuffUpdateData, resultList) end end end end end function BattleDataGetter.GetEntityBuffUpdateTimerByID(entity, buffID) if entity then local updateData = entity.components.buff:GetBuffUpdateData(buffID) if updateData then local updateBuffTime = updateData.BuffTimer return FP.tonumberV1(updateBuffTime) end end return 0 end function BattleDataGetter.GetHeroEntities() return LevelPlayerManager.GetHeroEntities() end -- 返回对面的武将ID包含副将 function BattleDataGetter.GetFirstEnemyHeroInfo() for _,playerID in ipairs(LevelPlayerManager.SyncPlayerIDList) do local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) if playerInfo.campID ~= LevelPlayerManager.MainEntityCampID then local armyInfo = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) if armyInfo then local heroAndAdjutantList = {} for i,heroArmyData in ipairs(armyInfo) do table.insert(heroAndAdjutantList, heroArmyData.HeroID) table.insert(heroAndAdjutantList, heroArmyData.AdjutantID) end return playerID, heroAndAdjutantList -- 单数为主将,偶数为副将 else return nil end end end return nil end --返回所有玩家当前激活的entity function BattleDataGetter.GetActiveEntityList() local entityList = {} for _,playerID in ipairs(LevelPlayerManager.SyncPlayerIDList) do local activeEntity = LevelPlayerManager.GetPlayerActiveEntity(playerID) -- 正在使用的entity if activeEntity then table.insert(entityList, activeEntity) end end return entityList end -- 返回自己的武将ID包含副将 function BattleDataGetter.GetFirstMyHeroInfo() for _,playerID in ipairs(LevelPlayerManager.SyncPlayerIDList) do local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) if playerInfo.campID == LevelPlayerManager.MainEntityCampID then local armyInfo = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) if armyInfo then local heroAndAdjutantList = {} for i,heroArmyData in ipairs(armyInfo) do table.insert(heroAndAdjutantList, heroArmyData.HeroID) table.insert(heroAndAdjutantList, heroArmyData.AdjutantID) end return heroAndAdjutantList -- 单数为主将,偶数为副将 else return nil end end end return nil end function BattleDataGetter.GetEntityByLevelItemID(id) local entity = nil for i, v in pairs(LogicUpdateManager._entityDic) do if v._logicInitData.OriginBornItemID == id then entity = v break end end return entity end function BattleDataGetter.GetMyPlayerArmy() return LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetMyOriginArmyHeroID() return LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(LuaConst.STANDALONE_PLAYER_PlayID)[1].HeroID end function BattleDataGetter.GetMyOriginArmyHeroID_ByIndex(index) local army = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(LuaConst.STANDALONE_PLAYER_PlayID)[index] return army and army.HeroID or 0 end function BattleDataGetter.GetMainCharacterInfo() return LevelPlayerManager.PlayersArmyTable[1] end function BattleDataGetter.GetTVTPointSpeed() return MultiplayManager.GetTVTPointSpeed() end function BattleDataGetter.GetMyCampID() return LevelPlayerManager.MainEntityCampID end function BattleDataGetter.IsCurEntity(entity) return LogicUpdateManager._curEntity == entity end --传入的entity是否是LogicUpdateManager._curEntity的载具 function BattleDataGetter.IsVehicleOfCurEntity(entity) return LogicUpdateManager._curEntity and entity == LogicUpdateManager._curEntity.components.drive.DriveEntity end function BattleDataGetter.IsMainPlayerManipulatingEntity(entity) return entity == BattleDataGetter.GetMainPlayerManipulatingEntity() end function BattleDataGetter.IsMainPlayerTeamLeader() return LevelPlayerManager.IsMainPlayerTeamLeader() end --可能返回nil function BattleDataGetter.GetTeamLeaderByTeamId(teamId) return LevelPlayerManager.GetTeamLeaderByTeamId(teamId) end function BattleDataGetter.IsSameTeamByEntities(entity_1, entity_2) return LevelPlayerManager.IsSameTeam(entity_1, entity_2) end function BattleDataGetter.IsSameGuildByEntities(entity_1, entity_2) if entity_1 and entity_2 then return LevelPlayerManager.IsSameGuild(entity_1, entity_2) else return false end end function BattleDataGetter.CanMainPlayerUseSkill(skillData) local can = false local targetEntity = nil if LogicUpdateManager._curEntity then --优先取DriveEntity的技能(载具的技能),然后才取自身_curEntity的 targetEntity = LogicUpdateManager._curEntity.components.drive.DriveEntity or LogicUpdateManager._curEntity can = targetEntity.components.skillBase:CanUseSkill(skillData) end return can end function BattleDataGetter.GetBarrierChosenIDByLevelID(levelID) return LevelManager.GetBarrierChosenIDByLevelID(levelID) end function BattleDataGetter.CheckCurLevelType(type) return LevelManager.CheckCurLevelType(type) end function BattleDataGetter.HasNextLevel() return LevelManager.HasNextLevel() end function BattleDataGetter.IsSyncLevel() return LevelManager.IsSyncLevel() end function BattleDataGetter.IsStandaloneBattleLevel() return LevelManager.IsStandaloneBattleLevel() end function BattleDataGetter.ShouldKeepSyncLevel() return LevelManager.ShouldKeepSyncLevel() end function BattleDataGetter.IsPVPLevel() return LevelManager.IsPVPLevel() end function BattleDataGetter.IsOneHeroLevel() return LevelManager.IsOneHeroLevel() end function BattleDataGetter.IsNormalLevel() return LevelManager.IsNormal() end function BattleDataGetter.IsOnlineTownLevel() return LevelManager.IsOnlineTown() end function BattleDataGetter.IsNoBattleLevel(levelType) return LevelManager.IsNoBattleLevel(levelType) end --是否显示国家头顶UI function BattleDataGetter.IsShowHeadUI_Country() return LevelManager.IsShowHeadUI_Country() end --是否显示势力头顶UI function BattleDataGetter.IsShowHeadUI_Guild() return LevelManager.IsShowHeadUI_Guild() end --是否显示称号头顶UI function BattleDataGetter.IsShowHeadUI_Title() return LevelManager.IsShowHeadUI_Title() end function BattleDataGetter.IsLevelShowHeadUI_Title(levelType) local featureData = DataSheetManager.LevelFeatureData:GetDataByLevelFeatureID(levelType) if featureData then return featureData.IsShowTitle end return false end function BattleDataGetter.IsWorldBossLevel() return LevelManager.IsSyncWorldBossLevel() end function BattleDataGetter.IsWarZoneWorldBossLevel() return LevelManager.IsWarZoneWorldBossLevel() end function BattleDataGetter.IsCountryEveningBossLevel() return LevelManager.IsCountryEveningBossLevel() end function BattleDataGetter.IsWorldBossTutorialLevel() return LevelManager.IsSyncWorldBossLevel() and LevelManager.CurLevelFunc:HasTutorialAssitRobot() end function BattleDataGetter.IsPracticeRobot(playerID) if not LevelManager.IsPracticeLevel() then return false end local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) return playerInfo.fighterType == LuaConst.BattleMemberType.Robot_Hero and playerInfo.isGuideRobot end function BattleDataGetter.IsSyncTeamPVP() return LevelManager.IsSyncTeamPVP() end function BattleDataGetter.IsSyncSolo() return LevelManager.IsSyncSolo() end function BattleDataGetter.IsGuildWarLevelType(levelType) return LevelManager.IsGuildWarLevelType(levelType) end function BattleDataGetter.IsGuildWarWaitingArea( ) return LevelManager.IsGuildWarWaitingArea() end function BattleDataGetter.IsGuildWarLevel() return LevelManager.IsGuildWarLevel() end function BattleDataGetter.IsGoldHeroCooperate() return LevelManager.IsGoldHeroCooperate() end function BattleDataGetter.IsSingleEscortTown() return LevelManager.IsSingleEscortTown() end function BattleDataGetter.IsDemonGodLevel() return LevelManager.IsDemonGodLevel() end function BattleDataGetter.IsFightThroneLevel() return LevelManager.IsFightThroneLevel() end --组队的场景 function BattleDataGetter.IsTeamLevel() if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamPVE) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncRebelStrike) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncTeamDifficultLevel) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncDigTeamPVE) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncPlanesEscort) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncWantedPVE) then return true end if BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncCountryPVP) then return true end return false end --是否是需要走NetManager的ResetReConnectState()流程的关卡 function BattleDataGetter.IsReconnectLevel() return LevelManager.IsStandaloneBattleLevel() --目前只有单机战斗关卡需要走NetManager的ResetReConnectState()流程 end function BattleDataGetter.IsTownLevel() return LevelManager.IsTown --为了节约性能,这里直接裸调用了 end function BattleDataGetter.IsSatelliteTown() return LevelManager.IsSatelliteTown() end function BattleDataGetter.IsMonsterTestLevel() return LevelManager.IsMonsterTest() end function BattleDataGetter.IsFightThroneTown(levelType) return LevelManager.IsFightThroneTown(levelType) end function BattleDataGetter.IsDragonArteryType() return LevelManager.IsDragonArteryType() end --- 是否是观战状态 function BattleDataGetter.IsInLevelWatchBattle() return LevelManager.IsInLevelWatchBattle() end --是否是回放 function BattleDataGetter.IsReplayBattle() return LevelManager.IsReplayBattle() end -- 技能面板不可用 function BattleDataGetter.IsForbidSkillBtnView() return LevelManager.IsReplayBattle() or LevelManager.IsInLevelWatchBattle() end function BattleDataGetter.IsDragonArteryLevel() return LevelManager.IsDragonArteryLevel() end function BattleDataGetter.IsCityWarLevel() return LevelManager.IsCityWarLevel() end function BattleDataGetter.IsCityWarMainLevel() return LevelManager.IsCityWarMainLevel() end function BattleDataGetter.IsCityWarSideLevel() return LevelManager.IsCityWarSideLevel() end function BattleDataGetter.IsCityWarFirstStage() return LevelManager.IsCityWarFirstStage() end function BattleDataGetter.IsCityWarSecondStage() return LevelManager.IsCityWarSecondStage() end function BattleDataGetter.IsSyncCityWarMainWaitingArea() return LevelManager.IsSyncCityWarMainWaitingArea() end function BattleDataGetter.IsSyncCityWarSideWaitingArea() return LevelManager.IsSyncCityWarSideWaitingArea() end function BattleDataGetter.IsCityWarWaitingLevel() return BattleDataGetter.IsSyncCityWarMainWaitingArea() or BattleDataGetter.IsSyncCityWarSideWaitingArea() end function BattleDataGetter.IsCityWarStatue(entity) return LevelManager.CurLevelFunc:IsStatue(entity) end function BattleDataGetter.IsPayToReviveAtCurrentPlaceLevel() return BattleDataGetter.IsDragonArteryLevel() end --是否有自动复活开关 function BattleDataGetter.IsShowAutoReviveLevel() return BattleDataGetter.CheckCurLevelType(LuaConst.LevelType.SyncCountryEveningBoss) end --关卡是否开启自动复活 function BattleDataGetter.GetIsAutoRevive(level) local dict = PersistentData.PlayerData:Get(Const_AutoRevive_Key) if dict then return dict[level] == true end return false end function BattleDataGetter.SetIsAutoRevive(level, value) local dict = PersistentData.PlayerData:Get(Const_AutoRevive_Key) if dict == nil then dict = {} end dict[level] = value PersistentData.PlayerData:Set(Const_AutoRevive_Key, dict, true) end function BattleDataGetter.IsAllHeroJoinBattle() return LevelManager.CurLevelFunc:IsAllHeroJoinBattle() end function BattleDataGetter.IsFightBegin() return LogicUpdateManager.FightBegin end function BattleDataGetter.IsLevelPause() return LevelManager.IsLevelPause() end function BattleDataGetter.IsBelongCommonRival(playerID,checkAcid) if not checkAcid then return false end local rivalType = LevelManager.CurLevelFunc:GetRivalType(playerID, checkAcid) return rivalType == LuaConst.RivalType.Common end function BattleDataGetter.IsBelongSwornRival(playerID,checkAcid) if not checkAcid then return false end local rivalType = LevelManager.CurLevelFunc:GetRivalType(playerID, checkAcid) return rivalType == LuaConst.RivalType.Sworn end function BattleDataGetter.GetLevelID() if LevelManager.GetCurInfoData() then return LevelManager.GetCurInfoData().LevelID end end function BattleDataGetter.GetLevelClientIntermediateParamsBytes() if LevelManager.CurLevelFunc then return LevelManager.CurLevelFunc:GetClientIntermediateParamsBytes() end end function BattleDataGetter.GetBattleInfo() return LevelManager.CurLevelFunc:GetBattleInfo() end function BattleDataGetter.GetLevelInfoData() return LevelManager.GetCurInfoData() end --返回速度大于0的怪物的数量,这样会过滤掉载具、可破坏物(木箱炸药桶等)、可交互物(宝箱等)、增益物体(酒、包子等)。大多数情况返回的数量跟参与战斗单位数量一致。 --仅限视图和系统调用 function BattleDataGetter.GetSpdNoZeroMonsterCount() local count = 0 for i,v in ipairs(LogicUpdateManager.EntityList_Normal) do if v:IsMonster() and v:IsAlive() and v:IsActive() and v:GetOriginEntity() == v and v:GetAttrValueNum("spd") > 0 and not v.components.aiBase:IsRouting() then if BattleDataGetter.GetMyCampID() ~= v:GetCampID() then count = count + 1 end end end return count end function BattleDataGetter.GetCatchSoundCount(soundName) local count = 0 if soundName and soundName ~= "No" then --策划约定:配置了"No"的,不播声音;并且配置了""空字符串的,播默认声音 for i,v in ipairs(LogicUpdateManager.EntityList_Normal) do if v:IsMonster() and v:IsAlive() and v:IsActive() and v:GetOriginEntity() == v and not v.components.aiBase:IsRouting() and v.components.base.CurMonsterFeature.CatchSound == soundName then if BattleDataGetter.GetMyCampID() ~= v:GetCampID() then count = count + 1 end end end end return count end function BattleDataGetter.GetMonsterShowRangeSqr() return LevelManager.CurLevelFunc:GetMonsterShowRangeSqr() end --玩家死亡主将次数 function BattleDataGetter.GetPlayerDeadHeroCount(playerID) return LevelManager.CurLevelFunc and LevelManager.CurLevelFunc:GetPlayerDeadHeroCount(playerID) or 0 end --获取所有玩家死亡主将次数 function BattleDataGetter.GetAllPlayerDeadHeroCount() return LevelManager.CurLevelFunc:GetAllPlayerDeadHeroCount() end --返回玩家英雄被秒杀的次数 function BattleDataGetter.GetPlayerOnePunchKilledCount(playerID) local count = 0 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then count = playerStatistic[LuaConst.EStatisticType.OnePunchKilledNum] or count end return count end --获取玩家整场最小的复仇间隔帧数 function BattleDataGetter.GetPlayerMinRevengeIntervalFrame(playerID) local frame = 9999999 local playerStatistic = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if playerStatistic then frame = playerStatistic[LuaConst.EStatisticType.MinRevengeInterval] or frame end return frame end --返回entityID对应的boss的优先级, 没有active的boss会返回-1 function BattleDataGetter.GetBossPriority(entityID) return LevelManager.CurLevelFunc:GetBossPriority(entityID) end --返回boss剩余血量百分比,1代表100%,0.5代表50%。 可能返回nil function BattleDataGetter.GetBossHpLeftPercent() if LevelManager.CurLevelFunc and LevelManager.CurLevelFunc.GetBossHpLeftPercent then return LevelManager.CurLevelFunc:GetBossHpLeftPercent() end end --返回主Boss(优先级最高的boss的Entity) function BattleDataGetter.GetMainBoss() return LevelManager.CurLevelFunc:GetMainBoss() end function BattleDataGetter.GetSyncTimelineIndex() return LevelManager.CurLevelFunc:GetSyncTimelineIndex() end function BattleDataGetter.GetLeftBattleTimeFrame() return LevelManager.CurLevelFunc:GetLeftBattleTimeFrame() end --获取当前关卡的耗时 function BattleDataGetter.GetSummaryTime() return FP.tonumberV1(LevelManager.GetSummaryTime()) end --获取前置关卡的耗时 function BattleDataGetter.GetPassTimeOfPrevious() return LevelManager.CurLevelFunc and LevelManager.CurLevelFunc:GetPassTimeOfPrevious() or 0 end function BattleDataGetter.GetLevelPassTime() return FP.tonumberV1(LevelItemManager.GetLevelPassTime()) end function BattleDataGetter.GetRemainTime() return FP.tonumberV1(LevelItemManager.GetLevelRemainTime()) end -- 获取每回合剩余时间(单位秒) function BattleDataGetter.GetRoundRemainTime() return FP.tonumberV1(LevelManager.CurLevelFunc:GetRoundRemainTime()) end function BattleDataGetter.GetBattleEndTime() return LevelManager.GetBattleEndTime() end --返回切将CD,单位毫秒 function BattleDataGetter.GetSwitchHeroCD() return LevelManager.GetSwitchHeroCD() end function BattleDataGetter.GetShowProgressInfo() local time = LevelItemManager.Global:GetShowProgressTimer() if time then local nameStr, isGrow = LevelItemManager.Global:GetShowProgressInfo() return FP.tonumberV1(time), nameStr, isGrow end end function BattleDataGetter.GetLevelItemByID(itemID) return LevelItemManager.GetItemByID(itemID) end function BattleDataGetter.GetNpcIdByLevelItemInfo(levelID, levelItemID) local levelItem = LevelItemManager.GetLevelItem(levelID, levelItemID) if levelItem then if levelItem.LevelItemType == LuaConst_LevelItemType_Npc then return levelItem.NpcID end else return nil end end function BattleDataGetter.GetLevelItemByMapID_LevelItemID(mapID, levelItemID) return LevelItemManager.GetLevelItem(mapID,levelItemID) end function BattleDataGetter.GetLevelItemByNpcID(npcID) local mapId = DataSheetManager.NpcData:GetDataByID(npcID).MapID return LevelItemManager.GetLevelItemByNpcID(mapId,npcID) end function BattleDataGetter.GetBornItemData(entity) return LevelItemManager.GetBornItemData(entity) end function BattleDataGetter.GetBornItemListOfCampID(campID) return LevelManager.CurLevelFunc:GetBornItemListOfCampID(campID) end function BattleDataGetter.GetItemByID(itemID) return LevelItemManager.GetItemByID(itemID) end function BattleDataGetter.GetMapItemIDIter() return LevelItemManager.Global:GetMapItemIDIter() end function BattleDataGetter.GetMoveFromSceneInfo(sceneInfo) return LevelPlayerManager.GetMoveFromSceneInfo(sceneInfo) end function BattleDataGetter.GetCurLine() return SyncMoveManager.CurLine end function BattleDataGetter.GetLevelEvaluationList() return LevelEvaluationManager.EvaluationList end function BattleDataGetter.IsTaskChangeAvatarState() return PlayerInfoManager.IsTaskChangeAvatarState() end --传入主将entity,返回主将和副将的神兵是否激活 function BattleDataGetter.IsMyEntityMagicWeaponActive() return LevelPlayerManager.IsEntityMagicWeaponActive(LogicUpdateManager._curEntity) end --gsA : 玩家战力 、 进攻方战力 --gsD : 副本推荐战力 、 防守方战力 function BattleDataGetter.GetGsSubjugateSection(gsA,gsD,levelType) local FormulaCalculator = require"Battle/Logic/Missile/FormulaCalculator" return FormulaCalculator.CalculateGsSubjugateSection(gsA,gsD,levelType) end --返回伤害列表 function BattleDataGetter.GetDamageList() return LevelManager.CurLevelFunc:GetDamageList() end function BattleDataGetter.GetDamageOfPlayer(playerID) return LevelManager.CurLevelFunc:GetDamageOfPlayer(playerID) end ----队伍占领排名列表,按名次排序,元素是table = {teamId, occupyFrameCount, teamRecordList, teamLeaderName, hasTeam, guildName, guildEmblemContent, guildEmblemFrame} function BattleDataGetter.GetOccupyRankList(needGuildInfo) if needGuildInfo then LevelManager.CurLevelFunc:TryFillTeamLeaderInfoOfRankList() end return LevelManager.CurLevelFunc:GetOccupyRankList() end ----玩家占领信息列表 元素是table = {playerID, occupyFrameCount, teamId} --occupyFrameCount是占领时长(单位:帧数) function BattleDataGetter.GetOccupyRecordByPlayerID(playerID) return LevelManager.CurLevelFunc:GetOccupyRecordByPlayerID(playerID) end --返回当前占领boss的玩家的playerID,可能返回nil,表示无人占领 function BattleDataGetter.GetCurOccupierPlayerID() return LevelManager.CurLevelFunc.curOccupierPlayerID end --返回boss死亡时最后占领boss的玩家playerID,可能返回nil,表示无人占领 function BattleDataGetter.GetFinalOccupierPlayerID() if BattleDataGetter.GetCurLeveLFunc() then return BattleDataGetter.GetCurLeveLFunc().finalOccupierPlayerID end return nil end --返回当前占领boss的玩家的占领record,可能返回nil,表示无人占领 function BattleDataGetter.GetCurOccupierPlayerRecord() if LevelManager.CurLevelFunc.curOccupierPlayerID then return LevelManager.CurLevelFunc:GetOccupyRecordByPlayerID(LevelManager.CurLevelFunc.curOccupierPlayerID) end end function BattleDataGetter.GetMyDamageToBoss() if LevelManager.CurLevelFunc.dmgToBoss then return FP.tonumberV1(LevelManager.CurLevelFunc.dmgToBoss) end return 0 end function BattleDataGetter.GetLevelMainMission(fakeAimListContainer) if LogicUpdateManager._curEntity then local missionHintLevelItemId = LogicUpdateManager._curEntity.ExpEntity.components.ui.missionHintLevelItemId if missionHintLevelItemId then local missionLevelItem = LevelItemManager.GetItemByID(missionHintLevelItemId, LuaConst.LevelItemType.Mission) if missionLevelItem then return missionLevelItem, missionLevelItem:GetFakeAimList(fakeAimListContainer) end end end return LevelItemManager.Global:GetCurMainMission() end function BattleDataGetter.GetIndexByArmyPos_Self(armyPos) return LevelPlayerManager.GetIndexByArmyPos(LevelPlayerManager.MyPlayerIDInRoom,armyPos) end function BattleDataGetter.GetHeroArmyPosByHeroID(playerID, heroID) return LevelPlayerManager.GetHeroArmyPos(playerID, heroID) end --返回军团战的战场信息 function BattleDataGetter.GetGuildWarBattleInfo_MySelf() return LevelManager.CurLevelFunc:GetPlayerBattleInfo(LevelPlayerManager.MyPlayerIDInRoom) --return killNum, continuousKilling, assiantNum, seriousInjury, occupycamp, killBoss, wallDemage, handInResource end --返回军团战的战场信息:我上交的资源数 function BattleDataGetter.GetGuildWarHandInResourceAmount_MySelf() return LevelManager.CurLevelFunc:GetHandInResourceAmountOfPlayer(LevelPlayerManager.MyPlayerIDInRoom) end -- 返回军团战的战场信息 - 每个主将的kda function BattleDataGetter.GetGuildWar_MySelfHeroKDA() return LevelManager.CurLevelFunc:GetPlayer_HeroKDA(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetGuildWar_MySelfHeroRelaxKDA() return LevelManager.CurLevelFunc:GetPlayer_HeroRelaxKDA(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetGuildWar_MySelfHeroRelaxAssist() local statisticInfo = LevelManager.CurLevelFunc.PlayerStatisticDic[LevelPlayerManager.MyPlayerIDInRoom] if statisticInfo then return statisticInfo[LuaConst.EStatisticType.RelaxAssistHeroKillNum] end return nil end function BattleDataGetter.GetGuildWar_HeroRelaxKillNum(playerID) local statisticInfo = LevelManager.CurLevelFunc.PlayerStatisticDic[playerID] if statisticInfo then return statisticInfo[LuaConst.EStatisticType.RelaxHeroKillNum] end return nil end -- 返回军团战 本小队的 出战信息 function BattleDataGetter.GetGuildWar_MyTeamInfo() local result = {} local myTeamID = LogicUpdateManager._curEntity:GetTeamID() local playerIDList = LevelPlayerManager.GetPlayerIDListOfTeam(myTeamID) for i,playerID in ipairs(playerIDList) do local info ,acid = BattleDataGetter.GetGuildWar_TeamInfo(playerID) result[acid] = info end return result end -- 返回军团战 playerID 出战信息 function BattleDataGetter.GetGuildWar_TeamInfo(playerID) local info = {playerID = playerID, heroID = {} ,reviveTime = {}, totalTime = {} ,hpPercent = 1} local firstInfo, secondInfo, thirdInfo = LevelManager.CurLevelFunc:GetGuildWarReviveInfo(playerID) -- 当玩家没active时,这三数据是nil local first = firstInfo and firstInfo.ReviveFrame or 0 local second = secondInfo and secondInfo.ReviveFrame or 0 local third = thirdInfo and thirdInfo.ReviveFrame or 0 local army = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) for _,armyInfo in ipairs(army) do local heroID = armyInfo.HeroID table.insert(info.heroID ,heroID) if firstInfo and firstInfo.heroID == heroID then table.insert(info.reviveTime ,first) table.insert(info.totalTime ,firstInfo and firstInfo.ReviveTotalTime or 0) elseif secondInfo and secondInfo.heroID == heroID then table.insert(info.reviveTime ,second) table.insert(info.totalTime ,secondInfo and secondInfo.ReviveTotalTime or 0) elseif thirdInfo and thirdInfo.heroID == heroID then table.insert(info.reviveTime ,third) table.insert(info.totalTime ,thirdInfo and thirdInfo.ReviveTotalTime or 0) end end local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local activeEntity = LevelPlayerManager.GetPlayerActiveEntity(playerID) -- 正在使用的entity if activeEntity then info.hpPercent = FP.tonumberV1(activeEntity.components.attr:HitPointPercents()) else info.hpPercent = 1 end return info, playerInfo.acid end -- 返回军团战 playerID 出战信息 function BattleDataGetter.GetSelectOneReviveInfo(playerID) local info = {heroID = {} ,reviveTime = {}, totalTime = {} ,hpPercent = 1} local firstInfo, secondInfo, thirdInfo = LevelManager.CurLevelFunc:GetSelectOneTypeReviveInfo(playerID) -- 当玩家没active时,这三数据是nil local first = firstInfo and firstInfo.ReviveFrame or 0 local second = secondInfo and secondInfo.ReviveFrame or 0 local third = thirdInfo and thirdInfo.ReviveFrame or 0 local army = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) for _,armyInfo in ipairs(army) do local heroID = armyInfo.HeroID table.insert(info.heroID ,heroID) if firstInfo and firstInfo.heroID == heroID then table.insert(info.reviveTime ,first) table.insert(info.totalTime ,firstInfo and firstInfo.ReviveTotalTime or 0) elseif secondInfo and secondInfo.heroID == heroID then table.insert(info.reviveTime ,second) table.insert(info.totalTime ,secondInfo and secondInfo.ReviveTotalTime or 0) elseif thirdInfo and thirdInfo.heroID == heroID then table.insert(info.reviveTime ,third) table.insert(info.totalTime ,thirdInfo and thirdInfo.ReviveTotalTime or 0) end end local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local activeEntity = LevelPlayerManager.GetPlayerActiveEntity(playerID) -- 正在使用的entity if activeEntity then info.hpPercent = FP.tonumberV1(activeEntity.components.attr:HitPointPercents()) else info.hpPercent = 1 end return info, playerInfo.acid end function BattleDataGetter.GetHeadInfoByPlayerID_Normal(playerID) local result = {} local entityList = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) local switchHeroCD = entityList[1].components.record.SwitchTimer -- 切将剩余时间 local switchTotalTime = DataSheetManager.ConstData:GetDataByID("SwitchHeroCD").IntValue for i,entity in ipairs(entityList) do local heroID = entity:GetCharacterID() local info = {heroID = heroID ,switchHeroCD = switchHeroCD, switchTotalTime = switchTotalTime ,hpPercent = 1 ,adjutantCD = nil,adjutantMaxCD = nil} info.hpPercent = FP.tonumberV1(entity.components.attr:HitPointPercents()) local adjutantComponent = entity.components.adjutant info.adjutantCD = adjutantComponent.AdjutantCD info.adjutantMaxCD = adjutantComponent.TotalCD table.insert(result ,info) end return result end function BattleDataGetter.GetHeadInfoByPlayerID_SelectOneRevive(playerID) local curFrame = LogicUpdateManager._clientHandleFrame local perFrameTime = LuaConst.TimeSpan local result = {} local firstInfo, secondInfo, thirdInfo = LevelManager.CurLevelFunc:GetSelectOneTypeReviveInfo(playerID) -- 当玩家没active时,这三数据是nil local firstReviveFrame = firstInfo and firstInfo.ReviveFrame local secondReviveFrame = secondInfo and secondInfo.ReviveFrame local thirdReviveFrame = thirdInfo and thirdInfo.ReviveFrame --local army = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) local entityList = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) if entityList then for i,entity in ipairs(entityList) do local heroID = entity:GetCharacterID() local info = {heroID = heroID ,reviveTime = nil, reviveTotalTime = nil ,hpPercent = 1 ,adjutantCD = nil,adjutantMaxCD = nil} if firstInfo and firstInfo.heroID == heroID then info.reviveTime = firstReviveFrame and (firstReviveFrame - curFrame) * perFrameTime or 0 info.reviveTotalTime = firstInfo.ReviveTotalTime or 0 elseif secondInfo and secondInfo.heroID == heroID then info.reviveTime = secondReviveFrame and (secondReviveFrame - curFrame) * perFrameTime or 0 info.reviveTotalTime = secondInfo.ReviveTotalTime or 0 elseif thirdInfo and thirdInfo.heroID == heroID then info.reviveTime = thirdReviveFrame and (thirdReviveFrame - curFrame) * perFrameTime or 0 info.reviveTotalTime = thirdInfo.ReviveTotalTime or 0 end info.hpPercent = FP.tonumberV1(entity.components.attr:HitPointPercents()) local adjutantComponent = entity.components.adjutant info.adjutantCD = adjutantComponent.AdjutantCD info.adjutantMaxCD = adjutantComponent.TotalCD table.insert(result ,info) end else -- 说明数据来了 ,但是entity还没创建 local armyDatas = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(playerID) if armyDatas then for i,heroArmyData in ipairs(armyDatas) do local heroID = heroArmyData.HeroID local info = {heroID = heroID ,reviveTime = nil, reviveTotalTime = nil ,hpPercent = 1 ,adjutantCD = 1,adjutantMaxCD = 1} table.insert(result ,info) end else logging.error(LTAG.ERROR, "[UI]:在获取玩家头像时,没有找到该玩家的info。 playerID = ", playerID) end end return result end --返回number function BattleDataGetter.GetMainEntitySkillEnegy(skillData) if LogicUpdateManager._curEntity then return FP.tonumberV1(LogicUpdateManager._curEntity.components.skillBase:GetSkillEnegy(skillData)) end end function BattleDataGetter.GetCurMoveSpeed(entity) local cartSpeed = TownCartManager.TryGetCurSpeed(entity._logicInitData.Acid) if cartSpeed then return cartSpeed * LuaConst.LogicFrameRate --- 镖车跟随中的速度 end if entity:CheckHasBuffState(LuaConst.SpecialBuffs.InRiding) then return FP.tonumberV1(entity.components.attr:GetAttrValue(LuaConst.AttrType.ridespd)) ---骑马跑步 else return FP.tonumberV1(entity.components.attr:GetAttrValue(LuaConst.AttrType.spd)) --- 不骑马跑步 end end function BattleDataGetter.GetHpPercent(entity) return FP.tonumberV1(entity.components.attr:HitPointPercents()) end function BattleDataGetter.GetHpAndPCInfo(entity) local hp = FP.tonumberV1(entity:GetHp()) local maxHp = FP.tonumberV1(entity:GetMaxHp()) local pc = FP.tonumberV1(entity.components.attr.pc) return hp, maxHp, pc end --获取采集数量 function BattleDataGetter.GetCollectAmountOfPlayerByCollectKey(collectKey, playerID) if LevelManager.CurLevelFunc.GetCollectAmountOfPlayerByCollectKey then playerID = playerID or BattleDataGetter.GetCurPlayerID() return LevelManager.CurLevelFunc:GetCollectAmountOfPlayerByCollectKey(playerID, collectKey) else return 0 end end --大乱斗,获取entity战旗数量 function BattleDataGetter.GetFlagAmountOfPlayer(entity) if entity:IsHero() and LevelManager.CurLevelFunc.GetFlagAmountOfPlayer then return LevelManager.CurLevelFunc:GetFlagAmountOfPlayer(entity:GetPlayerID()) end return 0 end --大乱斗,获取自己的战旗数量 function BattleDataGetter.GetMyFlagAmount() local num = 0 if LevelManager.CurLevelFunc.GetFlagAmountOfPlayer then num = LevelManager.CurLevelFunc:GetFlagAmountOfPlayer(BattleDataGetter.GetCurPlayerID()) end return num end --大乱斗,获取自己的战旗是否是随机的 function BattleDataGetter.GetMyFlagIsRandom() local isRandom = false if LevelManager.CurLevelFunc.GetFlagIsRandom then isRandom = LevelManager.CurLevelFunc:GetFlagIsRandom(BattleDataGetter.GetCurPlayerID()) end return isRandom end function BattleDataGetter.GetBattleRoomID() local bRoomID = MultiplayManager.GetVerifyRoomID() return bRoomID or "" end -- 获取对战房间号 function BattleDataGetter.GetBattleGRoomID() local gRoomId = MultiplayManager.GetKCPConnectInfo().gRoomId return gRoomId end function BattleDataGetter.GetBattleServerID() local serverID = MultiplayManager.GetServerID() if serverID then return serverID end return "" end function BattleDataGetter.GetBattleBranchLine() return LevelManager.GetLineId() end function BattleDataGetter.GetCampName1() return LevelManager.campName1 end function BattleDataGetter.GetCampName2() return LevelManager.campName2 end --------------引用获取(谨慎使用)------------------------------------------------- function BattleDataGetter.GetCurEntity() return LogicUpdateManager._curEntity end --返回主玩家正在操作的Entity,如果正在驾驶载具就返回载具,否则返回_curEntity function BattleDataGetter.GetMainPlayerManipulatingEntity() return LogicUpdateManager._curEntity and (LogicUpdateManager._curEntity.components.drive.DriveEntity or LogicUpdateManager._curEntity) end --谨慎使用,只允许调用list里的entity的Get方法,不允许set、改变entity function BattleDataGetter.GetEntityDic() return LogicUpdateManager._entityDic end --谨慎使用,只允许调用返回值的entity的Get方法,不允许set、改变entity function BattleDataGetter.GetEntityByEntityID(entityID) return LogicUpdateManager._entityDic[entityID] end function BattleDataGetter.GetHeroInHeroEntityTableByIndex(playerID,index) if LevelPlayerManager.PlayersEntityTable[playerID] then return LevelPlayerManager.PlayersEntityTable[playerID][index] end end --返回玩家当前的的Hero列表,只允许调用返回值的entity的Get方法,不允许set、改变entity function BattleDataGetter.GetHeroEntityTable(playerID) return LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) end function BattleDataGetter.GetMyHeroEntityTable() return LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetHeroModelIDByHeroID(heroID) local heroData = DataSheetManager.HeroData:GetDataByID(heroID) if heroData then return heroData.ModelID end return 0 end --获取当前的被我驾驶的载具 function BattleDataGetter.GetCurEntityDriveEntity() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.drive:GetDrivedEntity() end end --判断entity是否属于自己 function BattleDataGetter.CheckEntityBelongsToMyself(entityID) local entityTab = BattleDataGetter.GetMyHeroEntityTable() if entityTab then for _,v in ipairs(entityTab) do if v.EntityID == entityID then return true end end end return false end --获取战斗内player的势力显示参数 function BattleDataGetter.GetGuildParam(playerID) local sourceData = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) if sourceData then return sourceData.guildName, sourceData.guildEmblemFrame, sourceData.guildEmblemContent, sourceData.guildJob, sourceData.guildIdentity end return nil end --判断entity是否属于该player function BattleDataGetter.CheckEntityBelongsToPlayer(entityID,playerID) local entityTab = BattleDataGetter.GetHeroEntityTable(playerID) if entityTab then for _,v in ipairs(entityTab) do if v.EntityID == entityID then return true end end end return false end function BattleDataGetter.GetPlayerActiveEntity(playerID) return LevelPlayerManager.GetPlayerActiveEntity(playerID) end --返回武将是否觉醒 --heroId没传默认用当前激活的entity function BattleDataGetter.GetHeroIsAwaken(playerID, heroId) if LevelManager.CurLevelFunc.GetHeroIsAwaken then return LevelManager.CurLevelFunc:GetHeroIsAwaken(playerID, heroId) end local tarEntity if heroId then local entityList = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) if entityList then for _, entity in ipairs(entityList) do if entity:GetCharacterID() == heroId then tarEntity = entity break end end end else tarEntity = BattleDataGetter.GetPlayerActiveEntity(playerID) end if tarEntity then local info = LevelPlayerManager.GetPlayerArmyData(playerID, tarEntity) if info then return info.mainHeroAwaken, info.viceHeroAwaken end end return false, false end function BattleDataGetter.PlayerIsOnline(playerID) return LevelPlayerManager.IsOnline(playerID) end function BattleDataGetter.GetRewardChanceLeft(playerID) if LevelManager.CurLevelFunc.GetRewardChanceLeft then return LevelManager.CurLevelFunc:GetRewardChanceLeft(playerID) else return 0 end end -- 获取当前玩家的执行命令交互的entity(即当前UI可操作交互物) function BattleDataGetter.GetCurEntityCurCmdInteractEntity() if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.interact:GetCmdOpInteractEntity() end return nil end ------------------ end ------------------------------------------------- --region ***************** 世界boss ******************* ---@return 协助目标的名字和伤害排名 --如果我是助战者,则返回我的助战目标玩家的名字和他队伍的伤害排名。如果没有造成伤害,则排名返回-1 function BattleDataGetter.GetWorldBossAssistantTargetRankingByPlayerID(playerID) local myPlayerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) if myPlayerInfo.assisAimAcid and myPlayerInfo.assisAimAcid ~= "" then local aimPlayerInfo = LevelPlayerManager.GetPlayerInfoByAcid(myPlayerInfo.assisAimAcid) if aimPlayerInfo then return aimPlayerInfo.name, LevelManager.CurLevelFunc:GetDamageRankIndexByPlayerID(aimPlayerInfo.playerID), playerID else logging.error(LTAG.ERROR, "HYW : 警告!协助目标为空! acid : ", myPlayerInfo.assisAimAcid) end end end --如果我是助战者,则返回我的助战目标玩家的[名字]、[队伍的伤害排名](如果没有造成伤害,则排名返回-1)、[playerID]。 function BattleDataGetter.GetMyWorldBossAssistAimRankInfo() return BattleDataGetter.GetWorldBossAssistantTargetRankingByPlayerID(LevelPlayerManager.MyPlayerIDInRoom) end ---@return table 伤害排行List(结构:名字+军团名+伤害数值) function BattleDataGetter.GetWorldBossRank() local damageList = LevelManager.CurLevelFunc:GetDamageList(LevelPlayerManager.MyPlayerIDInRoom) local rankList = {} local rankInfo local teamLeaderGuildName local teamLeaderPlayerID local hasTeam = true local teamLeaderPlayerInfo for i,damageRecord in ipairs(damageList) do teamLeaderPlayerID = nil hasTeam = true teamLeaderGuildName = "" teamLeaderPlayerInfo = nil -- old↓↓↓↓↓↓↓↓↓↓↓↓↓ 代码有点问题,遍历damageRecord.entityList寻找teamLeaderPlayerID是不对的,比如teamLeader没造成伤害,就找不到 -- for j,entity in ipairs(damageRecord.entityList) do -- if entity:HasTeam() then -- if entity:IsTeamLeader() then -- teamLeaderPlayerID = entity:GetPlayerID() -- break -- end -- else -- hasTeam = false -- --只要有任意单位没有队伍,那么就代表所有单位都没有队伍,是个人 -- teamLeaderPlayerID = entity:GetPlayerID() -- break -- end -- end -- old↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ -- new↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ local anyEntity = damageRecord.entityList[1] --任取一个entity就可以获取所有信息 hasTeam = anyEntity:HasTeam() if hasTeam then local teamLeader = LevelPlayerManager.GetTeamLeaderByTeamId(damageRecord.teamId) if teamLeader then teamLeaderPlayerID = teamLeader:GetPlayerID() end else teamLeaderPlayerID = anyEntity:GetPlayerID() end -- new↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ local rankInfo = nil if teamLeaderPlayerID then teamLeaderPlayerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(teamLeaderPlayerID) teamLeaderGuildName = teamLeaderPlayerInfo.guildName rankInfo = { teamLeaderName = damageRecord.teamLeaderName, guildName = teamLeaderGuildName, hasTeam = hasTeam, damage = damageRecord.damage and FP.tonumberV1(damageRecord.damage) or 0, guildEmblemContent = teamLeaderPlayerInfo.guildEmblemContent, guildEmblemFrame = teamLeaderPlayerInfo.guildEmblemFrame, countryId = teamLeaderPlayerInfo.countryId, } else --正常情况,如果队长没进战斗,就拿不到队长的playerInfo和playerID --此时依然要显示结算条目,只是把工会信息留空 rankInfo = { teamLeaderName = anyEntity:GetTeamLeaderName(), --guildName, --队长没进战斗,guildName信息拿不到,留空 hasTeam = hasTeam, damage = damageRecord.damage and FP.tonumberV1(damageRecord.damage) or 0, --guildEmblemContent,--队长没进战斗, guildEmblemContent 信息拿不到,留空 --guildEmblemFrame,--队长没进战斗, guildEmblemFrame 信息拿不到,留空 --countryId,--队长没进战斗,countryId 信息拿不到,留空 } end if rankInfo then table.insert(rankList, rankInfo) end end return rankList end ---@return table 协助者列表(名字+击杀数量) 可能返回nil function BattleDataGetter.GetWorldBossAssistantListByPlayerID(playerID) local assistantList local myPlayerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) if myPlayerInfo and not myPlayerInfo.isQuitted then for k,v in pairs(LevelPlayerManager.PlayersArmyTable) do -- pairs safe local playerInfo = v.playerInfo if playerInfo.assisAimAcid == myPlayerInfo.acid then if playerInfo.isActived and not playerInfo.isQuitted then assistantList = assistantList or {} table.insert(assistantList, {playerID = playerInfo.playerID, assistantName = playerInfo.name, killCount = LevelManager.CurLevelFunc:GetPlayerInvolvedKillNum(playerInfo.playerID) or 0 }) end end end if assistantList then table.sort(assistantList, function(a, b) return a.playerID < b.playerID end) end --else --正常情况,有时候查询者传进来的playerID为非法值,或者查询时机过早就会为空 end return assistantList end --endregion ***************** 世界boss ******************* function BattleDataGetter.IsEnemyEntity(entityA,entityB) if entityA and entityB then return CampManager.IsEnemyEntity(entityA,entityB) end end --loading过程中,不是在加载场景资源这一步 --应为加载场景是异步加载,在进行一些逻辑判断的时候需要考虑跳过这一步 function BattleDataGetter.IsAfterEnterLevelStep() return LevelManager._levelLogicData.LogicLoadingStep >= LuaConst.Enum_LoadingStep.EnterLevel end --还没开始加载场景 function BattleDataGetter.IsNotStartLoadingScene() return LevelManager._levelLogicData.LogicLoadingStep == LuaConst.Enum_LoadingStep.None end --获取entity的国家id function BattleDataGetter.GetEntityCountryInfo(entity) local sourceData if entity._logicInitData.isSyncMove then sourceData = SyncMoveManager.GetTownRoleInfoByAcid(entity._logicInitData.Acid) else sourceData = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(entity:GetPlayerID()) end if sourceData then return sourceData.countryId, sourceData.countryJobId end return nil end -- 押镖 :获取自己范围内的镖车列表 function BattleDataGetter.GetCartsListAroundMe(radiusSqr, outList) if not CTL.GuildEscort.IsTransport() then TownCartManager.GetCartsListByRange(LogicUpdateManager._curEntity, radiusSqr, outList) table.sort(outList, function(a, b) return a.info.cartInfo.quality > b.info.cartInfo.quality end) end end -- 押镖 :获取自身正在押送的镖车等级 function BattleDataGetter.GetGuildEscortQuality() return LogicUpdateManager._curEntity.ExpEntity:GetGuildEscortQuality() end -- 押镖 :获取自身是否正在跟随镖车 function BattleDataGetter.SelfIsFollowNPC() return TownCartManager.AcidIsFollowingNPC(BattleDataGetter.GetAcID()) end -- 押镖 :停止跟随 function BattleDataGetter.StopFollowNPC(isNoTask) SyncMoveManager.StopFollowNPC(LogicUpdateManager._curEntity, isNoTask) end -- 1=前军主将, 3=中军主将 5=后军主将 function BattleDataGetter.GetHeroKillNumByPos(playerID, heroPos) return LevelManager.CurLevelFunc:GetHeroKillNum(playerID, heroPos) end function BattleDataGetter.GetCurLeveLFunc() return LevelManager.CurLevelFunc end function BattleDataGetter.GetBattleChatChannel() local gRoomId = BIManager.GetSyncBattleGRoomID() local campID = LevelPlayerManager.MainEntityCampID local channelId = "tvt_"..gRoomId.."_A" if tostring(campID) == "2" then channelId = "tvt_"..gRoomId.."_B" end return channelId end function BattleDataGetter.GetFrame2CmdCountDicAndClear() local getFrame2CmdCountDic = KCPTransport.GetFrame2CmdCountDic() local handleFrame2CmdCountDic = LogicUpdateManager.GetHandleFrame2CmdCountDic() LogicUpdateManager.ClearHandleFrame2CmdCountDic() KCPTransport.ClearFrame2CmdDic() return getFrame2CmdCountDic, handleFrame2CmdCountDic end -- 获取天地群雄的战斗胜利方campID function BattleDataGetter.GetHeroMatch1v1RoundWinners() local result = {} local roundList = LevelManager.CurLevelFunc.roundResultList if roundList then for _, info in ipairs(roundList) do table.insert(result, info.winnerCampID) end end return result end --可能返回nil function BattleDataGetter.GetMyCityWarScoreInfo() return LevelManager.CurLevelFunc:GetPlayerScoreInfo(LevelPlayerManager.MyPlayerIDInRoom) end function BattleDataGetter.GetCityWarPlayerScoreInfoList() return LevelManager.CurLevelFunc:GetPlayerScoreInfoList() end function BattleDataGetter.GetMyCampCityWarPlayerScore() local result = 0 local infoList = LevelManager.CurLevelFunc:GetPlayerScoreInfoList() for i, info in ipairs(infoList) do if info.playerInfo.campID == LevelPlayerManager.MainEntityCampID then --我方玩家 result = result + info.killScore + info.assistScore + info.otherScore end end return result end -- container : 容器,会把 container[1] - container[5] 赋值为塔的单位 传空时会新建一个容器 function BattleDataGetter.GetCityWarTowerEntityList(container) return LevelManager.CurLevelFunc:GetTowerEntityList(container) end function BattleDataGetter.GetTowerEntityByIndex(index) if LevelManager.CurLevelFunc and LevelManager.CurLevelFunc.GetTowerEntityByIndex then return LevelManager.CurLevelFunc:GetTowerEntityByIndex(index) end end function BattleDataGetter.GetCityWarVehicleEntityList() if LevelManager.CurLevelFunc and LevelManager.CurLevelFunc.GetVehicleEntityList then return LevelManager.CurLevelFunc:GetVehicleEntityList() end end function BattleDataGetter.GetCityWarAttackCampID() return LevelManager.CurLevelFunc.attackCampID end function BattleDataGetter.GetCityWarDefendCampID() return LevelManager.CurLevelFunc.defendCampID end function BattleDataGetter.GetDragonArteryEntity() return LevelManager.CurLevelFunc.dragonArteryEntity end function BattleDataGetter.GetDragonArteryPlayerScore(playerID) if LevelManager.CurLevelFunc.GetScore then return LevelManager.CurLevelFunc:GetScore(playerID) else logging.error(LTAG.ERROR, "HYW : 试图在非龙脉战获取龙脉战积分") return 0 end end --获取连续持有玉玺帧数时长 function BattleDataGetter.GetDragonArteryPlayerComboFrame() if LevelManager.CurLevelFunc.GetPlayerComboFrame then return LevelManager.CurLevelFunc:GetPlayerComboFrame() else logging.error(LTAG.ERROR, "HYW : 试图在非龙脉战获取持有图腾帧数时长") return 0 end end --获取持有龙脉图腾积分 function BattleDataGetter.GetDragonArteryPlayerCarryScore(playerID) return FP.tonumberV1(LevelManager.CurLevelFunc:GetDragonArteryPlayerCarryScoreFP(playerID)) end function BattleDataGetter.GetDragonArteryBossKillScore(playerID) return LevelManager.CurLevelFunc:GetDragonArteryBossKillScore(playerID) + LevelManager.CurLevelFunc:GetAssistBossKillScore(playerID) end function BattleDataGetter.GetGodPropScore(playerID) return LevelManager.CurLevelFunc:GetGodPropScore(playerID) end function BattleDataGetter.GetKillHeroScore(playerID) return LevelManager.CurLevelFunc:GetKillHeroScore(playerID) end function BattleDataGetter.GetAssistHeroKillScore(playerID) return LevelManager.CurLevelFunc:GetAssistHeroKillScore(playerID) end --获取龙脉战里我的国家,这个是跟服务器约定死了的,在龙脉战里,对应国家的玩家一定是固定的campID function BattleDataGetter.GetDragonArteryMyKingdom() return BattleDataGetter.GetMyCampID() end --获取龙脉战里同国家的player列表 function BattleDataGetter.UpdateDragonArteryKingdomPlayerList(kingdom, playerIdList) local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) local index = 0 if campID then for _, army in pairs(LevelPlayerManager.PlayersArmyTable) do if army.playerInfo.campID == campID then index = index + 1 playerIdList[index] = army.playerInfo.playerID end end for i = #playerIdList, index + 1, -1 do playerIdList[i] = nil end end end --这个是跟服务器约定死了的,在龙脉战里,对应国家的玩家一定是固定的campID function BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) local campID if kingdom == LuaConst.Kingdom.Wei then campID = 1 elseif kingdom == LuaConst.Kingdom.Shu then campID = 2 elseif kingdom == LuaConst.Kingdom.Wu then campID = 3 elseif kingdom == LuaConst.Kingdom.Qun then campID = 4 else logging.error(LTAG.ERROR, "HYW : wrong kingdom @BattleDataGetter.GetDragonArteryKingdomScore value : ", kingdom) end return campID end function BattleDataGetter.GetDragonArteryKingdomScore(kingdom) local score = 0 local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) if campID then for k,army in pairs(LevelPlayerManager.PlayersArmyTable) do --pairs safe 数据统计对顺序不敏感 if army.playerInfo.campID == campID then score = score + BattleDataGetter.GetDragonArteryPlayerScore(army.playerInfo.playerID) end end end return score end function BattleDataGetter.GetDragonArteryKingdomKillScore(kingdom) local score = 0 local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) if campID then for k,army in pairs(LevelPlayerManager.PlayersArmyTable) do --pairs safe 数据统计对顺序不敏感 if army.playerInfo.campID == campID then score = score + BattleDataGetter.GetKillHeroScore(army.playerInfo.playerID) + BattleDataGetter.GetAssistHeroKillScore(army.playerInfo.playerID) end end end return score end --获取国家持有龙脉图腾积分 function BattleDataGetter.GetDragonArteryKingdomCarryScore(kingdom) local score = 0 local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) if campID then for k,army in pairs(LevelPlayerManager.PlayersArmyTable) do --pairs safe 数据统计对顺序不敏感 if army.playerInfo.campID == campID then score = score + BattleDataGetter.GetDragonArteryPlayerCarryScore(army.playerInfo.playerID) end end end return score end function BattleDataGetter.GetDragonArteryKingdomBossKillScore(kingdom) local score = 0 local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) if campID then for k,army in pairs(LevelPlayerManager.PlayersArmyTable) do --pairs safe 数据统计对顺序不敏感 if army.playerInfo.campID == campID then score = score + BattleDataGetter.GetDragonArteryBossKillScore(army.playerInfo.playerID) end end end return score end function BattleDataGetter.GetDragonArteryKingdomGodPropScore(kingdom) local score = 0 local campID = BattleDataGetter.GetDragonArteryCampIDByKingdom(kingdom) if campID then for k,army in pairs(LevelPlayerManager.PlayersArmyTable) do --pairs safe 数据统计对顺序不敏感 if army.playerInfo.campID == campID then score = score + BattleDataGetter.GetGodPropScore(army.playerInfo.playerID) end end end return score end function BattleDataGetter.GetBuffSkillUpdateByKeyPosition(keyPos) if LogicUpdateManager._curEntity then return LogicUpdateManager._curEntity.components.buffSkill:GetBuffSkillUpdateByKeyPosition(keyPos) end end function BattleDataGetter.GetSceneQuizVictoryEntity() local victoryAcid = MDL.SceneQuiz.GetVictoryAcid() if victoryAcid then return SyncMoveManager.GetEntityByAcid(victoryAcid) end return nil end function BattleDataGetter.ShowVictoryPose() LevelManager.CurLevelFunc:ShowVictoryPose() end function BattleDataGetter.GetScenePlayerState() return LevelManager.ScenePlayerState end --判断是否在【一站到底】中是观赛者 function BattleDataGetter.GetIsSceneQuizWatch() return LevelManager.ScenePlayerState == LevelManager.ScenePlayerStateEnum.Watch end function BattleDataGetter.ExpSetSelfEntity() ExpSystemManager.SetCurEntity(BattleDataGetter.GetCurEntity().ExpEntity) end function BattleDataGetter.GetEntityListOfCampId(campId) return CampManager.GetEntityListOfCampId(campId) end --获取9v9演武的结果 function BattleDataGetter.Get3TeamPKResult() local winList = LevelManager.CurLevelFunc.roundResultList local battleList = LevelPlayerManager.GetPlayerReserveArmyInfo(LuaConst.STANDALONE_PLAYER_PlayID) local enemyBattleList = LevelPlayerManager.GetPlayerReserveArmyInfo(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) local myGsList = BattleDataGetter.GetPlayerInfo(LuaConst.STANDALONE_PLAYER_PlayID).fightScores local enemyGsList = BattleDataGetter.GetPlayerInfo(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID).fightScores return winList, battleList, enemyBattleList, myGsList, enemyGsList end --城池战的守城boss是否死亡过 function BattleDataGetter.GetCityWarDefendBossIsDead() return LevelManager.CurLevelFunc.defineBossDead end local CityWarCrushCar2ExpItemID = {[62200121] = 2406, [62200122] = 2407} --城池战的冲车是否到达城门 且 正在攻击城门 function BattleDataGetter.GetCityWarIsCrushCarAttackingGate(entity) -- entity 冲车的entity ---通过冲车找到对应的冲车表现怪的元素,再通过元素找到这个怪,再查找这个怪的CurDecisionID或者身上的buff --- 这个绕的原因:一开始关卡配置就比较乱,不想改了。 local crushCarID = entity:GetCharacterID() local expItemID = CityWarCrushCar2ExpItemID[crushCarID] local expMonster = LevelItemManager.GetMonsterByItemID(expItemID) if expMonster then return expMonster:HasBuff(62200124) -- 62200124 是攻击, 62200125 是停止 end return false end --城池战的冲车是否到达城门(根据具体的AIID=62200123判断) function BattleDataGetter.GetCityWarIsCrushCarArrivedGate(monsterID) -- monsterID 冲车的ID local list = LevelManager.CurLevelFunc.crushCarList if list then for _, entity in ipairs(list) do if entity:GetCharacterID() == monsterID then return entity.components.aiBase.CurAiObject.aiid == 62200123 end end end return false end --城池战的东西两个冲车是否出生了 function BattleDataGetter.GetCityWarIsCrushCarBorn() local list = LevelManager.CurLevelFunc.crushCarList if list then return #list > 0 end return false end --城池战的防御塔的状态 function BattleDataGetter.GetCityWarTowerStage(index) if LevelManager.IsSyncCityWarSideWaitingArea() or LevelManager.IsSyncCityWarMainWaitingArea() then return 1 end local towerEntity = BattleDataGetter.GetTowerEntityByIndex(index) if towerEntity and towerEntity.featureID ~= 622021 then -- local FEATUREID_TOWER_EMPTY = 622021 if towerEntity.components.drive.BeDrived then return 3 -- 有人驾驶 else return 2 -- 建造但没人驾驶 end end return 1 -- 未建造 end --获取宠物称号内容 function BattleDataGetter.GetPetTitleContent(isLineUp, runeSkillLevelSum, aptitudeSum) if not BattleDataGetter.IsLevelShowHeadUI_Title(LevelManager.GetCurLevelType()) then --指定关卡需要显示称号id return false end return true, CTL.Pet.GetTitleContent(isLineUp, runeSkillLevelSum, aptitudeSum) end -- 获取肉鸽中的技能及其等级 function BattleDataGetter.GetRogueLikeSkillInfo() return LevelManager.CurLevelFunc.skillGradeList end -- 获取肉鸽中的技能节点 function BattleDataGetter.GetRogueLikeSelectSkills() return LevelManager.CurLevelFunc.skillSelectList end --获取肉鸽战斗结算数据,存活时间-达到等级-击败敌人-获得积分 function BattleDataGetter.GetRogueLikeBattleSummaryData() return BattleDataGetter.GetLevelPassTime(), BattleDataGetter.GetLevelID(), LevelManager.CurLevelFunc.killMonsterNum, math.floor(BattleDataGetter.GetLevelScore()) end -- 获取肉鸽中的重新随机技能次数 function BattleDataGetter.GetRogueLikeReRandomNum() return LevelManager.CurLevelFunc.reselectNum, LevelManager.CurLevelFunc.reselectTotalNum end function BattleDataGetter.GetIfWearAwakenAppearance(heroId, appearanceId) if appearanceId == 0 then return false end local _, cfg = DataSheetManager.AwakenHeroNum:TryGetDataByID(heroId) if cfg then return cfg.HeroAppearance == appearanceId end return false end return BattleDataGetter