|
|
- DialogueViewNew = DialogueViewNew or BaseClass(BaseView)
- local DialogueViewNew = DialogueViewNew
-
- local DialogVoiceFlag = {
- CN = 1,
- JP = 2,
- EN = 3,
- }
- local ROLE_CON_POS = {
- x = -515,
- y = -359,
- }
-
- function DialogueViewNew:__init()
- self.base_file = "dialogue"
- self.layout_file = "DialogueViewNew"
- self.layer_name = "Main"
- self.destroy_imm = true
- self.use_background = true
- -- self.blur_activity_bg = true
- self.ignore_use_anim = true
- self.close_fog = true
- self.change_scene_close = true
- self.append_to_ctl_queue = false --是否要添加进界面堆栈
- -- self.is_set_order_sorting = false
- -- self.hide_maincancas = true --不要走通用逻辑,通用逻辑会隐藏场景对象,这里要显示出来,改为手动调用
- self.is_set_order_sorting = false
-
- self.model = DialogueModel:getInstance()
- self.dialogIndex = 1 --当前对话下标
- self.btnStatus = -1 --1离开,2继续对话,3完成任务
- self.item_list = {} --奖励列表
- self.task_item_list = {} --多任务按钮列表
- self.auto_mult_task_cache_data = nil--多任务自动任务数据缓存
- self.is_chooseing_option = false --是否正在选择任务选项
- self.option_cfg = nil --可选任务的内容配置
- self.auto_time = 8 --自动任务倒计时
- self.ask_task_str = "" --选择答案对话任务的内容
-
- self.background_alpha = 0.7
- TaskModel:getInstance().last_circle_tip_type = false--重置跑环标记
-
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- end
- self.open_callback = function ( )
- self:OpenSuccess()
- self:SetMainUIHideFlag(true)
- -- LuaViewManager.ChangeMainCanvasVisible(lua_viewM, false)
- -- MainCamera:getInstance():SetPostEffectEnable(false)
- -- MainCamera:getInstance():SetMainCameraCullingMask(UIPartical.RenderingOther_List.Ground, true)
- end
- self.close_callback = function ( )
- self:SetMainUIHideFlag(false)
- end
-
- self.destroy_callback = function ( )
- -- LuaViewManager.ChangeMainCanvasVisible(lua_viewM, true)
- -- ChatModel:getInstance():Fire(ChatModel.HIDE_MIAN_UI_CHAT_VIEW,false)
- -- ChatModel:getInstance():Fire(ChatModel.HIDE_MIAN_UI_CHAT_VIEW,true)
- -- LuaViewManager.BocastChangeVisibleEvent(lua_viewM)
- -- MainCamera:getInstance():SetPostEffectEnable(true)
- self:DestroySuccess()
- end
- end
-
- function DialogueViewNew:SetMainUIHideFlag( need_hide )
- GlobalEventSystem:Fire(EventName.HIDE_MINI_MAP_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- GlobalEventSystem:Fire(EventName.HIDE_LEFT_BOTTOM_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- GlobalEventSystem:Fire(EventName.HIDE_RIGHT_BOTTOM_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE, false)
- GlobalEventSystem:Fire(EventName.HIDE_MAIN_CHAT_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- GlobalEventSystem:Fire(EventName.HIDE_MAINROLE_HEAD_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- GlobalEventSystem:Fire(EventName.HIDE_TASK_TEAM_VIEW, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- GlobalEventSystem:Fire(EventName.HIDE_RIGHT_TOP_ICON, need_hide, MainUIModel.LOCK_SCREEN_MODE)
- if need_hide then
- ItemUseModel:getInstance():HideItemUseView( )
- else
- ItemUseModel:getInstance():ShowItemUseView( )
- end
- end
-
- function DialogueViewNew:Open( npcDialogVo )
- self.npcDialogVo = npcDialogVo
- --本服团战活动,时间要延长到20秒
- if npcDialogVo and GuildModel.getInstance():IsGuildWarNpcId(npcDialogVo.npc_id)then
- local t = self.npcDialogVo
- if t and t.dialogList and t.dialogList.content and t.dialogList.content[1] and t.dialogList.content[1].list and t.dialogList.content[1].list[1] then
- t.dialogList.content[1].list[1].text = GuildModel.getInstance():GetGuildWarNpcTalkContent()
- end
- self.auto_time = 20
- end
- if IsTableEmpty(self.npcDialogVo) then
- print("error !!! npcDialogVo is null ")
- return
- end
- self:CheckGudie()
- BaseView.Open(self)
- end
-
-
- function DialogueViewNew:LoadSuccess()
- self.nodes = {
- "con/time:obj:tmp", "con/taskBtnCon:obj",
- "con/taskBtnCon/click_btn:obj",
- "con/taskBtnCon/click_btn/click_btn_lable:tmp",
- "con/taskBtnCon/sureBtn:obj",
- "con/role_con",
- "click_bg:obj",
- "con/content_bg:obj:img",
- "con/content_btn:obj",
- "con/name_con/npc_name:obj:tmp",
- "con/mult_task_con:obj",
- "con/award_conta",
- "con/content:tmp",
- "con/optional_conta:obj",
- "con/optional_conta/optional_group/option_1:obj",
- "con/optional_conta/optional_group/option_1/option1_txt:tmp",
- "con/optional_conta/optional_group/option_2:obj",
- "con/optional_conta/optional_group/option_2/option2_txt:tmp",
- "con/optional_conta/optional_group/option_3:obj",
- "con/optional_conta/optional_group/option_3/option3_txt:tmp",
- "con/optional_conta/option_time:obj:tmp",
- "con/my_role_con",
- "con/click_effect",
- ----------------------
- "con/voiceCon:obj",
- "con/voiceCon/cn_voice:obj", "con/voiceCon/cn_voice/cn_voice_icon:img",
- "con/voiceCon/jp_voice:obj", "con/voiceCon/jp_voice/jp_voice_icon:img",
- "con/voiceCon/en_voice:obj", "con/voiceCon/en_voice/en_voice_icon:img",
- }
- self:GetChildren(self.nodes)
- -- SetLocalPosition(self.transform, self.transform.localPosition.x, -ScreenHeight/2, 360)
- -- 往下对齐
- self.transform.anchoredPosition = Vector3(0,0,0)
- self.voiceCon_obj:SetActive(false)
-
- self.transform.sizeDelta = Vector2(ScreenWidth,ScreenHeight)
- UIDepth.SetUIDepth(self.gameObject,true,UIPartical.Start_SortingOrder_list.UI-50)
-
- -- local function bg_back_func( )
- -- if self.background_wnd and self.background_wnd_raw then
- -- self:MoveUIToBack(self.background_wnd_raw, nil, nil, {is_hide=true})
- -- self:MoveUIToBack(self.content_bg_img)
- -- end
- -- end
- -- if self.background_wnd then
- -- bg_back_func()
- -- else
- -- self.bg_back_func = bg_back_func
- -- end
-
- --设置确定按钮的位置
- GuideModel.getInstance():SetGuideCachePos(self.click_btn, GuideModel.CACHE_POS_TYPE.DIALOGUE_CLICK_BTN)
-
- self:AddToStageHandler()
-
- -- 初始化语音
- self:SelectVoice(DialogVoiceFlag.CN)
- -- 初始化模型展示位置
- SetLocalPosition(self.role_con, ROLE_CON_POS.x, ROLE_CON_POS.y, 0)
- --npc音效
- local npc_id = self.npcDialogVo and self.npcDialogVo.npc_id
- if npc_id then
- local sound_cfg = Config.ConfigSound.NpcSound[npc_id]
- if sound_cfg then
- if not lua_soundM:PlayingSoundEffect(sound_cfg.sound, 30) then
- self:CancelNpcSoundId()
- self.npc_sound_id = lua_soundM:PlayEffect(lua_soundM, sound_cfg.sound, false, LuaSoundManager.SOUND_TYPE.NPC, sound_cfg.volume, 1)
- end
- end
- end
- end
-
- function DialogueViewNew:CancelNpcSoundId( )
- if lua_soundM and self.npc_sound_id then
- lua_soundM:StopEffect(lua_soundM, LuaSoundManager.SOUND_TYPE.NPC, self.npc_sound_id)
- self.npc_sound_id = nil
- end
- end
-
- function DialogueViewNew:AddEvent()
- local click_btn_func = function ()
- -- 存在多任务的缓存任务,则继续自动进行多任务缓存的任务
- if self.auto_mult_task_cache_data then
- self:ClickMultTaskBtnFunc(self.auto_mult_task_cache_data)
- else
- self:OnTaskSelect()
- end
- end
- local function on_click( target )
- if target == self.click_btn_obj or target == self.content_btn_obj or target == self.sureBtn_obj then
- click_btn_func()
- elseif target == self.option_1_obj then
- self:SelectOptionalTask(1)
- elseif target == self.option_2_obj then
- self:SelectOptionalTask(2)
- elseif target == self.option_3_obj then
- self:SelectOptionalTask(3)
- elseif target == self.click_bg_obj then
- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- if task and (task.type == TaskType.MAIN_LINE or task.type == TaskType.GUILD_LINE or task.type == TaskType.BOUNTY_LINE) then
- click_btn_func()
- else
- self:Close()
- end
- elseif target == self.cn_voice_obj then
- self:SelectVoice(DialogVoiceFlag.CN)
- elseif target == self.jp_voice_obj then
- self:SelectVoice(DialogVoiceFlag.JP)
- elseif target == self.en_voice_obj then
- self:SelectVoice(DialogVoiceFlag.EN)
- end
- end
- AddClickEvent(self.click_btn_obj, on_click)
- AddClickEvent(self.sureBtn_obj, on_click)
- AddClickEvent(self.click_bg_obj, on_click)
- AddClickEvent(self.content_btn_obj, on_click)
- AddClickEvent(self.option_1_obj, on_click)
- AddClickEvent(self.option_2_obj, on_click)
- AddClickEvent(self.option_3_obj, on_click)
- AddClickEvent(self.cn_voice_obj, on_click)
- AddClickEvent(self.jp_voice_obj, on_click)
- AddClickEvent(self.en_voice_obj, on_click)
-
- local function on_close()
- self:Close()
- end
- self.stop_task_id = GlobalEventSystem:Bind(EventName.STOP_AUTO_DO_TASK, on_close)
-
- local function on_change_reward(info)
- local total_list = {}
- local function insert_data( data )
- --这里不需要分开显示了,放一起
- local have = false
- for k,v in pairs(total_list) do
- if v[1] == data[1] and v[2] == data[2] then
- v[3] = v[3] + data[3]
- have = true
- end
- end
- if not have then
- table.insert(total_list, data)
- end
- end
- for index, vo in ipairs(info.reward) do
- insert_data(vo)
- end
- for index, vo in ipairs(info.extra_reward) do
- insert_data(vo)
- end
-
- if self.npcDialogVo then
- self.npcDialogVo.award = total_list
- end
- self:SetAwardList()
- end
- self.update_bounty_reward_id = GlobalEventSystem:Bind(EventName.UPDATE_TASK_BOUNTY_REWARD, on_change_reward)
-
- local function onGuideTrigger()
- self:AddToStageHandler()
- end
- self.guide_trigger_id = GlobalEventSystem:Bind(EventName.TRIGGER_GUIDE_TYPE,onGuideTrigger)
- end
-
- function DialogueViewNew:OpenSuccess()
- --停止自动战斗、自动任务
- GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT,false,true)
- TaskController.Instance:ClearAutoDoTaskTimer()
- --每次设置数据时清空多任务自动进行的缓存
- self.auto_mult_task_cache_data = nil
- self.dialogIndex = 1
-
- self:UpdateView()
- end
-
- function DialogueViewNew:UpdateView()
- --先刷新按钮,再刷新对话,这里顺序不要调整,因为是根据self.dialogIndex去取按钮状态,UpdateDialogueInfo会累计self.dialogIndex
- self:UpdateBtnInfo()
- self:UpdateDialogueInfo()
-
- self:CreateTimer()
- end
-
- --更新对话框内容
- function DialogueViewNew:UpdateDialogueInfo( )
- self.cur_is_finsih_task = false -- 标识本次对话是否属于完成任务的对话
- if self.dialogIndex > self.npcDialogVo.dialogList.total_content then
- self:Close()
- return
- end
-
- local dialogContent = self.npcDialogVo.dialogList.content[self.dialogIndex]
- if not dialogContent then
- return
- end
- self.dialogIndex = self.dialogIndex + 1
-
- local askStr = ""
- self.dialogDic = {}
- local nameStr = ""
-
- for i = 1, dialogContent.total_list do
- local node = {
- type = 0, --类型
- text = "", --对话内容
- otherInfos = {}, --其他信息
- }
- node.type = dialogContent.list[i].type
- node.text = dialogContent.list[i].text
- node.otherInfos = Split(dialogContent.list[i].other, "|")
- local eventText = node.type .. "|" .. i
- self.dialogDic[eventText] = node
- --NPC对话内容
- if node.type == DialogueTypeConst.NPC then
- --NPC名称
- askStr = askStr .. WordManager:changeWords(node.text)
- if self.taskDialog == true then
- self:SetBtnState(1)
- end
- --角色对话内容
- elseif node.type == DialogueTypeConst.ROLE then
- nameStr = RoleManager.Instance.mainRoleInfo.name
- askStr = askStr .. WordManager:changeWords(node.text)
- self:SetBtnState(1)
- --完成任务
- elseif node.type == DialogueTypeConst.FINISH or node.type == DialogueTypeConst.TALK_EVENT
- or node.type == DialogueTypeConst.TRIGGER_AND_FINISH
- or node.type == DialogueTypeConst.FINISH_AND_TRIGGER then
- self:SetBtnState(2)
- self.btnData = eventText
- self.cur_is_finsih_task = true
- --触发任务
- elseif node.type == DialogueTypeConst.TRIGGER then
- self:SetBtnState(3)
- self.btnData = eventText
- end
- end
-
- -- 设置任务按钮样式
- self:ShowFinishBtn(self.cur_is_finsih_task == true)
-
- --选项任务指定的默认对话,服务端12101发过来的,只是单纯用来显示对话文本而已
- local show_talk = 0
- for k,v in pairs(self.npcDialogVo.task_list) do
- if v.show_talk ~= 0 then
- show_talk = v.show_talk
- break
- end
- end
- if self.ask_task_str ~= "" then
- self.content_tmp.text = self.ask_task_str
- elseif show_talk > 0 then
- local temp_talk_cfg = ConfigItemMgr.Instance:GetTalkItem(show_talk)
- local str = temp_talk_cfg and temp_talk_cfg.content[1] and temp_talk_cfg.content[1].list[1].text
- self.content_tmp.text = str and Trim(str) or Trim(askStr)
- else
- self.content_tmp.text = Trim(askStr)
- end
-
- --对话模型
- self:SetRoleModel(dialogContent, nameStr)
- --设置物品奖励
- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- if task and task.type and (task.type == TaskType.BOUNTY_LINE or task.type == TaskType.GUILD_LINE) then
- --跑环奖励是需要额外请求协议获得的
- DialogueModel:getInstance():Fire(DialogueModel.REQUEST_CCMD_EVENT, 30011, self.npcDialogVo.task_id)
- else
- self:SetAwardList()
- end
- end
-
- function DialogueViewNew:SetBtnState(state)
- self.btnStatus = state + 1
- end
-
- function DialogueViewNew:SetRoleModel( dialogContent, nameStr )
- local function timer_func( )
- if nameStr == RoleManager.Instance.mainRoleInfo.name then --玩家自己的头像
- -- self.role_con.gameObject:SetActive(false)
- -- self.my_role_con.gameObject:SetActive(true)
-
- self.npc_name_tmp.text = RoleManager.Instance.mainRoleInfo.name
- local main_vo = RoleManager.Instance.mainRoleInfo
- local model_id, texture_id = main_vo:GetRoleClotheTextureId()
- local weapon_model_id, weapon_texture_id = main_vo:GetWeaponClotheId()
- local head_model_id,head_clothe_id = main_vo:GetRoleHeadId()
- local data = {
- career = main_vo.career,
- clothe_res_id = main_vo:GetRoleClotheId(),
- weapon_res_id = weapon_model_id,
- weapon_clothe_id = weapon_texture_id,
- role_type = SceneBaseType.Role,
- fashion_model_id = model_id,
- texture_id = texture_id,
- wing_id = main_vo.wing_id,
- image_id = main_vo.image_id,
- head_wear_id = head_model_id,
- head_clothe_id = head_clothe_id,
- size = Vector2(666,819),
- scale = 350,
- position = Vector3(40, 200, 0),
- action_name_list = {"show"},
- show_shadow = false,
- use_bloom = false,
- raycastParent = false,
- role_position_offset = true,
- can_rotate = false,
- rotate = -5,
- }
- lua_resM:SetRoleModel(self,self.role_con,data)
-
- else --NPC头像
- local icon_id = 0
- local weapon_id = 0
- local texture_id = 0
- local npc_config = ConfigItemMgr.Instance:GetNpcItem(self.npcDialogVo.npc_id)
- if npc_config then
- icon_id = npc_config.icon
- nameStr = Trim(npc_config.name)
- weapon_id = npc_config.arm_id
- texture_id = npc_config.texture_id
- end
- if icon_id ~= 0 then
- self.role_con.gameObject:SetActive(true)
-
- self.npc_name_tmp.text = nameStr
- local npc = Scene.Instance:GetNpc(self.npcDialogVo.npc_id)
-
- --RT
- -- local data = {
- -- clothe_res_id = icon_id,
- -- weapon_res_id = weapon_id,
- -- role_type = SceneBaseType.Npc,
- -- texture_id = texture_id,
- -- image_id = texture_id,
- -- size = Vector2(716,882),
- -- scale = 100,
- -- position = Vector3(10, 50, 0),
- -- action_name_list = {"casual", "idle"},
- -- show_shadow = false,
- -- raycastParent = false,
- -- can_rotate = false,
- -- renderSize = Vector2(716,882),
- -- use_bloom = true,
- -- }
- -- lua_resM:SetRoleModelByRT(self,self.role_con,data)
-
- --直接挂模型
- local data = {
- clothe_res_id = icon_id,
- weapon_res_id = weapon_id,
- role_type = SceneBaseType.Npc,
- texture_id = texture_id,
- image_id = texture_id,
- size = Vector2(716,882),
- scale = 380,
- position = Vector3(40, 200, 0),
- action_name_list = {"casual", "idle"},
- show_shadow = false,
- raycastParent = false,
- can_rotate = false,
- }
- lua_resM:SetRoleModel(self,self.role_con,data)
-
-
- else
- self.role_con.gameObject:SetActive(false)
- self.npc_name_obj:SetActive(false)
- end
- end
- end
- --延迟一帧
- if not self.show_figure_timer_id then
- self.show_figure_timer_id = GlobalTimerQuest:AddDelayQuest(timer_func, 0.04)
- end
- end
-
- function DialogueViewNew:SetAwardList( )
- for i, v in pairs(self.item_list) do
- v:SetVisible(false)
- end
- if self.npcDialogVo and self.npcDialogVo.award ~= nil then
- local award_list = self.npcDialogVo.award
- for i, v in ipairs(award_list) do
- local item = self.item_list[i]
- if item == nil then
- item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.award_conta)
- self.item_list[i] = item
- end
- item:SetVisible(true)
- item:SetItemSize(62, 62)
- local goods_id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- item:SetData(goods_id, v[3], nil, nil, lock)
- item:SetPosition((i - 1) * 72 + 15, 4)
- end
- end
- end
-
- --更新按钮状态
- function DialogueViewNew:UpdateBtnInfo( )
- --跑环的起点任务
- self.fake_circle_btn_id = false
- self.ask_task_str = ""
- local show_task = {}
- if self.npcDialogVo and self.npcDialogVo.task_list then
- show_task = DeepCopy(self.npcDialogVo.task_list)
- local scene_id = SceneManager.Instance:GetSceneId()
- local npc_cfg = TaskModel:getInstance():GetTaskAcceptNpcConfig()
- if scene_id == npc_cfg[6].scene_id and self.npcDialogVo.npc_id == npc_cfg[6].npc_id then
- if TaskModel:getInstance():CanAcceptCircleTask( TaskType.GUILD_LINE ) and GetModuleIsOpen(300,2) then
- if TaskModel:getInstance():GetGuildTipTask( TaskType.GUILD_LINE ) then
- table.insert( show_task, TaskModel:getInstance():GetGuildTipTask( TaskType.GUILD_LINE ) )
- self.fake_circle_btn_id = TaskModel:getInstance():GetGuildTipTask( TaskType.GUILD_LINE ).task_id
- end
- end
- end
- if scene_id == npc_cfg[7].scene_id and self.npcDialogVo.npc_id == npc_cfg[7].npc_id then
- local test = TaskModel:getInstance():CanAcceptCircleTask( TaskType.BOUNTY_LINE )
- if TaskModel:getInstance():CanAcceptCircleTask( TaskType.BOUNTY_LINE ) and GetModuleIsOpen(300,1) then
- if TaskModel:getInstance():GetBountyTipTask( TaskType.BOUNTY_LINE ) then
- table.insert( show_task, TaskModel:getInstance():GetBountyTipTask( TaskType.BOUNTY_LINE ) )
- self.fake_circle_btn_id = TaskModel:getInstance():GetBountyTipTask( TaskType.BOUNTY_LINE ).task_id
- end
- end
- end
- end
-
- self.time_obj:SetActive(true)
- if self.npcDialogVo and #self.npcDialogVo.task_list > 1 then
- --多任务
- -- self.click_btn_obj:SetActive(false)
- self.taskBtnCon_obj:SetActive(false)
- self:SetOptionalTaskData(false)
- self:CreateMultTaskBtn(show_task)
- else
- --按钮重置,默认单选项主线
- self.mult_task_con_obj:SetActive(false)
- self:SetOptionalTaskData(false)
- -- self.click_btn_obj:SetActive(true)
- self.taskBtnCon_obj:SetActive(true)
- -- SetAnchoredPositionY( self.time.transform, -277 )
- self.time.transform.anchoredPosition = Vector3(545, -32, 0)
- -- self:ShowFinishBtn(false)
- local btn_cfg_txt = ""
- if self.npcDialogVo.task_id and self.npcDialogVo.task_id == 0 then
- btn_cfg_txt = "我知道了" --当前npc没任务
- else
- local task_cfg = ConfigItemMgr.Instance:GetTaskData(self.npcDialogVo.task_id)
- btn_cfg_txt = task_cfg and task_cfg.bt_text and Trim(task_cfg.bt_text) or "继续任务"
- end
-
- if self.dialogIndex < self.npcDialogVo.dialogList.total_content then -- 多个对话内容时,提示为点击继续
- self.click_btn_lable_tmp.text = btn_cfg_txt ~= "" and btn_cfg_txt or "继续任务"
- elseif self.dialogIndex == self.npcDialogVo.dialogList.total_content and self.npcDialogVo.task_id ~= 0 then
- self:ShowContinueBtn()
- -- self:ShowFinishBtn(true)
- self.click_btn_lable_tmp.text = btn_cfg_txt ~= "" and btn_cfg_txt or "继续任务"
- elseif self:CanBeginCircleTask() then
- --如果是社团使者而且未接社团任务 / 赏金使者而且未接赏金任务
- self.click_btn_lable_tmp.text = btn_cfg_txt ~= "" and btn_cfg_txt or "继续任务"
- self.ask_task_str = Config.ConfigTaskEffect.DefaultGuildTaskDialogueContent
- else
- local npc_cfg = ConfigItemMgr.Instance:GetNpcItem(self.npcDialogVo.npc_id)
- local npc_default_btnstr = npc_cfg and Trim(npc_cfg.bt_text)
- self.click_btn_lable_tmp.text = npc_default_btnstr ~= "" and npc_default_btnstr or btn_cfg_txt
- end
- end
- end
-
- -- 显示完成任务按钮(不显示按钮时显示箭头按钮)
- function DialogueViewNew:ShowFinishBtn( bool )
- if not bool then return end
- self.click_btn_obj:SetActive(bool)
- self.sureBtn_obj:SetActive(not bool)
- end
-
- function DialogueViewNew:ShowContinueBtn()
- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- if task then
- if task.type == TaskType.MAIN_LINE or task.type == TaskType.EXTENSION_LINE or task.type == TaskType.BOUNTY_LINE then
- --主线支线跑环
- for k, v in pairs(task.taskTips) do
- if v.type == TaskTipType.TYPE35 and v.isFinish == 0 then -- 如果是可选选项任务
- self:SetOptionalTaskData(true, v)
- self.ask_task_str = task.description
- break
- end
- end
- end
- end
- end
-
- -- 设置可选任务数据,没有正确答案了,两个选项都可以走
- function DialogueViewNew:SetOptionalTaskData(show, task_tip_vo)
- if show and task_tip_vo then
- -- SetAnchoredPositionY( self.time.transform, -52 )
- self.time_obj:SetActive(false)
- self.optional_conta_obj:SetActive(true)
- -- self.click_btn_obj:SetActive(false)
- self.taskBtnCon_obj:SetActive(false)
- self.is_chooseing_option = true
- self.option_cfg = TaskModel:getInstance():GetOptionalTaskCfg(self.npcDialogVo.task_id)
- if not self.option_cfg then
- print("error OptionalTaskCfg is null, task_id = "..tostring(self.npcDialogVo.task_id))
- return
- end
- local option_count = #self.option_cfg.talk_list
-
- if option_count == 3 then
- self.option_3_obj:SetActive(true)
- SetAnchoredPositionY(self.optional_conta, 8.5)
- else
- self.option_3_obj:SetActive(false)
- SetAnchoredPositionY(self.optional_conta, -50.5)
- end
- for i = 1, option_count do
- local txt = self.option_cfg.talk_list[i].content[1]
- and self.option_cfg.talk_list[i].content[1].list[1]
- and self.option_cfg.talk_list[i].content[1].list[1].text
- and Trim(self.option_cfg.talk_list[i].content[1].list[1].text) or ""
- self["option"..i.."_txt_tmp"].text = txt
- end
- else
- self.is_chooseing_option = false
- self.option_cfg = nil
- self.optional_conta_obj:SetActive(false)
- end
- end
-
- -- 当选中了可选任务的选项后执行的逻辑
- function DialogueViewNew:SelectOptionalTask(selected_index)
- self.is_chooseing_option = false
- if not self.option_cfg then
- print("error !! option_cfg is nil")
- return
- end
- local talk_id = self.option_cfg.talk_list[selected_index] and self.option_cfg.talk_list[selected_index].id
- self.model:Fire(DialogueModel.REQUEST_CCMD_EVENT, 30015, TaskTipType.TYPE35, self.npcDialogVo.npc_id, talk_id)
- --选项飘字:理性+5 or 感性+5
- -- local choose_type = 2 --1是理性,2是感性 3是中性
- -- if (self.option_cfg.intellect_first and selected_index == 1) or (not self.option_cfg.intellect_first and selected_index == 2) then
- -- choose_type = 1
- -- end
-
- -- 性格系统不要了 不用瓢字
- -- local choose_value_list = stringtotable(self.option_cfg.value)
- -- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- -- if task.type == TaskType.BOUNTY_LINE then -- 日常任务需要读第四个key值
- -- local choose_value = 0
- -- for i,v in ipairs(choose_value_list) do
- -- if v[1] == 4 then
- -- choose_value = v[2]
- -- break
- -- end
- -- end
- -- GlobalEventSystem:Fire(DialogueModel.CHOOSE_MESSAGE_EVENT, 4, choose_value)
- -- else -- 主线任务按选择的index取key值
- -- local choose_value = choose_value_list[selected_index] and choose_value_list[selected_index][2] or 0
- -- GlobalEventSystem:Fire(DialogueModel.CHOOSE_MESSAGE_EVENT, self.option_cfg.talk_list[selected_index].choose_type, choose_value)
- -- end
- self:Close()
- end
-
- -- 选择语种
- function DialogueViewNew:SelectVoice( flag )
- if not flag then return end
- self.select_flag = flag
- local source1 = flag == DialogVoiceFlag.CN and "dialog_icon2" or "dialog_icon1"
- lua_resM:setImageSprite(self,self.cn_voice_icon_img, "dialogue_asset", source1, true)
-
- local source2 = flag == DialogVoiceFlag.JP and "dialog_icon2" or "dialog_icon1"
- lua_resM:setImageSprite(self,self.jp_voice_icon_img, "dialogue_asset", source2, true)
-
- local source3 = flag == DialogVoiceFlag.EN and "dialog_icon2" or "dialog_icon1"
- lua_resM:setImageSprite(self,self.en_voice_icon_img, "dialogue_asset", source3, true)
- end
-
- --创建多任务按钮
- function DialogueViewNew:CreateMultTaskBtn(task_list)
- -- 对任务进行需求排序(已完成的在前,已完成的按照完成时间排序,可接任务其次按等级升序排序)
- task_list = self.model:SortMultTaskList(task_list)
- -- 最多展示3个任务
- local callback = function(task_data)
- if self.is_chooseing_option then
- self:ClickMultTaskBtnFunc(task_data)
- return
- end
-
- if task_data and self.fake_circle_btn_id == task_data.task_id then
- --跑环假数据接任务
- self:OnTaskSelect()
- return
- end
- -------------------------
- local data = TaskModel:getInstance():GetTaskById( task_data.task_id )
- if task_data.task_state == 2 and data then
- --已接未完成的,让他去做任务
- local vip = RoleManager.Instance.mainRoleInfo.vip_flag
- if vip > 0 and TaskModel:getInstance():IsShowFlyShoe(data) then
- TaskModel:getInstance():TaskClickFun(data,true)
- else
- TaskModel:getInstance():TaskClickFun(data)
- end
- self:Close()
- return
- else
- self:ClickMultTaskBtnFunc(task_data)
- end
- end
- local show_num = #task_list > 3 and 3 or #task_list
- for k=1, show_num do
- local item = self.task_item_list[k]
- if not item then
- item = DialogueTaskBtnItem.New(self.mult_task_con, nil, self.layer_name)
- self.task_item_list[k] = item
- end
- item:SetVisible(true)
- local pos = Vector2(0, (show_num - k) * 66)
- item:SetData(task_list[k], pos, callback)
- end
- if #self.task_item_list > show_num then
- for k = show_num+1, #self.task_item_list do
- self.task_item_list[k]:SetVisible(false)
- end
- end
- self.mult_task_con_obj:SetActive(true)
- -- 这里保存一次多任务选择时的自动任务数据
- self.auto_mult_task_cache_data = task_list[1]
- -- SetAnchoredPositionY( self.time.transform, -191 + show_num*66 )
- -- SetAnchoredPositionY( self.time.transform, -191 )
- self.time.transform.anchoredPosition = Vector3(467, 119, 0)
- end
-
- function DialogueViewNew:ClickMultTaskBtnFunc(task_data)
- TaskModel:getInstance().now_task_id = task_data.task_id
- self.model:SetMultSelectTaskID(task_data.task_id)
- GlobalEventSystem:Fire(SceneEventType.SHOW_TASK, self.npcDialogVo.npc_id)
- end
-
- --是否可以触发赏金任务或社团任务
- function DialogueViewNew:CanBeginCircleTask()
- if self.npcDialogVo then
- return self.npcDialogVo.npc_id == TaskModel:getInstance():GetTaskAcceptNpcConfig(TaskType.GUILD_LINE).npc_id and TaskModel:getInstance():CanAcceptCircleTask(TaskType.GUILD_LINE)
- else
- return false
- end
- end
-
- -- 此函数如有修改请同步修改TaskCircleTipsNew:GoTaskCall( )
- function DialogueViewNew:OnTaskSelect()
- if not self.npcDialogVo then
- return
- end
- --self.npcDialogVo.task_id 大于0说明是12102的返回显示信息
- local cur_task_id = self.npcDialogVo.task_id and self.npcDialogVo.task_id or 0
- if self:CanBeginCircleTask() and (cur_task_id <= 0) then
- if self.npcDialogVo.npc_id == TaskModel:getInstance():GetTaskAcceptNpcConfig(TaskType.BOUNTY_LINE).npc_id then
- self.model:Fire(DialogueModel.REQUEST_CCMD_EVENT, 30009, TaskType.BOUNTY_LINE)
- TaskModel:getInstance().need_do_task_type = TaskType.BOUNTY_LINE --标记需要自动做任务
- self.model.dialogue_is_open = false
- TaskModel:getInstance().is_stop = false
- elseif self.npcDialogVo.npc_id == TaskModel:getInstance():GetTaskAcceptNpcConfig(TaskType.GUILD_LINE).npc_id then
- self.model:Fire(DialogueModel.REQUEST_CCMD_EVENT, 30009, TaskType.GUILD_LINE)
- TaskModel:getInstance().need_do_task_type = TaskType.GUILD_LINE --标记需要自动做任务
- self.model.dialogue_is_open = false
- TaskModel:getInstance().is_stop = false
- end
- self:Close()
- return
- end
-
- -- 选择任务选项时,不进行任何操作
- if self.is_chooseing_option then return end
-
- if self.btnStatus == 1 then--离开
- --如果是护送中转npc,传到拦截场景
- -- if self.npcDialogVo.npc_id == Config.Husongnpc[1].npc_id then
- -- if RoleManager.Instance.mainRoleInfo.level < Config.ConfigOpenLv.RightTop.escort then
- -- Message.show(string.format("%s级开启护送", Config.ConfigOpenLv.RightTop.escort))
- -- else
- -- GlobalEventSystem:Fire(SceneEventType.REQUEST_CHANGE_SCENE, Config.Husongnpc[2].scene_id)
- -- end
- -- end
- self:Close()
- elseif self.btnStatus == 2 then--继续对话
- if #self.npcDialogVo.task_list > 0 and TaskModel:getInstance().now_task_id and TaskModel:getInstance().now_task_id ~= 0 then
- self:SelectTask(self.npcDialogVo.task_list[1].task_id, self.npcDialogVo.task_list[1].task_state);
- return
- end
- self:UpdateView()
- elseif self.btnStatus == 3 or self.btnStatus == 4 then
- local is_complete = self:tryCompleteSendLetterTask()
- print('lzr:DialogueViewNew.lua[563] is_complete', is_complete)
- if is_complete then
- --送信任务
- self:Close()
- return
- end
- --打完副本, 切回主城继续任务
- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- if self.npcDialogVo and self.npcDialogVo.task_id then
- if task and task.task_kind == TaskKind.DUN_KIND then
- for k, v in pairs(task.taskTips) do
- if v.type == TaskTipType.TYPE2 and v.isFinish == 0 then
- TaskModel:getInstance():SetNeedTaskFlag(false)
- end
- end
- end
- end
-
- --完成任务
- if #self.npcDialogVo.task_list > 0 then
- self:SelectTask(self.npcDialogVo.task_list[1].task_id, self.npcDialogVo.task_list[1].taskState);
- return
- end
-
- local eventText = self.btnData
- if self.dialogDic[eventText] == nil then
- return
- end
- --发协议去触发任务
- -- 圣物任务一律不通过对话界面去更新进度
- if task and task.type ~= TaskType.PSIONIC_LINE then
- GlobalEventSystem:Fire(DialogueModel.CLICK_ANSWER, self.npcDialogVo, self.dialogDic[eventText])
- end
-
- if task and task.type == TaskType.MAIN_LINE then
- GlobalEventSystem:Fire(DialogueModel.MAIN_LINE_CLICK_OK, task.id)
- end
-
- self:Close()
- else
- GlobalEventSystem:Fire(DialogueModel.CLICK_OK, self.npcDialogVo and self.npcDialogVo.npc_id or 0 )
- self:Close()
- end
- end
-
- function DialogueViewNew:tryCompleteSendLetterTask( )
- local task = TaskModel:getInstance():GetTaskById(self.npcDialogVo.task_id)
- if task and task.tipType and task.tipType == TaskTipType.TYPE38 then
- self.model:Fire(DialogueModel.REQUEST_CCMD_EVENT, 30015, TaskTipType.TYPE38, self.npcDialogVo.npc_id,0)
- return true
- end
- return false
- end
-
- --发12102,继续获取任务对话协议,重新走showDialogue
- function DialogueViewNew:SelectTask(id, state)
- GlobalEventSystem:Fire(DialogueModel.SELECT_TASK, id, self.npcDialogVo.npc_id, state)
- end
-
- function DialogueViewNew:CreateTimer()
- self:ClearTimer()
- local has_mult_task = self.npcDialogVo.task_list and #self.npcDialogVo.task_list > 1 or false
- local has_not_task = self.npcDialogVo.task_id and self.npcDialogVo.task_id == 0 or false
- if self.auto_time > 0 then
- local end_time = self.auto_time + TimeUtil:getServerTime()
- local function onTimer()
- local last_time = end_time - TimeUtil:getServerTime()
- if last_time > 0 and self.gameObject then
- -- 多选任务时
- if has_mult_task then
- self.time_tmp.text = string.format("(%d秒后自动选择)", last_time)
- elseif self.option_cfg then
- self.option_time_tmp.text = "(".. last_time .. "秒后自动选择)"
- elseif has_not_task then
- self.time_tmp.text = string.format("(%d秒后继续)", last_time)
- else
- self.time_tmp.text = string.format("(%d秒后继续任务)", last_time)
- end
- else
- self:ClearTimer()
-
- -- 倒计时结束后,自动选择id靠前的答案
- if self.option_cfg then
- self:SelectOptionalTask(1)
- return
- end
- -- 多选任务时,自动选择创建多任务时缓存的第一个任务
- if has_mult_task then
- if self.auto_mult_task_cache_data then
- self:ClickMultTaskBtnFunc(self.auto_mult_task_cache_data)
- return
- end
- end
- --继续任务对话
- self:OnTaskSelect()
- end
- end
- self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
- onTimer()
- end
- end
-
- function DialogueViewNew:ClearTimer()
- if self.timer_id then
- GlobalTimerQuest:CancelQuest(self.timer_id)
- self.timer_id = nil
- end
- end
-
- function DialogueViewNew:DestroySuccess( )
- self:ClearTimer()
-
- for i, item in pairs(self.item_list) do
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, item)
- end
- self.item_list = {}
-
- for k,v in pairs(self.task_item_list) do
- v:DeleteMe()
- end
- self.task_item_list = {}
-
- if self.stop_task_id then
- GlobalEventSystem:UnBind(self.stop_task_id)
- self.stop_task_id = nil
- end
-
- if self.update_bounty_reward_id then
- GlobalEventSystem:UnBind(self.update_bounty_reward_id)
- self.update_bounty_reward_id = nil
- end
-
- if self.show_figure_timer_id then
- GlobalTimerQuest:CancelQuest(self.show_figure_timer_id)
- self.show_figure_timer_id = nil
- end
-
- if self.guide_trigger_id then
- GlobalEventSystem:UnBind(self.guide_trigger_id)
- self.guide_trigger_id = nil
- end
- end
-
- function DialogueViewNew:CheckGudie()
- if RoleManager.Instance.mainRoleInfo.level == 1 and self.npcDialogVo and self.npcDialogVo.npc_id == 100101 then
- GlobalEventSystem:Fire(EventName.TEST_HELP_STEP, 999991001)
- elseif RoleManager.Instance.mainRoleInfo.level <= 10 and self.npcDialogVo and #self.npcDialogVo.task_list then
- for i,v in ipairs(self.npcDialogVo.task_list) do
- if v.task_id == 10030 then
- GlobalEventSystem:Fire(EventName.TEST_HELP_STEP, 999991002)
- end
- end
- end
- end
-
- function DialogueViewNew:AddToStageHandler()
- if self.gameObject == nil then return end
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.DO_MAIN_TASK,1)
- --or GuideModel:getInstance():GetHelpVo(HelpType.TASK_SELECT,1)
- if not helpVo then return end
- local help_type = helpVo.help_type
- local step = helpVo.step
- local button = false
- if help_type == HelpType.DO_MAIN_TASK and step == 1 then
- button = self.click_btn_obj
- elseif help_type == HelpType.TASK_SELECT and step == 1 then
- button = self.option_1_obj
- end
- if button then
- local function call_back()
- self:Close()
- end
- GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file)
- end
- end
-
- function DialogueViewNew:Close()
- --完成引导
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.DO_MAIN_TASK,1)
- --or GuideModel:getInstance():GetHelpVo(HelpType.TASK_SELECT,1)
- if helpVo then
- GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
- end
- BaseView.Close(self)
- end
|