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
|