local CountryWantedTask_Model = {} local EventSystem = require('Event/EventSystem') local private = {} local wanted_task_pb = require "Proto.wanted_task_pb" --任务状态 CountryWantedTask_Model.WantedTaskState = { Done = 0, -- 已完成(任务状态) Doing = 1, -- 进行中(任务状态) NotDoing = 2, -- 未开始(任务状态) ChildDone = 3,-- 子任务已完成,任务串未完成Ω } --悬赏任务类型 CountryWantedTask_Model.TaskType = { NeutralityCollect = 1,--中立采集 EnemyCountryCollect = 2,--敌国采集 WorldBoss = 3,--世界boss KillInvasion = 4, --击杀来犯 NeutralityPVE = 5,--中立PVE EnemyCountryPVE = 6, --敌国PVE } --任务接取类型 CountryWantedTask_Model.ReceiveType = { ReceiveAndShare = 0, -- 一键领取并自动共享 Share = 1, --一键分享 } function CountryWantedTask_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageEnterWantedTask, nil) --悬赏任务进入多人难度副本 --NetManager.RegisterMsgCB(MessageEnums.MessageWantedTaskUpdate, private.WantedTaskUpdateResp) --任务刷新 NetManager.RegisterMsgCB(MessageEnums.MessageWantedTaskPanel, private.WantedTaskPanelResp) --请求任务界面详情 NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushWantedTaskResultMsg,private.G2CPushWantedTaskResultMsg) --推送悬赏任务pve结算结果 NetManager.RegisterMsgCB(MessageEnums.MessageWantedTaskQuickReceive, private.WantedTaskQuickReceiveResp) --一键接取所有任务 end --region 网络相关 --同步任务信息 function CountryWantedTask_Model.SyncWantedTaskInfo(wantedTaskInfo) --logging.log(LTAG.LOG,"[ljtest] SyncWantedTaskInfo",wantedTaskInfo.starRewards,wantedTaskInfo.taskNum) --private.starRewards = wantedTaskInfo.starRewards --星级奖励 --private.taskNum = wantedTaskInfo.taskNum --接取任务数量 --private.starCount = wantedTaskInfo.starCount -- 星级达成数量 --简化后上面星级相关的数据不要了,服务器的逻辑还留着。留着注释,防止策划反悔。要回滚时看相关的提交 private.taskDoneNum = wantedTaskInfo.taskDoneNum --任务完成数量 end --悬赏任务进入多人难度副本(Req) --mapId 关卡id,bi用,fatherTaskId 父任务id,childTaskId 子任务id,activityId function CountryWantedTask_Model.EnterWantedTaskReq(mapId,fatherTaskId,childTaskId,activityId) local msg = wanted_task_pb.EnterWantedTaskReq() msg.mapId = mapId msg.fatherTaskId = fatherTaskId msg.childTaskId = childTaskId msg.activityId = activityId NetManager.SendMessage(MessageEnums.MessageEnterWantedTask, msg) end --推送悬赏任务pve结算结果 function private.G2CPushWantedTaskResultMsg(msg) --收到消息,离开副本 MDL.Level.SendRoleLeaveFuben() end --悬赏任务,任务刷新(Req)--目前没用到 --function CountryWantedTask_Model.WantedTaskUpdateReq() -- local msg = wanted_task_pb.WantedTaskUpdateReq() -- NetManager.SendMessage(MessageEnums.MessageWantedTaskUpdate, msg) --end --悬赏任务,任务刷新(Resp)--目前没用到 --function private.WantedTaskUpdateResp(msgResp) -- --logging.log(LTAG.LOG,"[ljtest] WantedTaskUpdateResp",msgResp.taskInfos,msgResp.updateNum) -- if msgResp.Resp.Code == 0 then -- private.taskInfos = msgResp.taskInfos -- 任务信息 -- private.updateNum = msgResp.updateNum -- 刷新次数 -- EventSystem.Dispatch(EventID.Country_WantedTask_RefreshTaskInfo) -- CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_Refresh_Success) -- end --end --悬赏任务,请求界面任务详情(Req) function CountryWantedTask_Model.WantedTaskPanelReq() local msg = wanted_task_pb.WantedTaskPanelReq() NetManager.SendMessage(MessageEnums.MessageWantedTaskPanel, msg) end --悬赏任务,请求界面任务详情(Resp) function private.WantedTaskPanelResp(msgResp) --logging.log(LTAG.LOG,"[ljtest] WantedTaskPanelResp",msgResp.taskInfos) if msgResp.Resp.Code == 0 then private.taskInfos = msgResp.taskInfos -- 任务信息 table.sort(private.taskInfos,private.SortTaskByQuality) private.updateNum = msgResp.updateNum -- 刷新次数 EventSystem.Dispatch(EventID.Country_WantedTask_RefreshTaskInfo) end end function private.SortTaskByQuality(a, b) local taskDataA = CountryWantedTask_Model.GetTaskWantedByID(a.wantedTaskId) local taskDataB = CountryWantedTask_Model.GetTaskWantedByID(b.wantedTaskId) return taskDataA.TaskQuality > taskDataB.TaskQuality end function CountryWantedTask_Model.WantedTaskQuickReceiveReq(type) if CTL.CountryWantedTask.CanShare() then private.shareTimeStamp = UTL.Time.GetLocalTimestamp() end local msg = wanted_task_pb.WantedTaskQuickReceiveReq() msg.receivedType = type -- 0是 一键领取,1是一键分享 private.receivedType = type --缓存下在数据回调里做处理 NetManager.SendMessage(MessageEnums.MessageWantedTaskQuickReceive, msg) end function private.WantedTaskQuickReceiveResp(msgResp) if msgResp.Resp.Code == 0 then if private.receivedType == CountryWantedTask_Model.ReceiveType.Share then EventSystem.Dispatch(EventID.Country_WantedTask_RefreshShareState) CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_ShareTip) elseif private.receivedType == CountryWantedTask_Model.ReceiveType.ReceiveAndShare then CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_GetTaskSuccess) EventSystem.Dispatch(EventID.Country_WantedTask_Receive) if CTL.CountryWantedTask.CanShare() then CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_ShareTip) end end CTL.Sound.PlayGameSound("UI_joinarmy") end end --共享按钮有一分钟的本地CD时间。 function CountryWantedTask_Model.GetShareCDTime() private.shareTimeStamp = private.shareTimeStamp or 0 local passTime = UTL.Time.GetLocalTimestamp() - private.shareTimeStamp return 10 - passTime end --endregion --region 数据相关 --悬赏任务信息 function CountryWantedTask_Model.GetTaskInfos() return private.taskInfos end --获取任务完成次数 function CountryWantedTask_Model.GetHasCompleteTaskNum() if private.taskDoneNum then return private.taskDoneNum end return 0 end --悬赏任务每日可接取数量 function CountryWantedTask_Model.GetTaskWantedDailyNum() return DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.WantedTask).DailyRefreshTimes end --根据子任务数据获取悬赏任务数据 function CountryWantedTask_Model.GetTaskWantedByTaskFatherIDAndChildId(taskFatherId,taskChildId) for k,v in DataSheetManager.TaskWanted:GetEnumerator() do if v.TaskFatherID == taskFatherId and v.CollectTaskChild == taskChildId then return v end end return nil end function CountryWantedTask_Model.GetTaskStarForShow(taskFatherId) for k,v in DataSheetManager.TaskWanted:GetEnumerator() do if v.TaskFatherID == taskFatherId then return v end end return nil end --获取悬赏任务数据 function CountryWantedTask_Model.GetTaskWantedByID(id) local data = DataSheetManager.TaskWanted:GetDataByID(id) if data == nil then logging.error(LTAG.ERROR,"GetTaskWantedByID not find",id) return nil end return data end --获取敌国数据 function CountryWantedTask_Model.GetEnemyCountryData() local enemyCountryData = {} local myKingdom = MDL.Country.GetMyCountryId() for k,v in DataSheetManager.CountryBase:GetEnumerator() do if v.ID ~= myKingdom then table.insert(enemyCountryData,v) end end return enemyCountryData end --获取任务完成条件参数 function CountryWantedTask_Model.GetTaskCompleteConditionParam(taskLineID,taskChildID) local taskChildData = DataSheetManager.TaskChildData:GetDataByTaskLineID_TaskChildID(taskLineID,taskChildID) if taskChildData == nil then return nil end local params = string.split(taskChildData.CompleteConditionParam, ";") return params end --获取任务地图参数 function CountryWantedTask_Model.GetMapItemIDParams(taskLineID,taskChildID) local taskChildData = DataSheetManager.TaskChildData:GetDataByTaskLineID_TaskChildID(taskLineID,taskChildID) if taskChildData == nil then return nil end local mapIdArray,npcIdArray = {},{} for i = 1, #taskChildData.MapItemID do if i%2 == 0 then table.insert(npcIdArray,taskChildData.MapItemID[i]) else table.insert(mapIdArray,taskChildData.MapItemID[i]) end end return mapIdArray,npcIdArray end --获取国家数据 function CountryWantedTask_Model.GetCountryData(countryId) return DataSheetManager.CountryBase:GetDataByID(countryId) end function CountryWantedTask_Model.GetCountryDataBySceneId(sceneId) for k,v in DataSheetManager.CountryBase:GetEnumerator() do if sceneId == v.SceneId then return v end end return nil end --endregion return CountryWantedTask_Model