MapManager = {}; local this = MapManager local OptionAddConfig = ConfigManager.GetConfig(ConfigName.OptionAddCondition) local PropConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig) local missionConfig = ConfigManager.GetConfig(ConfigName.MissionEventsConfig) local ChallengeData = ConfigManager.GetConfig(ConfigName.ChallengeConfig) local MapConfig = ConfigManager.GetConfig(ConfigName.ChallengeMapConfig) local MapPointConfig = ConfigManager.GetConfig(ConfigName.MapPointConfig) -- local accomplishmentConfig = ConfigManager.GetConfig(ConfigName.AccomplishmentConfig) local exploreData = ConfigManager.GetConfig(ConfigName.ExploreFunctionConfig) local challengeConfig = ConfigManager.GetConfig(ConfigName.ChallengeConfig) local optionConfig = ConfigManager.GetConfig(ConfigName.OptionConfig) local ItemData = ConfigManager.GetConfig(ConfigName.ItemConfig) function this.Initialize() this.InitVar() Game.GlobalEvent:AddEvent(GameEvent.EliteAchieve.OnAchieveDone, this.OnEliteAchieveDone) Game.GlobalEvent:AddEvent(GameEvent.Map.ProgressChange, this.UpdateMapProgressDatas) Game.GlobalEvent:AddEvent(GameEvent.Map.PointAdd, function (pos, pointId) this.mapPointList[pos] = pointId end) Game.GlobalEvent:AddEvent(GameEvent.Map.PointRemove, function (pos) local mapPointId = MapManager.mapPointList[pos] if MapPointConfig[mapPointId].Style == 7 then --宝箱点被删 Game.GlobalEvent:DispatchEvent(GameEvent.Map.ProgressChange, 7,0) end --MapManager.mapPointList[pos] = nil end) --TrialManager:Initialize() end -- 初始化变量 function this.InitVar() this.curAreaId = 1 -- 当前区域ID this.curMapId = 0 -- 当前地图ID this.curPos = 0 -- 当前位置信息值, curPos = u * 256 + v this.curTriggerPos = 0 -- 当前触发位置信息值, curTriggerPos = u * 256 + v this.mapPointList = {} this.formationList = {} this.stepList = {} --探索步骤记录 this.mapPointId = 0 -- 当前地图点ID this.curAreaName = "" this.curMapName = "" this.curMapPointName = "" this.totalEnergy = 0 -- 总行动力 this.leftStep = 0 -- 剩余行动力 this.curMapBornPos = 0 -- 当前地图出身点 this.allMapProgressList = {} --所有地图探索度信息 this.mapPointIdCurEventId = {} -- 地图点对应的事件点 this.leaderMoveSpeed = 1 / exploreData[1].Value -- 移动速度 this.fogSize = exploreData[2].Value -- 探索相关的默认视野范围 this.fogRange = 0 -- 驱散迷雾的半径 this.fogCenter = 0 -- 驱散迷雾的中心点 this.buffInfo = {} -- 记录吃了buff之后剩余的步数, 数据结构:buff id ,剩余步数,总作用步数,buff名字 this.isCarbonEnter =false -- 是否是从副本进的地图 this.isOpen = false -- 副本是否开启 this.totalTime = 0 -- 地图总时间 this.deadTime = 0 -- 死亡剩余时间 this.deadCount = 0 -- 死亡次数 this.lastPos = 0 -- 角色死亡前位置 this.isPoping = false -- 事件节点是否正在弹栈 this.isTimeOut = false -- 地图时间是否到了 -- this.mapPointList = {} this.leftStep = 0 this.isStopDying = false -- 是否立刻停止死亡 this.isInMap = false -- 是否在地图里 this.mapScale = 0 this.fightCount = 0 -- 已经战斗的次数 this.isRemoving = false -- 正在删点 this.progressFull = false -- 探索100% this.roleInitPos = 0 -- 换层时的出生位置 this.pointAtkPower = {} -- 每个事件点的战力 this.FirstEnter = false -- 刚进图,区别OnShow this.PlayedMapTypes = {} -- 已经进入过的副本类型(用与判断是否时第一次进入某类型的副本) -- 是否是重登后进的图 this.isReloadEnter = true this.trialHeroInfo={}--试炼阵容信息 this.curHero=""--试炼副本当前上阵英雄 this.addHpCount=0 --回春散已使用次数 this.curCarbonType = 0--当前副本玩法类型(副本很多东西不用了,慢慢删,进图只用传 编队、玩法 之后服务器返回mapId) this.Mapping = false this.endlessEnter = false end function this.InitData(msg) this.mapList = msg.mapList this.curPos = msg.curXY this.roleInitPos = msg.curXY local u, v = Map_Pos2UV(msg.curXY) Log("服务器返回的初始位置 (msg.u = " .. u .. ", msg.v = " .. v .. ")") if u == 0 and v == 0 then PopupTipPanel.ShowTip(Language[11229]) end this.wakeCells = msg.wakeCells --this.totalEnergy = this.leftStep - 5 --===================== 副本数据初始化 ========================= --Log("副本任务剩余时间 " .. msg.leftTime) -- if this.curMapId > 0 then -- -- 判断一下服务器返回的初始位置 -- local size = MapConfig[this.curMapId].Size -- if u > size[1] or v > size[2] then -- Log("服务器返回的地图位置超出边界,导致地图初始化错误!") -- end -- CarbonManager.difficulty = ChallengeData[this.curMapId].Type -- end -- if challengeConfig[this.curMapId] then -- this.totalTime = challengeConfig[this.curMapId].MapTime -- end -- Log("只能在当前地图呆的时间 " .. this.totalTime) -- -- 复活剩余时间] -- if msg.reviveTime then -- this.deadTime = msg.reviveTime -- --Log("死亡剩余时间 " .. this.deadTime) -- end -- -- 死亡次数 -- if msg.dieCount then -- this.deadCount = msg.dieCount -- --Log("在地图里死亡" .. this.deadCount.. "次") -- end -- local time = msg.leftTime -- if time < 0 then -- this.isOpen = false -- else this.isOpen = true -- 已经计时的时间 -- local durationTime = this.totalTime - msg.leftTime -- PlayerManager.startTime = PlayerManager.serverTime - durationTime -- end -- 调用MissionManager初始化副本任务 MissionManager.InitMissionInfo(msg) --============================================= this.pointAtkPower = {} Log("地图点个数 " .. #msg.mapList) for i=1, #msg.mapList do local cell = msg.mapList[i] --Log("cell.cellId : "..cell.cellId) --Log("地图点Id : "..cell.pointId) this.mapPointList[cell.cellId] = cell.pointId -- cell.cellId == Pos, Pos作为Key this.pointAtkPower[cell.cellId] = cell.monsterForce -- 每个事件点可能存在的战力 end --Log("msg.curXY : ".. msg.curXY) this.totalEnergy =0 -- this.formationList = {}--请滚 --Log("服务器英雄数量 msg.heroInfos " .. #msg.heroInfos) -- for i=1, #msg.heroInfos do -- local heroDid = msg.heroInfos[i].heroId -- local curHeroData = HeroManager.GetSingleHeroData(heroDid) -- local lv = ConfigManager.GetConfigData(ConfigName.HeroLevelConfig, curHeroData.lv).CharacterLevelPara -- local allEquipAddProVal= HeroManager.CalculateWarAllProVal(heroDid) -- allEquipAddProVal[2] = msg.heroInfos[i].heroHp -- allEquipAddProVal[3] = msg.heroInfos[i].heroMaxHp -- this.totalEnergy=this.totalEnergy+curHeroData.actionPower -- this.formationList[i] = { -- heroId = heroDid, -- allProVal = allEquipAddProVal, -- } -- end -- 如果是重登,则进图时请求一次血量数据 if this.isReloadEnter and CarbonManager.difficulty == CARBON_TYPE.ENDLESS then NetManager.RequestAllHeroHp(function () Log("重登进图请求一次血量数据") end) end -- this.UpdateMaoShotTimeBagData(msg.temporaryItems) -- 获得所有的buff效果 --Log("******人物身上的buff数量 " .. #msg.foodBuffers) FoodBuffManager.Initialize() for i = 1, #msg.foodBuffers do local bufferId = msg.foodBuffers[i].bufferId local leftStep = msg.foodBuffers[i].leftStep --Log("当前的buff Id " .. bufferId) --Log("当前的buff 剩余步数 " .. leftStep) if leftStep < 0 then -- 剩余步数小于0,表示永久buff,步数的绝对值表是这个buff的数量 for i = 1, math.abs(leftStep) do local buffer = FoodBuffManager.CreateFoodBuff(bufferId) buffer:SetLeftStep(-1) end else local buffer = FoodBuffManager.CreateFoodBuff(bufferId) buffer:SetLeftStep(leftStep) end end -- 试炼副本的Buff信息 if msg.buf then MapTrialManager.SetBuffList(msg.buf) end -- 无尽副本 if msg.signs then -- LogPurple("标记数量" .. #msg.signs) -- EndLessMapManager.InitMapNoteData(msg.signs) end -- 时间点的刷新时间 if msg.refreshInfo then EndLessMapManager.InitRefreshPoint(msg.refreshInfo) end -- 跳过战斗设置 if msg.skipFight then -- 是否跳过了战斗 --EndLessMapManager.isSkipFight = msg.skipFight end -- 探索度限制条件初始化 this.progressFull = false if msg.infos then this.trialHeroInfo=msg.infos end if msg.curHero then this.curHero=msg.curHero end if msg.addHpCount then this.addHpCount=msg.addHpCount end end -- 判断某类型副本是否已经进入过 function this.IsPlayedByMapType(mapType) if not this.PlayedMapTypes then return false end if table.indexof(this.PlayedMapTypes, mapType) then return true end return false end -- 设置某类型副本已经进入过 function this.SetMapTypePlayed(mapType) if not this.PlayedMapTypes then this.PlayedMapTypes = {} end if table.indexof(this.PlayedMapTypes, mapType) then return end table.insert(this.PlayedMapTypes, mapType) end -- 计算角色死亡总时间 function this.RoleTotalDeadTime() local deadTimes = this.deadCount local curTotalTime = 0 local data = challengeConfig[this.curMapId].ReviveTime curTotalTime = math.pow(deadTimes, 3) * data[1] + math.pow(deadTimes, 2) * data[2] + deadTimes * data[3] + data[4] return curTotalTime end -- 根据地图点删除多个位置 function this.DeletePos(mapPointId) for i, v in pairs(MapManager.mapPointList) do if v then if v == mapPointId then -- Log("战斗结束删除事件点" .. v .. "位置" .. i) Game.GlobalEvent:DispatchEvent(GameEvent.Map.PointRemove, i) end end end end -- 设置探索的视野范围 function this.SetViewSize(size) this.fogSize = size end -- 设置人物移动速度 function this.SetMoveSpeed(speed) this.leaderMoveSpeed = exploreData[1].Value / speed end --初始化所有地图探索度 function this.InitAllMapPgData() this.allMapProgressList = {} local MapConfigKeys = GameDataBase.SheetBase.GetKeys(MapConfig) for i=1, #MapConfigKeys do local curMapData={} -- if MapConfig[MapConfigKeys[i]].MapId ~= 10 then -- curMapData.mapId=MapConfig[MapConfigKeys[i]].MapId -- curMapData.totalWeight=0 -- curMapData.maxTotalWeight=0 -- curMapData.progressData={} -- local accomplishmentConfigKeys = GameDataBase.SheetBase.GetKeys(accomplishmentConfig) -- for i = 1, #accomplishmentConfigKeys do -- if accomplishmentConfig[accomplishmentConfigKeys[i]].MapId == curMapData.mapId then -- local ExploreDetail={} -- ExploreDetail.id=accomplishmentConfig[accomplishmentConfigKeys[i]].id -- ExploreDetail.proressNum=0 -- ExploreDetail.configData=accomplishmentConfig[accomplishmentConfigKeys[i]] -- curMapData.maxTotalWeight=curMapData.maxTotalWeight+accomplishmentConfig[accomplishmentConfigKeys[i]].Score -- table.insert(curMapData.progressData,ExploreDetail) -- end -- end -- this.allMapProgressList[curMapData.mapId]=curMapData -- --this.InitAllMapProgressData(curMapData) -- end end table.sort(this.allMapProgressList, function(a,b) return a.mapId < b.mapId end) end --获取所有地图探索度信息 function this.InitAllMapProgressData(_curMapData) local singleMapProgressData={} --地图id if this.allMapProgressList[MapManager.curMapId] then singleMapProgressData=this.allMapProgressList[MapManager.curMapId] singleMapProgressData.totalWeight=0 for i = 1, #singleMapProgressData.progressData do for j = 1, #_curMapData do if singleMapProgressData.progressData[i].id==_curMapData[j].id then singleMapProgressData.progressData[i].proressNum=_curMapData[j].progress if _curMapData[j].progress>=singleMapProgressData.progressData[i].configData.Values[2][1] then singleMapProgressData.totalWeight=singleMapProgressData.totalWeight+singleMapProgressData.progressData[i].configData.Score end end end end end end -- function this.UpdateMaoShotTimeBagData(_temporaryItems) -- if _temporaryItems.itemlist~=nil and #_temporaryItems.itemlist>0 then -- for i = 1, #_temporaryItems.itemlist do -- BagManager.InitMapShotTimeBagData(_temporaryItems.itemlist[i]) -- end -- end -- if _temporaryItems.equipId~=nil and #_temporaryItems.equipId>0 then -- for i = 1, #_temporaryItems.equipId do -- EquipManager.InitMapShotTimeEquipBagData(_temporaryItems.equipId[i]) -- end -- end -- if _temporaryItems.Hero~=nil and #_temporaryItems.Hero>0 then -- for i = 1, #_temporaryItems.Hero do -- HeroManager.InitMapShotTimeHeroBagData(_temporaryItems.Hero[i]) -- end -- end -- if _temporaryItems.soulEquip~=nil and #_temporaryItems.soulEquip>0 then -- for i = 1, #_temporaryItems.soulEquip do -- SoulPrintManager.InitMapShotTimeSoulPrintBagData(_temporaryItems.soulEquip[i]) -- end -- end -- if _temporaryItems.especialEquipId~=nil and #_temporaryItems.especialEquipId>0 then -- for i = 1, #_temporaryItems.especialEquipId do -- TalismanManager.InitMapShotTimeTalismanBagData(_temporaryItems.especialEquipId[i]) -- end -- end -- end --前端更新地图进度 _type 2/3 怪物组id#次数/本次地图获得战斗胜利次数 4/8 行脚商人id#物品id /行脚商人id#物品类型 5 本地图采矿都少次 6 消耗行动力数量 7 宝箱 function this.UpdateMapProgressDatas(_type,_eventId,_monsterId,_num,_isSend)--没有数据可传0 --Log("UpdateMapProgressDatas _type,_eventId数据1: ".._type.." ".._eventId) if _monsterId then --Log("UpdateMapProgressDatas _monsterId数据2: ".._monsterId) end if _num then --Log("UpdateMapProgressDatas _num数据3: ".._num) end if this.allMapProgressList[this.curMapId] then for i = 1, #this.allMapProgressList[this.curMapId].progressData do local curMapSinleProgressData=this.allMapProgressList[this.curMapId].progressData[i] if _type==2 or _type==3 then--2/3 怪物组id#次数/本次地图获得战斗胜利次数 if curMapSinleProgressData.configData.Logic==2 then for j = 1, #curMapSinleProgressData.configData.Values[1] do if curMapSinleProgressData.configData.Values[1][j]==_monsterId then this.UpdateMapProgressData(_type,curMapSinleProgressData,1) end end elseif curMapSinleProgressData.configData.Logic==3 then this.UpdateMapProgressData(_type,curMapSinleProgressData,1) end elseif _type==4 or _type==8 then--4/8 行脚商人id#物品id /行脚商人id#物品类型 elseif _type==5 then-- 5 本地图采矿都少次 if curMapSinleProgressData.configData.Logic==5 then this.UpdateMapProgressData(_type,curMapSinleProgressData,1) end --elseif _type==6 then--6 消耗行动力数量 -- if curMapSinleProgressData.configData.Logic==6 then -- this.UpdateMapProgressData(_type,curMapSinleProgressData,_num,_isSend) -- end elseif _type==7 then--7 宝箱 if curMapSinleProgressData.configData.Logic==7 then this.UpdateMapProgressData(_type,curMapSinleProgressData,1) end end --事件点id#次数 if curMapSinleProgressData.configData.Logic==1 then for j = 1, #curMapSinleProgressData.configData.Values[1] do if curMapSinleProgressData.configData.Values[1][j]==_eventId then Log("探索度测试事件点id3 ------------------------ ".._eventId) this.UpdateMapProgressData(_type,curMapSinleProgressData,1) end end end end end end function this.UpdateMapProgressData(_type, _data, _num, _isSend) if this.curMapId == 0 or ChallengeData[this.curMapId].IsExplore == 0 then return end if _data.proressNum < _data.configData.Values[2][1] then _data.proressNum = _data.proressNum + _num if _data.proressNum >= _data.configData.Values[2][1] then Log("_data:".._data.id) if _type == 6 and _isSend then NetManager.MapUpdateEvent(-1000) end this.allMapProgressList[this.curMapId].totalWeight = this.allMapProgressList[this.curMapId].totalWeight + _data.configData.Score Game.GlobalEvent:DispatchEvent(GameEvent.Map.ProgressChangeUpdateShow) local weight = this.allMapProgressList[this.curMapId].totalWeight if weight >= 100 then --if not UIManager.IsOpen(UIName.MissionRewardPanel) then this.progressFull = true if not UIManager.IsOpen(UIName.RewardItemPopup) then -- UIManager.OpenPanel(UIName.MapStatsPanel) end else this.progressFull = false end -- 调整显示顺序,任务完成提示显示在副本结束界面上面 --PopupTipPanel.ShowTip(_data.configData.Info) if GetLanguageStrById(_data.configData.Info)~=nil and GetLanguageStrById(_data.configData.Info)~="" then UIManager.OpenPanel(UIName.CurlingTipPanel, GetLanguageStrById(_data.configData.Info)) end end end Game.GlobalEvent:DispatchEvent(GameEvent.Map.ProgressDataChange) end --通过地图探索度 得到当前事件点是否通过 function this.GetCurPointEventIsPass(_pointEventId) local isPass=false local mapId = tonumber(string.sub(tostring(_pointEventId), 1, 3)) Log("mapid "..mapId.." _pointEventId ".._pointEventId) if this.allMapProgressList[mapId] then for i = 1, #this.allMapProgressList[mapId].progressData do if this.allMapProgressList[mapId].progressData[i].configData then for j = 1, #this.allMapProgressList[mapId].progressData[i].configData.Values[1] do if this.allMapProgressList[mapId].progressData[i].configData.Values[1][j]==_pointEventId then if this.allMapProgressList[mapId].progressData[i].proressNum>=this.allMapProgressList[mapId].progressData[i].configData.Values[2][1] then isPass=true end end end end end end return isPass end -- 通过地图点ID获得地图上的位置 function this.GetPosByMapPointId(mapPointId) for i, v in pairs(this.mapPointList) do if v == mapPointId then return i end end end -- -- 设置血量的初始状态 -- function this.InitFormationHp() -- -- for i=1, #MapManager.formationList do -- -- MapManager.formationList[i].allProVal[2] = MapManager.formationList[i].allProVal[3] -- -- end -- end function this.MapUpdateEvent(pos, func) NetManager.MapUpdateEvent(pos, function (eventId) -- 试炼召唤Boss需要向服务器同步一次,发送-1000, 此时不赋值 if pos ~= -1000 then MapManager.curTriggerPos = pos end --LogGreen(tostring(pos)) LogYellow(tostring(#MapManager.mapPointList)) MapManager.mapPointId = MapManager.mapPointList[pos] LogPink(tostring(MapManager.mapPointId)) Log("碰到事件点后服务器返回的事件ID -- " .. eventId) if eventId~=0 then MissionManager.EventPointTrigger(eventId) elseif eventId == 0 and MapManager.curCarbonType == CarBonTypeId.TRIAL then -- body local style = MapPointConfig[MapManager.mapPointId].Style MissionManager.MapPointTrigger(style) end if func then func() end end) end function this.GetBattleData(formationId, monsterGroupId) local fightData = BattleManager.GetBattleData(formationId, monsterGroupId) local i = 1 while i <= #fightData.playerData do fightData.playerData[i].property[2] = this.formationList[i].allProVal[2] if fightData.playerData[i].property[2] == 0 then table.remove(fightData.playerData, i) end i = i + 1 end return fightData end function this.MapBattleExecute(monsterGroupId, optionid, callBack) NetManager.MapFightInfoRequest(function (msg)--QuickFightRequest local fightData = BattleManager.GetBattleServerData(msg) local triggerCallBack LogGreen("进入战斗----------------------------------------------------------------------------") UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.MAP_FIGHT, function (result) triggerCallBack = function (panelType, panel) if panelType == UIName.MapPanel then --监听到MapPanel重新打开,再抛对应事件,否则接收不到 if result.result == 0 then --战斗失败回 if OptionBehaviourManager.CurTriggerPanel then OptionBehaviourManager.CurTriggerPanel:ClosePanel() end -- 失败接受一下后端返回的位置 local lastPos = result.lastPos Game.GlobalEvent:DispatchEvent(GameEvent.Map.DeadOut, 0, lastPos) else -- 地图连续事件点的战斗胜利 this.VictoryHandler(result, callBack) end Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnOpen, triggerCallBack) end end Game.GlobalEvent:AddEvent(GameEvent.UI.OnOpen, triggerCallBack) end) end) end -- 战斗胜利的处理 function this.VictoryHandler(result, callBack) -- 试炼副本 if result.lastTowerTime then Log("result.lastTowerTime" .. result.lastTowerTime) MapTrialManager.bossDeadTime = result.lastTowerTime end -- 先刷一次战斗后的血量 this.RefreshFormationHp(result) if callBack then callBack(result) end -- 试炼副本最后一层 if MapTrialManager.IsFinalLevel() then this.PanelCloseCallBack(UIName.MapOptionPanel, function () -- UIManager.OpenPanel(UIName.MapStatsPanel) end) end end function this.RefreshFormationHp(result) if result.result == 0 then return end for i=1, #this.formationList do this.formationList[i].allProVal[2] = result.hpList[i] end Game.GlobalEvent:DispatchEvent(GameEvent.Map.FormationHpChange) end --给队伍所有人加特定属性值, 0 是减少,1 是增加 function this.RefreshFormationProListVal(proId, changeType, _val) -- 获取战斗属性 local _proType = GetProIndexByProId(proId) if not _proType or _proType == 0 then return end -- 确认数值方向 changeType = changeType / 0.5 - 1 -- 开始加属性 for i=1, #this.formationList do -- 获取当前值 local value = this.formationList[i].allProVal[_proType] --- 加血需要特殊处理 if value then if _proType == 2 then -- 判断人物是否死亡,死亡不再加血 if value > 0 then local maxHp = this.formationList[i].allProVal[GetProIndexByProId(1)] if proId == 67 then -- 最大生命值百分比加血 value = value + (_val / 10000 * maxHp) * changeType elseif proId == 68 then -- 当前剩余血量百分比加血 value = value + (_val / 10000 * value) * changeType else value = value + _val * changeType end -- 不能超出最大值 value = value >= maxHp and maxHp or value -- 不能一下子就死掉了 --value = value <= 0 and 1 or value end else value = value + _val * changeType end -- 人物属性不能小于0 value = value < 0 and 0 or value this.formationList[i].allProVal[_proType] = value end end Game.GlobalEvent:DispatchEvent(GameEvent.Map.FormationHpChange) end -- 根据附加条件判断结果做相应的表现 function this.AddContionType(AddCondtionID, eventId, option, panel, func) local conditiontype = OptionAddConfig[AddCondtionID].Type Log("conditiontype" .. conditiontype) if conditiontype == 1 then -- 判断完成事件点进度 OptionBehaviourManager.JumpEventPoint(eventId, option, panel) elseif conditiontype == 2 then -- 判断物品数量 local isPass = this.IsAddContionPass(AddCondtionID, 2) if not isPass then MsgPanel.ShowOne(Language[10503]) else OptionBehaviourManager.JumpEventPoint(eventId, option, panel) end elseif conditiontype == 3 then -- 判断角色属 local isPass = this.IsAddContionPass(AddCondtionID, 3) if isPass then OptionBehaviourManager.JumpEventPoint(eventId, option, panel) else LogGreen("AddCondtionID:"..AddCondtionID) PopupTipPanel.ShowTip("你不该来到这儿,请离开") --MsgPanel.ShowOne(GetLanguageStrById(OptionAddConfig[AddCondtionID].Info) .. Language[11230] .. Language[11231] .. PropConfig[propId]) end elseif conditiontype == 4 then --完成某个任务的第几步 local isPass = this.IsAddContionPass(AddCondtionID, 4) if isPass then OptionBehaviourManager.JumpEventPoint(eventId, option, panel) else PopupTipPanel.ShowTip("你不该来到这儿,请离开") --MsgPanel.ShowOne(Language[11232] .. GetLanguageStrById(missionConfig[missionId].MainTitle) ..Language[11233] .. stepNeed) end elseif conditiontype == 5 then -- 判断物品数量小于指定数量 local isPass = this.IsAddContionPass(AddCondtionID, 5) if isPass then OptionBehaviourManager.JumpEventPoint(eventId, option, panel) else PopupTipPanel.ShowTip(Language[11234]) end elseif conditiontype == 6 then -- 判断属性 local isPass = this.IsAddContionPass(AddCondtionID, 6) Log(string.format("%s", isPass)) if isPass then OptionBehaviourManager.JumpEventPoint(eventId, option, panel) else MsgPanel.ShowOne(Language[11235]) end elseif conditiontype == 8 then -- 显示提示文字 OptionBehaviourManager.JumpEventPoint(eventId, option, panel) elseif conditiontype == 9 then -- 显示行动力 local isPass = this.IsAddContionPass(AddCondtionID, 9) if isPass then OptionBehaviourManager.JumpEventPoint(eventId, option, panel) else PopupTipPanel.ShowTip(Language[11236]) end end if func then func() end end -- 根据附加条件判断结果决定按钮显示状态 function this.IsShowOptionBtn(addConditionId, btnShowType) if addConditionId == nil or addConditionId == 0 then return true else if btnShowType == 1 then return true elseif btnShowType == 2 then -- 判断附加条件是否通过 local addIsDone, secondResult = this.IsAddContionPass(addConditionId, 0) if secondResult then return addIsDone, secondResult else return addIsDone end elseif btnShowType == 3 then elseif btnShowType == 0 or btnShowType == nil then Log("配置表数据为空!!") end end end -- 判断附件的条件是否通关,通过附加的ID和类型返回判断值, 0或空返回所有的判断结果 function this.IsAddContionPass(addConditionId, _type) local AddConditionType = OptionAddConfig[addConditionId].Type local ConditionValues = OptionAddConfig[addConditionId].Values if _type == 0 or _type == nil then _type = AddConditionType end if _type == 1 then -- 事件点进度 return true elseif _type == 2 then -- 判断指定物品数量大于 local haveEnoughItem = false for i = 1, #ConditionValues do local itemId = ConditionValues[i][1] local numNeed = ConditionValues[i][2] if BagManager.GetTotalItemNum(itemId) < numNeed then haveEnoughItem = false return haveEnoughItem else haveEnoughItem = true end end return haveEnoughItem elseif _type == 3 then -- 验证全员属性 local propEnough = false local JudgeRange = ConditionValues[1][1] local propId = ConditionValues[1][2] -- 属性ID local threhold = ConditionValues[1][3] -- 判断阈值 -- 获取全队员需要判断的属性 for i = 1, #this.formationList do local heroId = this.formationList[i].heroId local prop = HeroManager.CalculateProValMap(heroId, propId) if JudgeRange == 0 then -- 最高属性 if prop > threhold then propEnough = true end else -- 全队属性 if prop < threhold then propEnough = false else propEnough = true end end end return propEnough elseif _type == 4 then -- 完成任务的第几步 local stepIsDone = false --当前开启条件,需要完成某个任务的第几步 local missionId = ConditionValues[1][1] local stepNeed = ConditionValues[1][2] local curMissionStep = 0 --任务未开启,此时为空 if not MissionManager.MissionState[missionId] then curMissionStep = 0 else curMissionStep = MissionManager.MissionState[missionId].step end stepIsDone = curMissionStep + 1 >= stepNeed return stepIsDone elseif _type == 5 then -- 判断物品数量小于指定数量 local isLess = false for i = 1, #ConditionValues do local itemId = ConditionValues[1][1] local numNeed = ConditionValues[1][2] if BagManager.GetTotalItemNum(itemId) >= numNeed then isLess = false return isLess else isLess = true end end return isLess elseif _type == 6 then -- 某个任务是否处于第几步 local finalResult = true -- 记录所有判断结果 local result = {} for i = 1, #ConditionValues do local isOnStep = false local jude = ConditionValues[i][1] local missionId = ConditionValues[i][2] local stepNeed = ConditionValues[i][3] if MissionManager.MissionState[missionId] then local curStep = MissionManager.MissionState[missionId].step -- 指定任务的当前进度 if jude == 0 then if curStep == stepNeed then -- 某个任务是否处于第几步 isOnStep = true else isOnStep = false end elseif jude == 1 then -- 不处于任务的第几步 if curStep == stepNeed then isOnStep = false else isOnStep = true end end else Log("检查表格!!") end result[i] = isOnStep end -- 有一个没有达到要求,都是false for i, v in pairs(result) do if v == false then finalResult = false end end return finalResult elseif _type == 8 then -- 显示提示文字 return true elseif _type == 9 then -- 判断行动力 local curEnergy = EndLessMapManager.leftEnergy local distMapId = ConditionValues[1][1] local energyNeed = EndLessMapManager.EnergyCostEnterMap(distMapId) return curEnergy >= energyNeed end end -- 返回当前区域名 function this.GetCurAreaName() return GetLanguageStrById(ChallengeData[this.curMapId].Name) end -- 返回当前地图名 function this.GetCurMapName() return GetLanguageStrById(MapConfig[this.curMapId].Info) end -- 返回当前地图点名 function this.GetCurMapPointName() return GetLanguageStrById(MapPointConfig[this.mapPointList[this.curTriggerPos]].Desc) end PointType = { [1] = Language[11237], [2] = Language[11238], [3] = Language[11239], [4] = Language[11240], [5] = Language[11241], [6] = Language[11242], [7] = Language[11243], [8] = Language[11244], [10] = Language[11245], } -- 探索度显示数据 function this.ExploreDataShow() -- 序章无探索度 local mapData = this.allMapProgressList[this.curMapId] local exploreData = {} exploreData.info = {} if not mapData then Log(Language[11246]) return end -- 探索度进度 exploreData.progress = mapData.totalWeight -- 百分比进度 exploreData.percent = mapData.totalWeight / mapData.maxTotalWeight -- 数据排序 table.sort(mapData.progressData, function(a,b) return a.id < b.id end) -- 重组数据 for i = 1, #mapData.progressData do local data = {} local proDat = mapData.progressData[i] -- 探索内容条 data.context =GetLanguageStrById(proDat.configData.Info) data.id = proDat.id local curProgress = proDat.proressNum local totalProgress = proDat.configData.Values[2][1] -- 单体进度, 显示使用,string型 data.progress = string.format("(%s/%s)", curProgress, totalProgress) -- 探索度权重值,显示使用 data.weight = string.format("+%s", proDat.configData.Score) -- 探索度完成状态 data.isDone = curProgress >= totalProgress exploreData.info[i] = data end -- 重新排序, 已完成的丢后面,ID小优先 local doneData = {} local doingData = {} for i = 1, #exploreData.info do if exploreData.info[i].isDone == false then doingData[#doingData + 1] = exploreData.info[i] else doneData[#doneData + 1] = exploreData.info[i] end end if #doingData > 1 then table.sort(doingData, function (a, b) return a.id < b.id end) end if #doneData > 1 then table.sort(doneData, function (a, b) return a.id < b.id end) end exploreData.info = {} for i = 1, #doingData do table.insert(exploreData.info, doingData[i]) end for i = 1, #doneData do table.insert(exploreData.info, doneData[i]) end return exploreData end -- 获取当前地图对应的副本id function this.GetCurCarbonId() return challengeConfig[this.curMapId].MapId end -- 精英副本成就完成会调事件 function this.OnEliteAchieveDone(taskId) local curCarbonId = this.GetCurCarbonId() -- local achieve = accomplishmentConfig[taskId] -- if achieve and achieve.MapId == curCarbonId then -- UIManager.OpenPanel(UIName.CurlingTipPanel, GetLanguageStrById(achieve.Info) .. " 已完成") -- end end -- 返回道具数量判断的东西 function this.ItemNumJudge(optionId) local addId = optionConfig[optionId].AddConditionID local isPass = this.IsAddContionPass(addId, 2) return isPass end function this.ItemColorStr(optionId) local addId = optionConfig[optionId].AddConditionID if not addId or addId == 0 then Log(Language[11219]) return end local values = OptionAddConfig[addId].Values local colorStr = "" if not values or #values == 0 then return end for i, v in pairs(values) do local id = v[1] local itemNeed = v[2] local itemHave = BagManager.GetTotalItemNum(id) local name = GetLanguageStrById(ItemData[id].Name) local color = itemHave >= itemNeed and "#FFFFFFFF" or "#FF0000FF" colorStr = colorStr .. string.format(" %s: %s/%d ", name, color, itemHave, itemNeed) end return colorStr end -- 检测面板关闭再执行回调 function this.PanelCloseCallBack(uiPanel, func) if UIManager.IsOpen(uiPanel) then local triggerCallBack triggerCallBack = function (panelType, panel) if panelType == uiPanel then if func then func() end Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnClose, triggerCallBack) end end Game.GlobalEvent:AddEvent(GameEvent.UI.OnClose, triggerCallBack) else if func then func() end end end -- 计算地图编队战力 function this.GetMapTeamPower() -- local curFormation = MapManager.formationList -- local powerNum = 0 -- for i = 1, 5 do -- local heroData -- if curFormation[i] then -- heroData = HeroManager.GetSingleHeroData(curFormation[i].heroId) -- if not heroData then -- Log("heroData is not exist! error Did:" .. curFormation[i].heroId) -- return -- end -- LogGreen(curFormation[i].heroId.." curFormation[i].allProVal[2]:" .. tostring(curFormation[i].allProVal[2])) -- if curFormation[i].allProVal[2] > 0 then -- local allEquipAddProVal = 0 -- allEquipAddProVal = HeroManager.CalculateHeroAllProValList(1, heroData.dynamicId, false) -- powerNum = powerNum + allEquipAddProVal[HeroProType.WarPower] -- end -- end -- end local curFormation = EndLessMapManager.formation local powerNum = 0 for i = 1, 5 do local heroData if curFormation[i] then heroData = HeroManager.GetSingleHeroData(curFormation[i].heroId) if not heroData then Log("heroData is not exist! error Did:" .. curFormation[i].heroId) return end local hp = FormationManager.GetFormationHeroHp(FormationTypeDef.FORMATION_ENDLESS_MAP, curFormation[i].heroId) if hp and hp > 0 then powerNum = powerNum + HeroPowerManager.GetHeroPower(heroData.dynamicId) end end end return powerNum end --存入临时背包 function this.DropAddShotTimeBag(_drop) local drop = BagManager.GetItemListFromTempBag(_drop) for i = 1, #drop do local itemdata = drop[i] if itemdata.itemType==2 then EquipManager.InitMapShotTimeEquipBagData(itemdata.backData) elseif itemdata.itemType==3 then HeroManager.InitMapShotTimeHeroBagData(itemdata.backData) elseif itemdata.itemType==4 then TalismanManager.InitMapShotTimeTalismanBagData(itemdata.backData) elseif itemdata.itemType==5 then SoulPrintManager.InitMapShotTimeSoulPrintBagData(itemdata.backData) SoulPrintManager.StoreData(itemdata.data) end end end return this