|
|
- --[[
- @description:对话模块
- ]]
-
- require("game.dialogue.DialogueModel")
- require("game.dialogue.DialogueViewNew")
- require("game.dialogue.DialogueEvent")
- require("game.dialogue.vo.NpcDialogVo")
- require("game.dialogue.vo.DialogueNodeVo")
- -- require("game.dialogue.vo.DialogueTaskVo")
- require("game.dialogue.DialogueTypeConst")
- require("game.dialogue.DialogLang")
- require("game.dialogue.DialogueTaskBtnItem") -- 对话界面的任务item
- require("game.dialogue.DialogueChooseMessage") -- 对话选项提示
-
-
- DialogueController=DialogueController or BaseClass(BaseController)
- function DialogueController:__init()
- DialogueController.Instance=self
- self.dialogueView = nil
- self.dialogueModel = DialogueModel:getInstance()
- self.taskModel = TaskModel:getInstance()
- self.dialogueModel.autoIntoCopy = 0
- self:registerAllProtocals()
- self:addAllEvents()
-
- end
- function DialogueController:__delete()
-
- end
- function DialogueController:registerAllProtocals()
- self:RegisterProtocal(12101, "response12101") --获取指定npc关联的任务列表
- self:RegisterProtocal(12102, "response12102") --获取指定任务的对话列表
-
- self:RegisterProtocal(30003, "response30003") --接受任务
- self:RegisterProtocal(30004, "response30004") --完成任务
- self:RegisterProtocal(30007, "response30007") --任务对话事件
- self:RegisterProtocal(30008, "response30008")--任务探索事件件
- self:RegisterProtocal(30009, "response30009")--触发悬赏任务和社团周任务
- self:RegisterProtocal(30010, "response30010")--悬赏任务和社团周任务进度
- self:RegisterProtocal(30011, "response30011")--请求赏金和社团任务奖励,奖励是规则算出来的,所以不读配置
- self:RegisterProtocal(30012, "response30012")--上一个完成的任务id
- self:RegisterProtocal(30015, "response30015")--任务请求完成进度
-
-
- --切换活动镜像场景
- local function onSceneLoadViewComplete( )
- --如果是在副本里面,则等待
- if not self.dialogueModel.is_show_main_task_tips_flag and not SceneManager:getInstance():IsMirrorScene() and self.dialogueModel.is_delay_show_main_task_tips then
- local task_id = self.dialogueModel.is_delay_show_main_task_tips
- self.taskModel.now_task_id = nil
- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) --停止自动任务
-
- local function ok_callback()
- GlobalEventSystem:Fire(EventName.CLOSE_ALL_VIEW)
- self.taskModel.tip_new_main_line = task_id
- GuideController.Instance:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE, 9993150002)
- self.taskModel:Fire(TaskEvent.SHOW_NEW_MAIN_LINE_TIP)
- end
- local function cancle_callback()
- local next_task = self.taskModel:GetTaskByType(TaskType.BOUNTY_LINE)
- if next_task then
- self.taskModel.now_task_id = next_task.id
- else
- self.taskModel.now_task_id = task_id
- end
- self.taskModel:SetTaskAutoFlag(true)
- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
- end
-
- local str = "任务指引\n\n有新的主线任务,赶紧去看看吧!"
- Alert.show(str, Alert.Type.Two, ok_callback, cancle_callback, "确定", "继续任务")
- self.dialogueModel.is_show_main_task_tips_flag = true
- self.dialogueModel.is_delay_show_main_task_tips = false
- end
-
- end
- GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, onSceneLoadViewComplete)
-
-
- --新手期,跑环任务时升级,触发主线推荐
- local function onChangeLevel(level)
- if not self.dialogueModel.is_show_main_task_tips_flag and Config.ConfigTaskEffect.NewMainLineTipLvMin <= level and RoleManager.Instance.mainRoleInfo.level <= level then
- local cur_task = self.taskModel:GetCurTask()
- if cur_task and cur_task.type == TaskType.BOUNTY_LINE then
- local cur_main_task = self.taskModel:GetMainTask()
- if cur_main_task and level >= cur_main_task.level then
- self.taskModel.now_task_id = false
- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) --停止自动任务
- --如果是在副本里面,则等待
- if not SceneManager:getInstance():IsMirrorScene() then
- local function ok_callback()
- if cur_main_task then
- GlobalEventSystem:Fire(EventName.CLOSE_ALL_VIEW)
- self.taskModel.tip_new_main_line = cur_main_task.id
- GuideController.Instance:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE, 9993150002)
- self.taskModel:Fire(TaskEvent.SHOW_NEW_MAIN_LINE_TIP)
- end
- end
- local function cancle_callback()
- self.taskModel:SetTaskAutoFlag(true)
- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
- end
-
- local str = "任务指引\n\n有新的主线任务,赶紧去看看吧!"
- Alert.show(str, Alert.Type.Two, ok_callback, cancle_callback, "确定", "继续任务")
- self.dialogueModel.is_show_main_task_tips_flag = true
- else
- self.dialogueModel.is_delay_show_main_task_tips = cur_main_task.id
- end
- end
- end
- end
- end
- RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onChangeLevel)
- end
-
- function DialogueController:showDialogue(npcDialogVo)
- if self.dialogueView == nil then
- self.dialogueView = DialogueViewNew.New()
- end
-
- if self:IsShowCircleView(npcDialogVo) then
- local cfg1 = self.taskModel:GetTaskAcceptNpcConfig(TaskType.BOUNTY_LINE)
- local cfg2 = self.taskModel:GetTaskAcceptNpcConfig(TaskType.GUILD_LINE)
- --判断是否可领取奖励
- local task_type = false
- if npcDialogVo.npc_id == cfg1.npc_id then
- task_type = TaskType.BOUNTY_LINE
- elseif npcDialogVo.npc_id == cfg2.npc_id then
- task_type = TaskType.GUILD_LINE
- end
- GlobalEventSystem:Fire(EventName.OPEN_TASK_CIRCLE_TIPS, task_type, nil, npcDialogVo)
- return
- end
-
- if npcDialogVo and npcDialogVo.dialogList then
- self.dialogueView:Open(npcDialogVo)
- else
- if self.dialogueView:HasOpen() == true then
- self.dialogueView:Close()
- end
- end
- end
-
- function DialogueController:CloseDialoueView()
- if self.dialogueView and self.dialogueView:HasOpen() == true then
- self.dialogueView:Close()
- end
- end
-
- function DialogueController:addAllEvents()
- local function onRequestHandler(...)
- local args_list = {...}
- if args_list[1] == 30009 then
- self:SendFmtToGame(args_list[1], "c", args_list[2])
- elseif args_list[1] == 30010 or args_list[1] == 30019 then
- self:SendFmtToGame(args_list[1], "c", args_list[2])
- elseif args_list[1] == 30015 then
- self:SendFmtToGame(args_list[1], "cli", args_list[2], args_list[3], args_list[4])
- elseif args_list[1] == 30011 then
- self:SendFmtToGame(args_list[1], "i", args_list[2])
- else
- self:SendFmtToGame(args_list[1])
- end
- end
- self.dialogueModel:Bind(DialogueModel.REQUEST_CCMD_EVENT,onRequestHandler)
-
- local function taskFun(npcId, taskId, state)
- self:request12102(npcId, taskId, state)
- end
- self:Bind(DialogueModel.SELECT_TASK, taskFun )
-
- local function answer_fun(dialogueVo, dialogueNodeVo, selected,double)
- self:clickAnswerHandler(dialogueVo, dialogueNodeVo, selected,double)
- end
- self:Bind(DialogueModel.CLICK_ANSWER, answer_fun)
-
- local function showTask1(id)
- local level = RoleManager.Instance.mainRoleInfo.level
- -- if id == GuildModel.FEAST_NPC then
- -- --社团宴席npc, 请求是否可以采集
- -- GuildModel:getInstance():Fire(GuildModel.REQUEST_CCMD_EVENT, 40219)
- -- else
- if GetModuleIsOpen(500) and (id == EscortConst.START_NPC or id == EscortConst.KF_START_NPC) then --护送领取npc
- GlobalEventSystem:Fire(EscortConst.OPEN_ESCORT_VIEW, true)
- elseif GetModuleIsOpen(500) and (id == EscortConst.END_NPC or id == EscortConst.KF_END_NPC) and EscortModel:getInstance():IsEscortState( ) then --护送结算npc
- EscortModel:getInstance():Fire(EscortConst.REQUEST_SCMD_EVENT, 50003, 2)
- else
- self.dialogueModel.changeSceneClose=false
- self.dialogueModel.isAuto = false --发事件过来的要重置一下auto状态
- self:request12101(id)
- end
- end
- self:Bind(SceneEventType.SHOW_TASK, showTask1 )
-
- local function acceptTask1(id)
- self.dialogueModel.changeSceneClose=false
- self:acceptTask(id)
- end
- self:Bind(TaskEventType.SEND_TASK_ACCEPT, acceptTask1 )
-
- local function finishTask1(id, arr)
- self.dialogueModel.changeSceneClose=false
- self:finishTask(id, arr)
- end
- self:Bind(TaskEventType.SEND_TASK_FINISH, finishTask1 )
-
- local function taskQuest()
- self:request30008()
- end
- self:Bind(TaskEventType.TASK_QUEST, taskQuest)
-
- -- 超级强硬的关闭对话框
- local function OutCloseDialog()
- self:CloseDialoueView()
- self.dialogueModel.changeSceneClose=true
- self.taskModel.last_circle_tip_type = false
-
- --清理剧情软对话
- self.dialogueModel:CancelTaskTalkTimer()
- end
- GlobalEventSystem:Bind(SceneEventType.SCENE_CHANGED, OutCloseDialog)
-
- local close_fun = function ()
- self:CloseDialoueView()
- end
- GlobalEventSystem:Bind(SceneEventType.CLOSE_DIALOGUE_VIEW, close_fun)
-
- local game_start = function()
- setTimeout(function()
- if not self.preload_dialogue_view then
- local playerLv = RoleManager:getInstance():GetMainRoleVo().level
- if playerLv <= 120 then
- self.preload_dialogue_view = true
- if self.dialogueView == nil then
- self.dialogueView = DialogueViewNew.New()
- end
- self.dialogueView:Open()
- self.dialogueView:Hide()
- end
- end
- end,1.6)
- end
- GlobalEventSystem:Bind(EventName.GAME_START,game_start)
-
-
- local function on_choose_message( choose_type, choose_value )
- if not self.choose_message then
- self.choose_message = DialogueChooseMessage.New()
- end
- if self.choose_message:HasOpen() then
- self.choose_message:SetData(choose_type, choose_value)
- else
- self.choose_message:Open(choose_type, choose_value)
- end
- end
- GlobalEventSystem:Bind(DialogueModel.CHOOSE_MESSAGE_EVENT, on_choose_message)
-
-
- local function playerLevelUp()
- local task_id = TaskModel:getInstance().need_accept
- if task_id and task_id~=0 then
- --先判断等级
- local cfg = ConfigItemMgr.Instance:GetTaskData(task_id)
- if cfg then
- if RoleManager.Instance.mainRoleInfo.level >= cfg.level then
- self:acceptTask(task_id)
- TaskModel:getInstance().need_accept = nil
- end
- end
- end
- end
- RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL,playerLevelUp)
- end
-
- function DialogueController:request12101(id)
- self.taskModel.scmd12101Send = true
- self:SendFmtToGame(12101, "i", id)
- end
-
- function DialogueController:response12101()
- if not self.taskModel.scmd12101Send then
- return
- end
- self.taskModel.scmd12101Send = false
- local scmd12101 = SCMD12101.New(true)
- -- print("Saber:DialogueController [start:178] scmd12101 ------------------------------------------")
- -- PrintTable(scmd12101)
- scmd12101.task_id = 0
- self.dialogueModel.npcDialogVo = scmd12101
- local dialogid = self.dialogueModel:GetDialogueId(scmd12101.npc_id)
- local task = TaskModel:getInstance():GetTaskById(self.taskModel.now_task_id)
- if task and task.task_kind==TaskKind.DUN_KIND and task.content_id~=0 and task.acceptType==0 then
- --副本类型的任务,如果已经接过就做一个假任务对话
- if task.type==TaskType.GUILD_LINE or task.type==TaskType.BOUNTY_LINE then
- --赏金和社团任务要判断是否已经进行了任务对话 副本失败后,taskTips列表就只有副本步骤了
- self:showNpcTalk(dialogid,#scmd12101.task_list)
- return
- else
- --主线或者支线,就做一个假任务对话
- for k,v in pairs(task.taskTips) do
- if v.type==TaskTipType.TYPE2 and v.isFinish==0
- and scmd12101.npc_id==task.start_npc then
- local scmd12102 = SCMD12102.New()
- scmd12102.npc_id = task.start_npc
- scmd12102.task_id = task.id
- scmd12102.talk_id = task.start_talk
- self.dialogueModel.npcDialogVo = scmd12102
- self.dialogueModel.npcDialogVo.dialogList = ConfigItemMgr.Instance:GetTalkItem(self.dialogueModel.npcDialogVo.talk_id)
- self.dialogueModel.npcDialogVo.task_list = {}
- self:showDialogue(self.dialogueModel.npcDialogVo)
- return
- end
- end
- end
- end
- self:showNpcTalk(dialogid,#scmd12101.task_list)
-
- --如果没有任务,则播放声音
- if #scmd12101.task_list == 0 then
- SoundModel:getInstance():PlayNpcSound(scmd12101.npc_id)
- end
- end
-
- --[[
- * 显示对话
- * @param npcId NPCID
- * @param taskId 任务ID
- * @param state 任务状态
- *
- ]]
- function DialogueController:request12102(npcId, taskId, state)
- self:SendFmtToGame(12102, "ii", npcId, taskId)
- self.dialogueModel.isAuto = false
- end
-
- function DialogueController:response12102()
- if self.dialogueModel.changeSceneClose==true then
- -- 过滤掉延时的返回
- return
- end
- local scmd12102 = SCMD12102.New(true)
- -- print("Saber:DialogueController [start:261] scmd12102 ------------------------------------------")
- -- PrintTable(scmd12102)
- self.dialogueModel.npcDialogVo = scmd12102
- -- print("response12102:",self.dialogueModel.npcDialogVo.npc_id,self.dialogueModel.npcDialogVo.task_id,self.dialogueModel.npcDialogVo.talk_id)
- self.dialogueModel.npcDialogVo.dialogList = ConfigItemMgr.Instance:GetTalkItem(self.dialogueModel.npcDialogVo.talk_id)
- self.dialogueModel.npcDialogVo.task_list = {}
- --奖励这里获取
- self.dialogueModel.npcDialogVo.award = nil
- local temp = TaskModel.Instance:GetCanTaskById(self.dialogueModel.npcDialogVo.task_id);
- if temp == nil then
- temp = TaskModel.Instance:GetReceivedTaskById(self.dialogueModel.npcDialogVo.task_id);
- if temp then
- self.dialogueModel.npcDialogVo.award = temp.award_list
- end
- else
- self.dialogueModel.npcDialogVo.award = temp.award_list
- end
- if self.dialogueModel.npcDialogVo.dialogList and self.dialogueModel.npcDialogVo.dialogList.content then
- for k,v in ipairs(self.dialogueModel.npcDialogVo.dialogList.content) do
- for _,vo in ipairs(v.list) do
- if vo.type==0 and Trim(vo.text)=="" then
- --对话内容为空字符串,直接接受任务或者完成任务
- local data = TaskModel:getInstance():GetTaskById(scmd12102.task_id)
- if data then
- if data.acceptType==0 then
- self:finishTask(scmd12102.task_id)
- elseif data.acceptType==1 then
- -- 如果是转职任务,则记录接受任务时的玩家等级
- if self.taskModel:IsTurnTask(flag) then
- self.taskModel:RecordProcessingTurnTaskLevel()
- end
- self:acceptTask(scmd12102.task_id)
- end
- end
- return
- end
- end
- end
- end
- self:showDialogue(self.dialogueModel.npcDialogVo)
- SoundModel:getInstance():PlayTaskAcceptSound(scmd12102.task_id)
- end
-
- -- 接受任务
- function DialogueController:acceptTask(id)
- TaskController.Instance:Clear30000Timer()
- id = tonumber(id)
- local task = TaskModel:getInstance():GetTaskById(id)
- if task and task.task_kind==TaskKind.DUN_KIND and task.content_id~=0 then
- --副本类型的任务,如果已经接过就直接进入副本(特殊处理,副本失败是要重新接任务的)
- -- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
- local need_go_dun = true
- if task.type==TaskType.GUILD_LINE or task.type==TaskType.BOUNTY_LINE then
- self.taskModel.last_circle_tip_type = false--接任务的时候重置一下任务类型
- if self.dialogueModel.npcDialogVo and self.dialogueModel.npcDialogVo.npc_id then
- self:talkToNPC(self.dialogueModel.npcDialogVo.npc_id, task.id)
- --30007发送后会推送30001, 但是进度未完成,不会自动任务,这里手动请求30000
- TaskController.Instance:request30000()
- need_go_dun = false
- end
- else
- if task.acceptType==1 then
- TaskModel:getInstance().wait_30003 = true
- self:SendFmtToGame(30003, "i", id)
- -- 转职任务需要记录接受任务时的等级,判断断级
- end
- end
- if need_go_dun then
- BaseDungeonModel:getInstance():Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61001, task.content_id)
- end
- TaskModel:getInstance():SetNeedTaskFlag(true)
- else
- if task and (task.type==TaskType.GUILD_LINE or task.type==TaskType.BOUNTY_LINE) then
- self:talkToNPC(self.dialogueModel.npcDialogVo.npc_id, task.id)
- self.dialogueModel.isAuto = true
- --30007发送后会推送30001, 但是进度未完成,不会自动任务,这里手动请求30000
- TaskController.Instance:request30000()
- else
- TaskModel:getInstance().wait_30003 = true
- self:SendFmtToGame(30003, "i", id)
- self.dialogueModel.isAuto = true
- end
- end
- end
-
- function DialogueController:response30003()
- TaskModel:getInstance().wait_30003 = false
- local flag, msg = self:ReadFmt("ii")
- if flag==0 then
- -- if msg ~= TaskLang.TASK_STR81 then
- -- Message.show(Language.substitute(TaskLang.TASK_STR82, msg));
- -- end
- ErrorCodeShow(msg)
- else
- print('Ych:DialogueController.lua[436] data', TaskController.Instance.auto_accept_main_id , flag)
- if TaskController.Instance.auto_accept_main_id == flag then
- --当前这次不要主动做主线,所以自动接完任务也不要主动切换当前任务
- TaskController.Instance.auto_accept_main_id = nil
- else
- if self.taskModel:IsTurnTask(flag) then -- 转职任务需要特殊处理,接取到任务时需要判断是否时断级接取
- self.taskModel.now_task_id = not self.taskModel:IsNewTurnTaskInLimitLv() and flag or self.taskModel.now_task_id
- else
- self.taskModel.now_task_id = flag
- end
- end
- self.dialogueModel:CheckTaskTalkEvent(flag)
- -- Message.show("成功接受任务")
- -------接受任务mainui表现
- local data = {
- type = SceneSpecialTipType.task,
- isAccept = true,
- }
- CommonController.Instance:Fire(EventName.OPEN_SCENESPECIALTIPVIEW,data)
-
- SoundModel:getInstance():PlayTaskSound(flag)
- end
- -- print("30003============:", self.dialogueModel.isAuto, self.dialogueModel.npcDialogVo, flag, msg)
- -- if self.dialogueModel.isAuto == true and self.dialogueModel.npcDialogVo ~= nil then
- -- -- print("接受了任务后,这里又打开了对话==", self.dialogueModel.npcDialogVo.npc_id)
- -- self:request12101(self.dialogueModel.npcDialogVo.npc_id)
- -- end
-
- TaskController.Instance:HandleTask()
- end
- --double: 0是默认 1是双倍
- function DialogueController:finishTask(id, arr,double)
- TaskController.Instance:Clear30000Timer()
- self.dialogueModel.isAuto = true
- TaskModel:getInstance().wait_30004 = true
- arr = arr or {}
- double = double or 0
- local len = #arr
- self:WriteBegin(30004)
- self:WriteFMT("i", id)
- self:WriteFMT("c", double)
- self:WriteFMT("h", len)
- for i = 1, len do
- self:WriteFMT("i", arr[i])
- end
- self:SendToGame()
-
- -- self:Fire(EventName.TASK_CHANGE, id, 2)
- end
-
- function DialogueController:response30004()
- TaskModel:getInstance().wait_30004 = false
- local flag, code = self:ReadFmt("ii")
- local len = self:ReadFmt("h")
- local goods_list = {}
- local goods_list_2 = {}
- for i = 1, len do
- local obj = {
- style = self:ReadFmt("c"),
- typeId = self:ReadFmt("i"),
- count = self:ReadFmt("i"),
- }
- table.insert(goods_list, obj)
- -------------------------
- if obj.style == 5 then
- local have = false
- local goods_id = Config.ConfigNotNormalGoods[obj.style].goods_id
- for k,v in pairs(goods_list_2) do
- have = have or (v == goods_id)
- end
- if not have then
- goods_list_2[#goods_list_2+1] = goods_id
- end
- end
- end
-
- if flag == 0 then
- ErrorCodeShow(code)
- else
- -------完成任务mainui表现
- local data = {
- type = SceneSpecialTipType.task,
- isAccept = false,
- }
- CommonController.Instance:Fire(EventName.OPEN_SCENESPECIALTIPVIEW,data)
-
- --添加任务完成标识
- self.taskModel:AddFinishTask( flag )
-
- --如果是触发引导的任务, 就停止自动任务
- -- if Config.ConfigHelper.Task[flag] and not Config.ConfigHelper.NotStopList[flag] then
- -- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
- -- end
-
- --如果是主线
- if TaskModel:getInstance():IsMainTask(flag) then
- TaskModel:getInstance().last_finish_task_id = flag
- end
- -- 如果是转职任务,则记录完成任务时的玩家等级
- if self.taskModel:IsTurnTask(flag) then
- self.taskModel:RecordProcessingTurnTaskLevel()
- end
- --在副本里面出来
- -- if Config.ConfigHelper.NeedDelayExecute[flag] then
- -- GuideModel:getInstance():SetNeedDelayExecuteGuide(true)
- -- end
- print("完成任务, id====:", flag)
- if flag == self.taskModel.tip_new_main_line then
- --清掉继续主线提示
- self.taskModel.tip_new_main_line = false
- end
- -------------------------
- if Config.ConfigTaskEffect.GuideLevel < RoleManager.Instance.mainRoleInfo.level then
- if TaskModel:getInstance():IsCircleTask(flag) then--(非主线)只有跑环类会做完一个任务,自动衔接下一个同类任务的
- --起一个计时器,1s内收到30000协议并主动接主线任务的时候,不会停止自动任务
- TaskModel:getInstance().sign_mask_not_guide_wait_accept_main_task = true
- local function delay( )
- TaskModel:getInstance().sign_mask_not_guide_wait_accept_main_task = nil
- end
- setTimeout(delay,1)
- end
- end
- -------------------------
-
- local taskVo = TaskModel:getInstance():GetTaskById(flag)
- GlobalEventSystem:Fire(TaskEventType.TASK_SUCCESS, flag)
- self.taskModel.last_task_id_cache = flag
- self.taskModel.now_task_id = nil
- --如果是支线或者限时, 就不处理,避免中断其他任务
- -- if taskVo and taskVo.type~=TaskType.EXTENSION_LINE and taskVo.type~=TaskType.LIMIT_LINE then
- if taskVo then
- self.taskModel.last_task_type_cache = taskVo.type
- end
- -- end
-
- if taskVo and taskVo.type == TaskType.EXTENSION_LINE then
- --支线任务完成增加表现效果
- lua_soundM:PlayEffect(self, "extension_line_success", false, LuaSoundManager.SOUND_TYPE.ROLE)
- else
- SoundModel:getInstance():PlayTaskSound(flag)
- SoundModel:getInstance():PlayTaskCompleteSound(flag)
- end
-
- if taskVo and taskVo.type == TaskType.BOUNTY_LINE then
- --日常任务飘经验获得
- MainUIModel:getInstance():PlayGoodsFlyList(goods_list_2)
-
- self.dialogueModel.is_delay_show_main_task_tips = false
- self.dialogueModel.is_show_main_task_tips_flag = false
- --完成经验跑环时,会提示要不要做主线
- if Config.ConfigTaskEffect.NewMainLineTipLvMin <= RoleManager.Instance.mainRoleInfo.level and RoleManager.Instance.mainRoleInfo.level <= Config.ConfigTaskEffect.NewMainLineTipLvMax then
- local cur_main_task = self.taskModel:GetMainTask()
- if cur_main_task and RoleManager.Instance.mainRoleInfo.level >= cur_main_task.level then
- self.taskModel.now_task_id = nil
- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) --停止自动任务
- --如果是在副本里面,则等待
- if not SceneManager:getInstance():IsMirrorScene() then
- local function ok_callback()
- if cur_main_task then
- GlobalEventSystem:Fire(EventName.CLOSE_ALL_VIEW)
- self.taskModel.tip_new_main_line = cur_main_task.id
- GuideController.Instance:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE, 9993150002)
- self.taskModel:Fire(TaskEvent.SHOW_NEW_MAIN_LINE_TIP)
- end
- end
- local function cancle_callback()
- self.taskModel:SetTaskAutoFlag(true)
- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
- end
-
- local str = "任务指引\n\n有新的主线任务,赶紧去看看吧!"
- Alert.show(str, Alert.Type.Two, ok_callback, cancle_callback, "确定", "继续任务")
- self.dialogueModel.is_show_main_task_tips_flag = true
- else
- self.dialogueModel.is_delay_show_main_task_tips = cur_main_task.id
- end
- end
- end
- end
-
- --判断是否配置了自动接下个任务
- if taskVo and taskVo.next~=0 then
- if taskVo.type ~= TaskType.EXTENSION_LINE then --支线不需要自动触发下一个
- --先判断等级
- local cfg = ConfigItemMgr.Instance:GetTaskData(taskVo.next)
- if cfg then
- if RoleManager.Instance.mainRoleInfo.level >= cfg.level then
- self:acceptTask(taskVo.next)
- else
- -- if Config.ConfigTaskEffect.GuideLevel < RoleManager.Instance.mainRoleInfo.level then
- -- if TaskModel:getInstance():IsMainTask(flag) then
- -- --如果是非新手期,而且是完成主线,那就不用记录了,30000返回的时候主线就会被自动接掉
- -- return
- -- end
- -- end
- --升级了就触发
- TaskModel:getInstance().need_accept = taskVo.next
- end
- end
- end
- end
- end
- end
-
- --[[
- * 任务对话事件
- * @param npcId NPCID
- * @param taskId 任务ID
- *
- ]]
- function DialogueController:talkToNPC(npcId, taskId)
- self:SendFmtToGame(30007, "ii", taskId, npcId)
- self.dialogueModel.isAuto=true;
- end
-
- function DialogueController:response30007()
-
- end
-
- --任务探索事件
- function DialogueController:request30008()
- self:SendFmtToGame(30008)
- end
-
- function DialogueController:response30008()
-
- end
-
- function DialogueController:response30009()
- local code = self:ReadFmt("i")
- if code==1 then
- --Message.show("成功接受任务")
- -------接受任务mainui表现
- local data = {
- type = SceneSpecialTipType.task,
- isAccept = true,
- }
- TaskModel.getInstance():Fire(TaskEvent.SHOW_SCROLL_TO_ITEM, 1) --领取任务后,置顶任务栏
- CommonController.Instance:Fire(EventName.OPEN_SCENESPECIALTIPVIEW,data)
- else
- ErrorCodeShow(code)
- end
- end
-
- function DialogueController:response30010()
- local info = {}
- info.task_type = self:ReadFmt("c")
- info.cur_progress = self:ReadFmt("c")
- info.total_progress = self:ReadFmt("c")
- info.reward_progress = self:ReadFmt("c")
- TaskModel:getInstance():SetCircleTaskInfo(info)
- end
-
- function DialogueController:response30011( )
- local info = {}
- info.task_id = self:ReadFmt("i")
- local basedata=ConfigItemMgr.Instance:GetTaskData(info.task_id)
- --奖励
- local len0 = UserMsgAdapter.ReadFmt("h") or 0
- info.reward = info.reward or {}
- local vo0 = nil
- for i = 1,len0 do
- vo0 = {
- UserMsgAdapter.ReadFmt("c") or 0,
- UserMsgAdapter.ReadFmt("i") or 0,
- UserMsgAdapter.ReadFmt("l") or 0
- }
- table.insert(info.reward,vo0)
- end
-
- --额外奖励
- info.extra_reward = info.extra_reward or {}
- local len1 = UserMsgAdapter.ReadFmt("h") or 0
- local vo1 = nil
- for i = 1,len1 do
- vo1 = {
- UserMsgAdapter.ReadFmt("c") or 0,
- UserMsgAdapter.ReadFmt("i") or 0,
- UserMsgAdapter.ReadFmt("l") or 0
- }
- table.insert(info.extra_reward,vo1)
- end
-
- self.taskModel.circle_cache_reward = info
-
- GlobalEventSystem:Fire(EventName.UPDATE_TASK_BOUNTY_REWARD, info)
- -------------------------
- TaskModel:getInstance():Fire(TaskEvent.TASK_LIST_INIT)
- end
-
- function DialogueController:response30012()
- local task_id = self:ReadFmt("i")
- TaskModel:getInstance().last_finish_task_id = task_id
-
- GlobalEventSystem:Fire(EventName.REFRESH_CALL_STAR_MODEL)
-
- GlobalEventSystem:Fire(EventName.TASK_DATA_INIT)
- end
-
- function DialogueController:response30015()
- local code = self:ReadFmt("i")
- ErrorCodeShow(code)
- end
-
- --选择npc功能对话框
- function DialogueController:showNpcFunctionSelectTalk(talkid,taskCount)
- local dialogid = talkid
- local npcDialogVo = self.dialogueModel.npcDialogVo
- npcDialogVo.dialogId = dialogid
- npcDialogVo.dialogList = ConfigItemMgr.Instance:GetTalkItem(dialogid)
- if npcDialogVo.dialogList==nil then
- -- print("~~选择npc功能对话框~~~对话id is nil, 显示默认对话:",dialogid)
- npcDialogVo.dialogList=DialogueModel.DEFAULT_TALK
- if npcDialogVo.dialogList.content[1] then
- npcDialogVo.dialogList.content[1].id = npcDialogVo.npc_id
- end
- end
- -- 跳过空对话
- -- print("---------showNpcFunctionSelectTalk--------:", self.dialogueModel.isAuto, taskCount)
- if self.dialogueModel.isAuto == true and taskCount==0 then
- self.dialogueModel.isAuto = false
- return
- end
- self:showDialogue(npcDialogVo)
- end
-
- function DialogueController:showNpcTalk(talkid,taskCount)
- local dialogid = talkid
- local npcDialogVo = self.dialogueModel.npcDialogVo --12101
- local is_default_talk = false
- --[[
- 同个npc下面可能同时会有主线和支线任务,12101协议任务数据可能会有2条,
- 这样客户端就不知道应该选择哪个任务来触发相关操作, 所以在开始任务前,客户端先记下当前任务id,
- 这里判断12101协议里面的任务数据是不是存在当前客户端保存的当前任务id,存在的话就把非当前任务的数据删掉
- ]]
- -- 2019年11月6日修改:增加多任务过滤筛选出第一个要处理的任务
- -- 17:45分,天气晴,飒爽的秋风带来了冬季的寒意,窗外的阳光似乎没有了温度,而我心中只记得策划大佬突然又要改需求了(╯‵□′)╯︵┻━┻
-
- -- if self.taskModel.now_task_id and self.dialogueModel.npcDialogVo and #self.dialogueModel.npcDialogVo.task_list > 1 then
- if self.dialogueModel.mult_select_task_id and self.dialogueModel.npcDialogVo and #self.dialogueModel.npcDialogVo.task_list > 1 then
- local find = false
- for i,v in ipairs(self.dialogueModel.npcDialogVo.task_list) do
- if v.task_id == self.dialogueModel.mult_select_task_id then
- find = true
- break
- end
- end
- if find then
- local delete_index={}
- for i,v in ipairs(self.dialogueModel.npcDialogVo.task_list) do
- if v.task_id ~= self.taskModel.now_task_id then
- table.insert(delete_index,i)
- end
- end
- local del_num=0
- for i,v in ipairs(delete_index) do
- local index = v - del_num
- table.remove(self.dialogueModel.npcDialogVo.task_list, index)
- del_num = del_num + 1
- end
- -- else
- -- -- 对多任务进行排序,然后根据排好的顺序只选择第一个任务
- -- self.dialogueModel:SortMultTaskList(self.dialogueModel.npcDialogVo.task_list)
- -- for k = #self.dialogueModel.npcDialogVo.task_list , 1 do
- -- if k > 1 then
- -- table.remove(self.dialogueModel.npcDialogVo.task_list, k)
- -- end
- -- end
- end
- taskCount = 1
- end
- -- 每次走完多任务的判断都要保证多任务选择的任务id置空
- self.dialogueModel:SetMultSelectTaskID(nil)
- -- dialogid是目标npc默认的对话内容,如果为空则显示通用默认npc的对话,一般是npcid为0或者空的时候会出现
- npcDialogVo.dialogId = dialogid
- npcDialogVo.dialogList = ConfigItemMgr.Instance:GetTalkItem(dialogid)
- if npcDialogVo.dialogList==nil then
- print("~~~~~db里面找不到该对话id, 显示默认对话:",dialogid)
- npcDialogVo.dialogList=DialogueModel.DEFAULT_TALK
- is_default_talk = true
- if npcDialogVo.dialogList.content[1] then
- npcDialogVo.dialogList.content[1].id = npcDialogVo.npc_id
- end
- end
-
- -- 跳过空对话
- if self.dialogueModel.isAuto == true and taskCount==0 then
- self.dialogueModel.isAuto = false
- return
- end
- -- 判断是否是可选任务,是则不请求12102协议获取对话内容(仅需在只有一条任务数据的时候判断)
- local is_optional_task = false
- if taskCount == 1 and npcDialogVo.task_list and npcDialogVo.task_list[1] and npcDialogVo.task_list[1].task_id then
- local task_vo = TaskModel:getInstance():GetTaskById(npcDialogVo.task_list[1].task_id) or {}
- if task_vo.tipType then
- is_optional_task = is_optional_task or task_vo.tipType == TaskTipType.TYPE35
- local is_target_npc = task_vo.tipParam and task_vo.tipParam[3] == npcDialogVo.npc_id
- if is_optional_task and is_target_npc then
- npcDialogVo.task_id = npcDialogVo.task_list[1].task_id
- end
- end
- end
- --(task_state 0:无 1:有可接任务 2:有未完成的任务 3:有可提交的任务 4:有任务对话)
- local is_cur_select = npcDialogVo and npcDialogVo.task_list and npcDialogVo.task_list[1] and
- ((TaskModel:getInstance().now_task_id or 0) == 0 or TaskModel:getInstance().now_task_id == npcDialogVo.task_list[1].task_id)
- if is_cur_select and npcDialogVo.dialogList.total_content == 1 and npcDialogVo.dialogList.content[1].total_list == 1
- and taskCount == 1 and npcDialogVo.task_list[1].task_state~=2 and not is_optional_task then
- self:request12102(npcDialogVo.npc_id, npcDialogVo.task_list[1].task_id, npcDialogVo.task_list[1].task_state)
- else
- if npcDialogVo.npc_id == 0 and is_default_talk then --当npc_id 是0 ,而且是默认对话的时候,对话框就不显示出来了
- return
- end
-
- if self.dialogueModel.isAuto == false then
- self:showDialogue(npcDialogVo)
- elseif #npcDialogVo.task_list > 0 then
- -- self.model:SortMultTaskList(npcDialogVo.task_list)
- local isShow=false
- for _, taskNodeVo in pairs(npcDialogVo.task_list) do
- if taskNodeVo.task_state ~= 2 then
- isShow=true
- break
- end
- end
- if isShow==true and npcDialogVo.dialogId and npcDialogVo.dialogId ~= 0 then
- self:showDialogue(npcDialogVo)
- end
- end
- end
- self.dialogueModel.isAuto=false
- end
-
- --[[
- * 点击NPC对话框确定按钮
- * @param e
- *
- ]]
- function DialogueController:clickAnswerHandler(dialogueVo, dialogueNodeVo, selected,double)
- selected = selected or false
- local typeId = 0
- --任务的操作
- self.dialogueModel.andTriggerTask = nil
- if dialogueNodeVo.type == DialogueTypeConst.FINISH_AND_TRIGGER then
- self.dialogueModel.andTriggerTask = dialogueNodeVo
- self:finishTask(dialogueVo.task_id,false,double);
- elseif dialogueNodeVo.type == DialogueTypeConst.TRIGGER then
- self:acceptTask(dialogueVo.task_id);
- elseif dialogueNodeVo.type == DialogueTypeConst.FINISH then
- self:finishTask(dialogueVo.task_id,false,double);
- elseif dialogueNodeVo.type == DialogueTypeConst.TRIGGER_AND_FINISH then
- elseif dialogueNodeVo.type == DialogueTypeConst.TALK_EVENT then
- self:talkToNPC(dialogueVo.npcId, dialogueVo.task_id)
- end
- end
-
- -- 是否是显示跑环界面
- function DialogueController:IsShowCircleView( npcDialogVo )
- -------------------------
- local cfg1 = self.taskModel:GetTaskAcceptNpcConfig(TaskType.BOUNTY_LINE)
- local cfg2 = self.taskModel:GetTaskAcceptNpcConfig(TaskType.GUILD_LINE)
- if not (npcDialogVo.npc_id == cfg1.npc_id or npcDialogVo.npc_id == cfg2.npc_id) then
- --当前不是跑环npc
- return false
- end
- -------------------------
- --判断是否可领取奖励
- local task_type = false
- if npcDialogVo.npc_id == cfg1.npc_id then
- task_type = TaskType.BOUNTY_LINE
- elseif npcDialogVo.npc_id == cfg2.npc_id then
- task_type = TaskType.GUILD_LINE
- end
- local reward_data = self.taskModel:CanCircleReward(task_type)
- if reward_data then
- return true
- end
- -------------------------
- if npcDialogVo.task_id == 0 then
- --身上没任务,首次接任务用对话框
- return false
- end
- local task = TaskModel:getInstance():GetTaskById(npcDialogVo.task_id)
- if not task then return false end
- local is_circle_line = task.type==TaskType.GUILD_LINE or task.type==TaskType.BOUNTY_LINE
- if is_circle_line then
- if task.tipType == TaskTipType.TYPE35 and self.taskModel.last_circle_tip_type == task.tipType then
- --多选任务,而且上一次跑环tip显示的是多选类,那就显示普通对话
- return false
- end
- if task.acceptType==0 and self.taskModel:IsTaskProgressFinish(task) then
- --任务已完成等结束
- return false
- end
- if task.taskTips and task.taskTips[1] and task.taskTips[1].isFinish == 0 then
- --第一步改成弹界面
- return true
- end
- end
- return false
- end
|