源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

978 lines
39 KiB

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