|
|
-
- TaskModel = TaskModel or BaseClass(BaseVo)
- local TaskModel = TaskModel
- --任务内容类型定义,任务后台有配置
- TaskTipType=
- {
- TYPE0=0, --开始对话
- TYPE1=1, --击败怪物
- TYPE2=11, --完成副本
- TYPE6=3, --收集物品(打怪)
- TYPE7=5, --与npc对话
- TYPE8= 6, --开始对话(不可选)
- TYPE9=7, --结束对话(不可选)
- TYPE16=12,-- 探索场景
- TYPE18=4,-- 采集
- -- TYPE41=18,--天命觉醒点亮星格
- TYPE80=80,--断级主线
- TYPE100 = 2, --击杀boss
- TYPE101 = 8, --强化装备
- TYPE102 = 9, --完成某类型副本
- TYPE103 = 10, --单次发条密室副本中获得x经验
- TYPE104 = 13, --添加好友
- TYPE105 = 14, --加入社团
- TYPE106 = 15, --社团装备回收
- TYPE107 = 16, --完成社团活动
- TYPE108 = 17, --捐献一件装备到社团仓库
- TYPE109 = 19, --从市场购买
- TYPE110 = 20, --在市场上架一个物品
- TYPE111 = 21, --符文之塔
- TYPE23 = 23, --物品合成
- TYPE24 = 24, --每日活跃度达到XXX点
- TYPE25 = 25, --五转天命星格觉醒
- TYPE26 = 26, --装备吞噬
- TYPE27 = 27, --击杀指定Boss
- TYPE28 = 28, --钓鱼之路
- TYPE29 = 29, --进入完成某个副本
- TYPE31 = 31, --竞技场次数
- TYPE34 = 34, --进入完成某类副本
- TYPE35 = 35, --可选对话任务
- TYPE36 = 36, --装备附能
- TYPE37 = 37, --副本波数进度
- TYPE38 = 38, --送信任务
- TYPE39 = 39, --装备升星
- TYPE40 = 40, --商城购买
- -------------------------9.16新增
- TYPE41 = 41, --好友送礼
- TYPE42 = 42, --好友亲密度
- TYPE43 = 43, --进阶系统升级
- TYPE44 = 44, --升品之路
- TYPE45 = 45, --唤神升级
- TYPE46 = 46, --星辰升级
- TYPE47 = 47, --宠物升级
- TYPE48 = 48, --晒娃
- TYPE49 = 49, --装备圣物
- TYPE50 = 50, --圣物寻宝
- TYPE51 = 51, --解锁地狱摩托
- TYPE52 = 52, --转职目标
- -------------------------
- TYPE53 = 53, --龙神抽奖
- TYPE54 = 54, --装备套装
- TYPE55 = 55, --战魂强化
- TYPE56 = 56, --进阶目标(进阶到一定阶数)
- TYPE57 = 57, --完成预期任务
- TYPE58 = 58, --宝宝同心值
- TYPE59 = 59, --战力
- TYPE60 = 60, --任意主动技能升级次数
- TYPE61 = 61, --指定商店购买技能书
- TYPE62 = 62, --任意商店技能书购买
- TYPE1002 = 1002, --成就任务
- TYPE1004 = 1004, --七日目标
-
- TYPE9998 = 9998, --客户端自定义日常类型
- }
- --任务类型
- TaskType =
- {
- MAIN_LINE=1, --主线任务
- EXTENSION_LINE=2, --支线任务
- TRUN_LINE=3, --转职任务
- LIMIT_LINE=4, --限时任务
- PSIONIC_LINE=5, --圣物任务
- GUILD_LINE=6, --社团任务
- BOUNTY_LINE=7, --赏金任务
- ACTIVITY_LINE=8, --活跃度任务
- ---------------------------------
- TREASURE = 1001, --藏宝图任务
- ACHIEVE = 1002, --成就任务
-
- DAILY_ACTIVITE = 1003, --日常活跃任务
- SEVEN_DAY_TARGET = 1004, -- 七日目标任务
- }
-
- --任务种类
- TaskKind =
- {
- TALK_KIND=0, --对话任务
- KILL_MONSTER_KIND=1, --杀怪任务
- COLLECT_KIND=2, --收集任务
- CAI_JI_KIND=3, --收集任务
- HU_SONG_KIND=4, --护送任务
- TAN_SUO_KIND=5, --探索任务
- DUN_KIND = 6, --副本任务
- ITEM_BACK = 7, --收集回收任务
- STREN = 8, --装备精炼任务
- RUNE_DUN = 9, --符文副本任务
- EXP_DUN = 10, --发条密室任务
- }
-
- TaskModel.TaskTypeStr =
- {
- [TaskType.MAIN_LINE]="主线",
- [TaskType.EXTENSION_LINE]="支线",
- [TaskType.TRUN_LINE]="转职",
- [TaskType.LIMIT_LINE]="限时",
- [TaskType.GUILD_LINE]="社团",
- [TaskType.BOUNTY_LINE]="日常",
- [TaskType.PSIONIC_LINE]="圣物",
- [TaskType.ACTIVITY_LINE]="活跃",
- }
-
- TaskModel.TaskTypeStr3 =
- {
- [TaskType.MAIN_LINE]="主线",
- [TaskType.EXTENSION_LINE]="支线",
- [TaskType.TRUN_LINE]="转职",
- [TaskType.LIMIT_LINE]="限时",
- [TaskType.GUILD_LINE]="社团",
- [TaskType.BOUNTY_LINE]="日常",
- [TaskType.PSIONIC_LINE]="圣物",
- [TaskType.ACTIVITY_LINE]="活跃",
- }
-
- TaskModel.TaskTypeStr2 =
- {
- [TaskType.MAIN_LINE]="主线",
- [TaskType.EXTENSION_LINE]="支线",
- [TaskType.TRUN_LINE]="转职",
- [TaskType.LIMIT_LINE]="限时",
- [TaskType.GUILD_LINE]="社团",
- [TaskType.BOUNTY_LINE]="日常",
- [TaskType.PSIONIC_LINE]="圣物",
- [TaskType.ACTIVITY_LINE]="活跃",
- [TaskType.TREASURE]="宝图",
- [TaskType.ACHIEVE]="成就",
- [TaskType.DAILY_ACTIVITE]="活跃",
- }
-
- TaskModel.Color =
- {
- WHITE= "#ffffff",
- GREEN = "#2CF66F",
- PINK = "#F257FC",
- YELLOW ="#FBB73F",
- ORANGE="#ffb346",
- BLUE = "#65A9FC"
- }
-
- TaskModel.ColorNoSymbols =
- {
- WHITE= Color(1, 1, 1, 1),
- GREEN = Color(44/255, 246/255, 44/255, 1),
- PINK = Color(242/255, 87/255, 252/255, 1),
- YELLOW = Color(251/255, 183/255, 63/255, 1),
- ORANGE= Color(255/255, 179/255, 70/255, 1),
- BLUE = Color(101/255, 169/255, 252/255, 1),
- }
-
- TaskModel.TaskPrefixIdStr =
- {
- [3070001]= {str = "推荐", color = TaskModel.Color.ORANGE},
- [3070002]= {str = "日常", color = TaskModel.Color.ORANGE},
- }
-
-
- TaskModel.QualityColor = {
- [0] = TaskModel.Color.WHITE,
- [1] = TaskModel.Color.GREEN,
- [2] = TaskModel.Color.BLUE,
- [3] = TaskModel.Color.PINK,
- [4] = TaskModel.Color.YELLOW,
- [5] = TaskModel.Color.ORANGE,
- }
-
- TaskModel.ColorToImg = {
- [TaskModel.Color.WHITE] = "task_item_color_green",
- [TaskModel.Color.GREEN] = "task_item_color_green",
- [TaskModel.Color.BLUE] = "task_item_color_blue",
- [TaskModel.Color.PINK] = "task_item_color_pink",
- [TaskModel.Color.YELLOW] = "task_item_color_orange",
- [TaskModel.Color.ORANGE] = "task_item_color_orange",
- }
-
- --转职任务,boss战 的任务id
- TaskModel.TaskTurnBossTaskId =
- {
- [5] = true,
- [10] = true,
- [15] = true,
- [20] = true,
- [25] = true,
- }
-
- --转职任务,boss战 推荐战力
- TaskModel.TaskTurnBossPower =
- {
- [5] = 250000,
- [10] = 1250000,
- [15] = 4500000,
- [20] = 12500000,
- [25] = 25000000,
- }
-
- --任务类型27,击杀类型(每个类型自己配置)
- TaskModel.TYPE27_KILL_TYPE =
- {
- [1] = 3, --赏金boss
- }
-
- TaskModel.FirstTaskId = 10010 --第一个任务id
- TaskModel.DragonTaskId = 10000100 --飞龙任务
- TaskModel.ADD_SPEED_DISTANCE = 7 --加速距离
- TaskModel.ShowArrowLv = 50 --显示任务提示箭头的等级
- TaskModel.AutoDoNewMainTaskLv = 96 --一定等级以下,收到30000协议会主动优先执行主线任务
- TaskModel.AutoOpViewStopTask = 100 --一定等级以下,打开特殊界面要停止任务
-
- function TaskModel:__init()
- TaskModel.Instance = self
-
- self:InitData()
- end
-
- function TaskModel:InitData( )
- self._receivedTaskList={}
- self._canTaskList={}
- self.all_task_list = {}
- self.circle_task_info = {} ----社团/赏金任务进度
- self.circle_cache_reward = nil --完成的奖励
- self.need_show_circle_tip = false --弹出跑环tip
- self.lask_bounty_process = nil --上一次完成的赏金任务进度
- self.lask_guild_process = nil --上一次完成的社团任务进度
- self.now_task_id = nil -- 同个npc下面可能同时会有主线和支线任务,12101协议任务数据可能会有2条,这样客户端就不知道应该选择哪个任务来触发相关操作, 所以在开始任务前,客户端先记下当前任务id
-
- self.game_start_request = true --游戏启动,要请求一次任务数据
- self.followNpcList = nil --跟随npc
- self.last_task_id_cache = nil --保存上一个完成的任务id
- self.last_task_type_cache = nil --保存上一个完成的任务类型
- self.is_auto_task = false --是否正在自动任务,点击任务后设为true,点取消挂机后设为false
- self.need_do_task_type = 0 --需要马上做的任务类型,用于赏金或社团任务,因为这两种类型的接任务过程不通用
- self.last_time = 0 --上次直接完成任务的时间
- self.is_stop = false --任务是否暂停
- self.default_task_arrow_list = {}--断级主线任务已显示箭头列表
- self.first_receive = false --第一次收到30000
- self.need_task = false --切场景后要寻路的数据
- self.need_accept = nil --需要升级接的任务, 一般是自动接的任务,要等升级了才能自动接
- self.last_finish_task_id = 0 --上一个完成的任务
- self.scmd12101Send = false --做完任务,有时服务端推12101过来,这种情况就忽略掉,不处理
- self.proto_count = 0 --必须等12005和12002返回才能继续寻路
- self.wait_30003 = false
- self.wait_30004 = false
- self.last_task_scene = nil
- self.need_open_rein = false --需要打开转职界面
-
- self.accept_power_task_id = false --接取到战力引导任务的id
-
- self.first_trigger_0 = false --触发标志,只有第一次触发才滚动任务栏
- self.first_trigger_1 = false
- self.first_trigger_2 = false
- self.first_trigger_3 = false
- self.first_trigger_4 = false
-
- self.wait_upgrade = false --等待升级后先做主线
-
- -- self.opening_circle_buy_tip = false--快速跑环任务界面展示中
- -- self.wait_circle_buy_tip_close = false--花钱跑环任务的话,停止当前任务,等界面关闭时再继续任务
- self.circle_auto_use_shoe = {}--非R玩家跑环执行的时候,需要记录是否自动小飞鞋
- self.circle_use_clock = false--第一次不用倒计时,点击确定按钮之后使用,中断跑环流程的时候重置不用倒计时
-
- self.need_check_monster = false
- self.is_dungeon_finish = false
- self.fly_shoe_end_need_task = false
-
- self.collect_task_id = false --收集任务的配置了多个点,使用飞鞋的时候需要使用上次选中的点
- self.finish_task_list = {} --已完成任务列表
-
-
- self.no_main_task_level = 0 --断级时当前主线任务对应的等级,用作标识是否弹可登录提示,同一个等级只触发弹一次可挑战提示(刚好触发断级的那一刻)
- self.temp_finish_task_info = {}--标记完成的表,每次有新的已完成任务的时候,就把任务栏滚动容器位置置顶
-
- self:InitTaskListenList()
- self.guild_kill_monster_num = 0--断击杀非主线怪物一定数量之后,拉玩家去做主线,每次调用进行任务的时候清零,20001返回的时候累计
-
- self.is_first_login_game_to_do_task = true --是否是第一次登陆游戏做任务
-
- self.is_auto_tip_new_main_line = nil --是否是自动滚动导致关掉提示引导
- self.cur_tips_daily_task_item = false --当前推荐的日常活跃任务
-
- self.recorded_finish_turn_task_lv = RoleManager.Instance.mainRoleInfo.level -- 上次完成转职任务的等级记录
- end
-
- --[[@
- 功能: 初始化任务侦听列表,需要触发完成回调的任务,需要往这里添加
- 任务完成时刻,会在此列表里检索,id存在的,才会触发任务完成事件,避免大部分冗余运算
- 事件:GlobalEventSystem:Bind(TaskEvent.ANS_FINISHED_TASK_LIST, on_task_finish)
- 参数: 无
- 返回值: 无
- ]]
- function TaskModel:InitTaskListenList( )
- --所有需要侦听的任务列表
- self.task_listen_list = {}
-
- --功能开启配置
- for k,v in pairs(Config.Moduleid) do
- if v.task_id ~= 0 then
- self.task_listen_list[v.task_id] = true
- end
- end
- for k,v in pairs(Config.Modulesub) do
- if v.task_id ~= 0 then
- self.task_listen_list[v.task_id] = true
- end
- end
- --任务引导配置
- for k,v in pairs(Config.ConfigHelper.Task) do
- if k and k ~= 0 then
- self.task_listen_list[k] = true
- end
- end
- --羁绊任务
- for k,v in pairs(MateConst.SingleDogTask) do
- self.task_listen_list[v] = true
- end
- --剧情
- for k,v in pairs(Config.ConfigTaskEffect.TaskStoryID) do
- self.task_listen_list[k] = true
- end
- --摩托解锁任务
- for k,v in pairs(NewerTaskConst.PartTaskId) do
- self.task_listen_list[k] = true
- end
-
-
- --章节最后一个任务
- self.task_listen_list[Config.ConfigTaskEffect.LastChapterTaskId] = true
- --经验副本限制红点展示任务
- self.task_listen_list[ExpDunModel.Newly_Limit_Taskid] = true
- -- 宝宝开启任务
- self.task_listen_list[Config.Moduleid[165].task_id] = true
- -- 首充打开任务添加
- self.task_listen_list[CustomActivityModel.FIRST_RECHARGE_TASK_ID] = true
- --首充广告界面
- self.task_listen_list[CustomActivityModel.FIRST_RECHARGE_TIP_TASK_ID] = true
- --招财猫
- self.task_listen_list[CustomActivityModel.CAT_FOTANA_TASK_ID] = true
- --七日登陆
- self.task_listen_list[CustomActivityModel.SEVEN_LOGIN_TASK_ID] = true
- --VIP体验卡
- self.task_listen_list[CustomActivityModel.VIP_EX_CARD_TASK_ID] = true
- --V3强弹
- for i,v in ipairs(CustomActivityModel.VIP_THREE_TASK_ID_LIST) do
- self.task_listen_list[v] = true
- end
- end
-
- function TaskModel:GetDefalutTaskCurTaskAndDes()
- --主线断层增加任务提示:活跃度提示,经验副本,经验跑环,社团跑环
- local is_can_do_daily_task = false
- local is_guild = RoleManager.Instance.mainRoleInfo and RoleManager.Instance.mainRoleInfo.guild_id>0
- local is_can_do_guild_task = false
- local is_can_do_exp_dun = false
- local is_open_daily = false
- local daily_task_info = TaskModel:getInstance():GetTaskByType(TaskType.BOUNTY_LINE)
- local guild_task_info = TaskModel:getInstance():GetCircleTaskInfo(TaskType.GUILD_LINE)
- local live = DailyModel.Instance:GetLivenessInfoLive()
- -- if live < 10 then
- -- is_open_daily = true
-
-
- if daily_task_info then
- is_can_do_daily_task = true
-
- elseif live < 120 then
- is_open_daily = true
-
- elseif ExpDunModel:getInstance():GetNextWaveFitPowerRed() and ExpDunModel:getInstance():GetNextWaveFitLevel() then
- is_can_do_exp_dun = true
-
- -- elseif guild_task_info.cur_progress < 10 then
- -- is_can_do_guild_task = true
-
- -- elseif ExpDunModel:getInstance():GetNextWaveFitLevel() then
- -- is_can_do_exp_dun = true
- -- elseif guild_task_info.cur_progress < 20 then
- -- is_can_do_guild_task = true
- else
- is_open_daily = true
- end
- local content = "<color=#ff3232><u>查看升级途径</u></color>"
- -- if is_open_daily then
- -- content = "推荐完成<color=#2CF66F>日常活跃</color>"
- if is_can_do_daily_task then
- content = "完成<color=#2CF66F>经验跑环</color>"
- -- elseif is_can_do_guild_task then
- -- content = "推荐完成<color=#2CF66F>社团跑环</color>"
- elseif is_can_do_exp_dun then
- content = "闯关<color=#2CF66F>经验闯关</color>"
- else
- if self.cur_tips_daily_task_item then
- content = string.format("推荐<color=#2CF66F>%s</color>", self.cur_tips_daily_task_item.name)
- else
- content = "推荐进行日常任务"
- end
- end
- return is_open_daily, is_can_do_daily_task, is_can_do_guild_task, is_can_do_exp_dun, content
- end
-
- function TaskModel:__delete( )
- self:StopLoginTaskTimer()
- end
-
- function TaskModel:DefaultTask()
- local temp = nil
- local playerLv = RoleManager:getInstance():GetMainRoleVo().level
- --任务做了特殊处理
- if 53 < playerLv and playerLv < 56 then
- temp = ConfigItemMgr.Instance:GetTaskData(10540)
- else
- temp = ConfigItemMgr.Instance:GetTaskData(self.last_finish_task_id)
- end
- if temp then
- local data = ConfigItemMgr.Instance:GetTaskData(temp.next)
- if data then
- --主线断层增加任务提示:活跃度提示,经验副本,经验跑环,社团跑环
- local is_open_daily, is_can_do_daily_task, is_can_do_guild_task, is_can_do_exp_dun, content = self:GetDefalutTaskCurTaskAndDes()
- local lv = data.level
- local _nextMain=TaskVo.New()
- _nextMain.mainTip=true --假任务唯一的属性
- _nextMain.acceptType=1
- _nextMain.id = Config.ConfigTaskEffect.DefaultTaskId
- _nextMain.level = lv
- _nextMain.sortKey = Config.ConfigTaskEffect.TaskTypeSort[99]
- _nextMain.type = TaskType.MAIN_LINE
- _nextMain.order = 0
- local cfg = Config.ConfigTaskEffect.NextTaskName
- local task_name
- if cfg[lv] then
- task_name = cfg[lv]
- else
- task_name = string.format("升级到%s级", lv)
- end
- _nextMain.taskName = task_name or ""
- _nextMain.description = string.format("等级提升到<color=#2CF66F>%s</color>级,打开活动界面,里面有各种日常活动,奖励多多。", lv)
- _nextMain.tipContent = content
- local tasktipvo3 = TaskTipsVo.New()
- tasktipvo3.type = TaskTipType.TYPE80
- _nextMain.taskTips = {tasktipvo3}
- _nextMain.is_can_do_daily_task = is_can_do_daily_task
- _nextMain.is_can_do_guild_task = is_can_do_guild_task
- _nextMain.is_can_do_exp_dun = is_can_do_exp_dun
- _nextMain.is_open_daily = is_open_daily
- self._nextMain=_nextMain
-
- --断级时弹一次可挑战提示 记录当前断级的任务等级,同个任务等级断级只弹一次提示
- if data.level ~= self.no_main_task_level then --触发断级,上线的触发会直接无视
- -- BaseDungeonModel:getInstance():CheckDungeonTip()--断级的副本可挑战提示屏蔽
- end
- self.no_main_task_level = data.level
-
-
- else
- self._nextMain = nil
- end
- end
- end
-
- function TaskModel:getInstance()
- if TaskModel.Instance == nil then
- TaskModel.New()
- end
- return TaskModel.Instance
- end
-
- --返回登录,清除缓存数据,
- function TaskModel:ClearData()
- self:InitData()
- end
-
- --获取任务面板的选项卡设置
- function TaskModel:GetTabData(task_type)
- local data = {}
- for k,v in pairs(self.all_task_list) do
- --进度排序
- if self:IsNeedClickTask(v) then
- local tip = self:GetExtendSpecialTip(v)
- if tip and tip.isFinish==1 then
- v.progressState = 1
- else
- v.progressState = 0
- end
- else
- if v.target_num and v.target_num>0 then
- v.progressState = self:IsTaskProgressFinish(v) and 1 or 0
- else
- v.progressState = 0
- end
- end
- end
- self.all_task_list = self:SortFun(self.all_task_list)
- for i,v in ipairs(self.all_task_list) do
- if v.type == task_type then
- table.insert(data, v)
- end
- end
- return data
- end
-
- --根据id获取任务
- function TaskModel:GetTaskById( task_id )
- for k,v in pairs(self.all_task_list) do
- if v.id == task_id then
- return v
- end
- end
- end
-
- --获取已接的一个任务 根据任务类型
- function TaskModel:GetTaskByType( task_type , show)
- for k,v in pairs(self._receivedTaskList) do
- if v.type == task_type then
- return v, 1
- end
- end
-
- --转职还要判断可接
- if task_type == TaskType.TRUN_LINE then
- for k,v in pairs(self._canTaskList) do
- if v.type == task_type then
- return v, 2
- end
- end
- end
- end
-
- --获取当前正在做的任务
- function TaskModel:GetCurTask( )
- if self.now_task_id then
- for k,v in pairs(self.all_task_list) do
- if v.id == self.now_task_id then
- return v
- end
- end
- --判断是否赏金或者社团任务, 用于寻路
- if self.now_task_id == Config.ConfigTaskEffect.bountyTaskTipId then
- return self:GetBountyTipTask()
- elseif self.now_task_id == Config.ConfigTaskEffect.guildTaskTipId then
- return self:GetGuildTipTask()
- end
- end
- end
-
- --获取主界面上的任务推送数据 need_handle:是否需要把可接支线合并起来
- function TaskModel:GetMainUITaskData(need_handle)
- local is_guild = RoleManager.Instance.mainRoleInfo and RoleManager.Instance.mainRoleInfo.guild_id>0
- -------------------------
- local list = {}
- local main = false
- local extension = false
- local daily = false
- local other = false
- local extension_num = 0 --可接支线数量
- local turn = false -- 2020年2月19日新增:转职任务
- local tmp = {}
- for i,v in ipairs(self._receivedTaskList) do
- if v.type == TaskType.MAIN_LINE then
- if main == false then
- main = true
- table.insert(tmp, v)
- end
- elseif v.type == TaskType.EXTENSION_LINE then
- table.insert(list, v)
- elseif v.type == TaskType.BOUNTY_LINE then
- --日常任务显示id(完成这个任务才显示)
- local is_show_task_finish = TaskModel:getInstance():IsTaskFinished(Config.ConfigTaskEffect.DailyCircleShowTaskId)
- if is_show_task_finish then
- if not self:GetCircleExtraTask( TaskType.BOUNTY_LINE ) then
- table.insert(list, v)
- end
- end
-
- elseif v.type == TaskType.GUILD_LINE then
- if is_guild then
- if not self:GetCircleExtraTask( TaskType.GUILD_LINE ) then
- table.insert(list, v)
- end
- end
- elseif v.type == TaskType.LIMIT_LINE then
- table.insert(list, v)
- elseif v.type == TaskType.TRUN_LINE then
- if turn == false then
- table.insert(list, v)
- turn = true
- end
- elseif v.type == TaskType.PSIONIC_LINE then -- 圣物任务不显示
- -- table.insert(list, v)
- else
- if other == false then
- other = true
- table.insert(list, v)
- end
- end
- end
- for i,v in ipairs(self._canTaskList) do
- if v.type == TaskType.MAIN_LINE then
- if main == false then
- main = true
- table.insert(tmp, v)
- end
- elseif v.type == TaskType.EXTENSION_LINE then
- table.insert(list, v)
- -- if not need_handle then
- -- v.sortKey = Config.ConfigTaskEffect.TaskTypeSort[98] --可接支线的排序
- -- table.insert(list, v)
- -- end
- -- extension_num = extension_num + 1
- elseif v.type == TaskType.BOUNTY_LINE then
- table.insert(list, v)
- elseif v.type == TaskType.GUILD_LINE then
- if is_guild then
- table.insert(list, v)
- end
- elseif v.type == TaskType.LIMIT_LINE then
- table.insert(list, v)
- elseif v.type == TaskType.TRUN_LINE then
- if turn == false then
- v.order = 501
- table.insert(list, v)
- turn = true
- end
- elseif v.type == TaskType.PSIONIC_LINE then
- -- table.insert(list, v)
- else
- if other == false then
- other = true
- table.insert(list, v)
- end
- end
- end
-
- --[[--插入可接的赏金任务和社团任务(需求修改,不需要插入假任务)
- local taskVo = self:GetBountyTipTask()
- if taskVo then
- table.insert(list, taskVo)
- end
- taskVo = self:GetGuildTipTask()
- if taskVo then
- if is_guild then
- table.insert(list, taskVo)
- end
- end--]]
- --要插入跑环的十环领取任务
- local taskVo = self:GetCircleExtraTask( TaskType.BOUNTY_LINE )
- if taskVo then
- table.insert(list, taskVo)
- end
- local taskVo = self:GetCircleExtraTask( TaskType.GUILD_LINE )
- if taskVo then
- table.insert(list, taskVo)
- end
-
- local taskVo = false
- if turn == false then
- taskVo = self:GetTurnTipTask()
- if taskVo then
- table.insert(list, taskVo)
- end
- end
- if GetModuleIsOpen(424) then -- 藏宝图任务
- local normal_treasure_task = self:GetTreasureTask(TreasureMapConst.Normal) -- 普通藏宝任务
- if normal_treasure_task then
- table.insert(list, normal_treasure_task)
- end
- local advance_treasure_task = self:GetTreasureTask(TreasureMapConst.Advance) -- 高级藏宝任务
- if advance_treasure_task then
- table.insert(list, advance_treasure_task)
- end
- end
- -- --合并支线
- -- if extension_num > 0 then
- -- local taskVo = TaskVo.New()
- -- taskVo.level = 1
- -- local str = TaskModel.TaskTypeStr3[TaskType.EXTENSION_LINE]
- -- taskVo.description = string.format("<color=#2CF66F>有%d个可接取的支线任务</color>", extension_num)
- -- taskVo.taskName = string.format("%s任务", str)
- -- taskVo.type = TaskType.EXTENSION_LINE
- -- taskVo.isTipTask = true
- -- taskVo.need_find_way = 1
- -- taskVo.target_num = 0
- -- taskVo.order = 0
- -- taskVo.sortKey = Config.ConfigTaskEffect.TaskTypeSort[98]
- -- taskVo.id = Config.ConfigTaskEffect.extentTaskTipId
- -- taskVo.tipContent = string.format("有%d个可接取的支线任务", extension_num)
- -- table.insert(list, taskVo)
- -- end
-
- for k,v in pairs(list) do
- if self:IsNeedClickTask(v) then
- local tip = self:GetExtendSpecialTip(v)
- if tip and tip.isFinish==1 then
- v.progressState = 1
- else
- v.progressState = 0
- end
- else
- if v.target_num>0 then
- v.progressState = self:IsTaskProgressFinish(v) and 1 or 0
- else
- v.progressState = 0
- end
- end
- end
- for i,v in ipairs(tmp) do
- table.insert(list, 1, v)
- end
-
- --几个婚姻任务不显示
- for a,b in pairs(MateConst.SingleDogTask) do
- for i=#list,1,-1 do
- if b == list[i].id then
- table.remove(list, i)
- break
- end
- end
- end
-
- self:SetDailyActiviteTaskVo( list )
-
- -- 推荐成就以及可领奖成就(暂时不显示在任务面板)
- --self:SetAchiTaskVo( list )
-
- -- 七日目标
- -- self:SetSevenTargetTaskVo(list)
-
- list = self:SortFun(list)
- -------------------------
- --需要维护一个本地活动标记完成的表,每次有新的已完成任务的时候,就把任务栏滚动容器位置置顶
- local cur_temp_finish_task_info = {}
- local need = false
- for k,v in pairs(list) do
- if v.acceptType==0 and self:IsTaskProgressFinish(v) then
- if v.type ~= TaskType.MAIN_LINE then
- cur_temp_finish_task_info[v.id] = true
- end
- end
- -- 成就类要加个id
- if v.type == TaskType.ACHIEVE and
- v.progress_data and v.progress_data.status == 1 then
- if not cur_temp_finish_task_info[v.achieve_id] then
- cur_temp_finish_task_info[v.achieve_id] = true
- need = true
- end
- end
- end
- for k,v in pairs(cur_temp_finish_task_info) do
- if not self.temp_finish_task_info[k] then
- need = true
- end
- self.temp_finish_task_info[k] = true
- end
- if need then
- self:Fire(TaskEvent.SHOW_SCROLL_TO_TOP)
- end
- -------------------------
- return list
- end
-
- --任务的排序
- function TaskModel:SortFun(list)
- for k,v in pairs(list) do
- if v.tipType then
- v.tipTypeSort = Config.ConfigTaskEffect.TaskContentTypeSort[v.tipType] or 0
- else
- v.tipTypeSort = 0
- end
- v.sortKey = v.sortKey or 99
- end
- -------------------------
-
- local func_open_list = {} --功能开放性任务
- for i=#list, 1, -1 do
- if self:IsFuncOpenTask(list[i]) then
- table.insert( func_open_list, table.remove(list,i) )
- end
- end
-
- local high_order_list = {} --高排序型任务
- for i=#list, 1, -1 do
- if self:IsHighOrderTask(list[i]) then
- table.insert( high_order_list, table.remove(list,i) )
- end
- end
-
- local main_line_list = {}--主线或者升级指引
- for i=#list, 1, -1 do
- if list[i].type == TaskType.MAIN_LINE then
- table.insert( main_line_list, table.remove(list,i) )
- end
- end
-
- local over_list = {}--可领取的任务
- for i=#list, 1, -1 do
- if list[i].progressState == 1 then
- table.insert( over_list, table.remove(list,i) )
- end
- end
-
- local buy_gods_line_list = {}--购买型支线
- for i=#list, 1, -1 do
- if self:IsBuyGoodsTaskFinished(list[i]) then
- table.insert( buy_gods_line_list, table.remove(list,i) )
- end
- end
-
- --护送任务双倍的时候,提高优先级
- local escord_task_list = {}
- if EscortModel.getInstance():CurTimeIsDouble() then
- for i=#list, 1, -1 do
- if self:IsDailyActiviteEscortTask(list[i]) then
- table.insert( escord_task_list, table.remove(list,i) )
- break
- end
- end
- end
-
- local daily_line_list = {}--经验跑环任务
- for i=#list, 1, -1 do
- if list[i].type == TaskType.BOUNTY_LINE then
- table.insert( daily_line_list, table.remove(list,i) )
- end
- end
- for i=#list, 1, -1 do --社团跑环任务
- if list[i].type == TaskType.GUILD_LINE then
- table.insert( daily_line_list, table.remove(list,i) )
- end
- end
-
-
- local second_order_list = {} --第二排序序型任务
- for i=#list, 1, -1 do
- if self:IsSecondOrderTask(list[i]) then
- table.insert( second_order_list, table.remove(list,i) )
- end
- end
-
- local daily_activite_list = {} --日常活跃任务
- for i=#list, 1, -1 do
- if self:IsDailyActiviteTask(list[i]) then
- table.insert( daily_activite_list, table.remove(list,i) )
- end
- end
-
- local third_order_list = {} --第三排序序型任务
- for i=#list, 1, -1 do
- if self:IsThirdOrderTask(list[i]) then
- table.insert( third_order_list, table.remove(list,i) )
- end
- end
-
- -------------------------
- local arg = {"sortKey","progressState","order","acceptType","id"}
- local condition = {Array.LOWER,Array.UPPER,Array.UPPER, Array.LOWER,Array.LOWER,}
- SortTools.MoreKeysSorter(func_open_list, arg, condition)
- SortTools.MoreKeysSorter(high_order_list, arg, condition)
- SortTools.MoreKeysSorter(main_line_list, arg, condition)
- SortTools.MoreKeysSorter(buy_gods_line_list, arg, condition)
- SortTools.MoreKeysSorter(second_order_list, arg, condition)
- SortTools.MoreKeysSorter(daily_activite_list, arg, condition)
- SortTools.MoreKeysSorter(third_order_list, arg, condition)
- SortTools.MoreKeysSorter(over_list, arg, condition)
- SortTools.MoreKeysSorter(list, arg, condition)
- -------------------------
- local end_list = {}
- for i,v in ipairs(func_open_list) do table.insert( end_list, v ) end
- for i,v in ipairs(high_order_list) do table.insert( end_list, v ) end
- for i,v in ipairs(main_line_list) do table.insert( end_list, v ) end
- for i,v in ipairs(over_list) do table.insert( end_list, v ) end
- for i,v in ipairs(buy_gods_line_list) do table.insert( end_list, v ) end
- for i,v in ipairs(escord_task_list) do table.insert( end_list, v ) end
- for i,v in ipairs(daily_line_list) do table.insert( end_list, v ) end
- for i,v in ipairs(second_order_list) do table.insert( end_list, v ) end
- for i,v in ipairs(daily_activite_list) do table.insert( end_list, v ) end
- for i,v in ipairs(third_order_list) do table.insert( end_list, v ) end
-
- for i,v in ipairs(list) do table.insert( end_list, v ) end
- return end_list
- end
-
- -- 任务描述内容拼接
- function TaskModel:MakeTaskTip(taskVO)
- if taskVO == nil then return end
-
- if taskVO.mainTip == true then --假任务
- --下一个有任务的等级
- self:DefaultTask()
- taskVO.tipParam={}
- return
- end
- for key, taskTipVO in ipairs(taskVO.taskTips) do
- if (taskTipVO.isFinish==0 or key==#taskVO.taskTips) then
- if taskTipVO.type == TaskTipType.TYPE0 then
- --通用寻路
- self:makeFindType(taskVO, taskTipVO)
- --显示数量
- if taskVO.target_num > 0 then
- taskVO.tipContent=taskVO.tipContent.."<color="..TaskModel.Color.WHITE..">("..taskVO.cur_num.."/"..taskVO.target_num..")</color>"
- end
- elseif taskTipVO.type == TaskTipType.TYPE1 then--击败怪物
- self:makeType1(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE2 or taskTipVO.type == TaskTipType.TYPE29 then--完成副本
- self:makeType2(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE34 then
- self:makeType34(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE6 then--收集物品(打怪)
- self:makeType6(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE16 then--探索场景
- self:makeType16(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE18 then--采集
- self:makeType18(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE7 or taskTipVO.type == TaskTipType.TYPE8
- or taskTipVO.type == TaskTipType.TYPE9 or taskTipVO.type == TaskTipType.TYPE35
- or taskTipVO.type == TaskTipType.TYPE38 then --与npc对话
- self:makeType7(taskVO, taskTipVO)
- -- --显示数量
- -- if taskVO.target_num > 0 then
- -- taskVO.tipContent=taskVO.tipContent.."<color="..ColorUtil.WHITE..">("..taskVO.cur_num.."/"..taskVO.target_num..")</color>"
- -- end
- elseif taskTipVO.type == TaskTipType.TYPE100 then --击败boss
- self:makeType100(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE109 or taskTipVO.type == TaskTipType.TYPE110 then --市场上架 市场购买
- self:makeType109(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE102 then --完成某副本类型
- self:makeType102(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE103 then --单次副本获得x经验
- self:makeType103(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE106 then --提交装备
- self:makeType106(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE107 then --完成社团活动
- self:makeType107(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE23 then --合成物品
- self:makeType23(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE24 then --活跃度
- self:makeType24(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE104 then --添加好友
- self:makeType104(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE26 then --装备吞噬
- self:makeType26(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE27 then --击杀首领
- self:makeType27(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE28 then --钓鱼活动
- self:makeType28(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE29 then --烹饪活动
- self:makeType29(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE111 then --符文爬塔
- self:makeType111(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE36 then --装备附能
- self:makeType36(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE37 then --副本波数进度
- self:makeType37(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE101 then --强化装备
- self:makeType101(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE31 then --竞技场次数
- self:makeType31(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE39 then --装备升星
- self:makeType39(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE40 then --交易券购买
- self:makeType40(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE42 then --好感度
- self:makeNormalType2(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE44 then --升品之路
- self:makeNormalType2(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE49 then --圣物装备
- self:makeNormalType2(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE51 then --解锁地狱摩托
- self:makeType51(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE53 then --龙神抽奖
- self:makeType53(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE54 then --装备套装
- self:makeType54(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE55 then --战魂强化
- self:makeType55(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE56 then --进阶目标(进阶到一定阶数)
- self:makeType56(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE57 then --完成预期任务
- self:makeType57(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE48 then --晒娃
- self:makeType48(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE58 then --宝宝同心值
- self:makeType58(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE59 then --战力
- self:makeType59(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE60 then --任意商店技能书购买
- self:makeType60(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE61 then --指定商店购买技能书
- self:makeType61(taskVO, taskTipVO)
- elseif taskTipVO.type == TaskTipType.TYPE62 then --任意商店技能书购买
- self:makeType62(taskVO, taskTipVO)
- else
- --无特殊参数要求
- self:makeNormalType(taskVO, taskTipVO)
- end
- taskVO.tipType = taskTipVO.type
- --显示数量
- if Config.ConfigTaskEffect.NeedShowNumTaskType[taskTipVO.type] or
- Config.ConfigTaskEffect.NeedShowNumTaskId[taskVO.id] then
- --通关专属幻魔要显示次数
- local numStr = ""
- numStr = "("..HtmlColorTxt(taskTipVO.nowCount, "#2CF66F").."/"..taskTipVO.count..")"
- taskVO.tipContent = taskVO.tipContent..numStr
- if taskTipVO.type == TaskTipType.TYPE100 then
- --赏金幻魔
- taskVO.tipContent = taskVO.tipContent .. "\n<color=#f558ff>可获大量装备和交易券</color>"
- end
- if taskTipVO.type == TaskTipType.TYPE102 then --完成某副本类型
- if taskTipVO.id == BaseDungeonModel.DUN_TYPE.PersonBoss then
- taskVO.tipContent = string.format( "击杀<color=#2CF66F>%s</color>%s\n<color=#f558ff>可获大量装备和交易券</color>",BaseDungeonModel.DUN_NAME[taskTipVO.id] or "",numStr )
- end
- end
-
- if taskTipVO.type == TaskTipType.TYPE58 then --完成宝宝同心值
- taskVO.tipContent = string.format( "同心值达到<color=#2CF66F></color>%s\n<color=#f558ff>完成日常任务积攒同心值</color>",numStr )
- end
-
- if taskTipVO.type == TaskTipType.TYPE59 then --战力
- taskVO.tipContent = string.format( "达到<color=#2CF66F></color>%s战力\n<color=#f558ff>点击查看可提战的系统</color>",numStr )
- end
- if taskTipVO.type == TaskTipType.TYPE62 then --任意商店技能书购买
- taskVO.tipContent = string.format( "购买%s本技能书",numStr )
- end
- -------------------------
- if taskTipVO.type == TaskTipType.TYPE24 then
- --活跃度要加文本
- taskVO.tipContent = taskVO.tipContent .. "\n<color=#f558ff>每天必做的成长任务</color>"
- end
- end
- break
- end
- end
- end
-
- function TaskModel:makeType1(taskVO, taskTipVO)
- local strs = ""
- local findtype = TaskTipType.TYPE1
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = ConfigItemMgr.Instance:GetMonsterDataItem(taskTipVO.id)
- if temp then
- strs = string.format(cfg, Trim(temp.name))
- end
- else
- strs = Trim(taskVO.tips)
- end
-
- local findstr={}
- if taskTipVO.scene_x ~= 0 and taskTipVO.scene_y ~= 0 then
- findstr={findtype, taskTipVO.sceneId, taskTipVO.id, taskVO.id,taskTipVO.scene_x, taskTipVO.scene_y, taskVO.type}
- else
- findstr={findtype, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- end
-
- taskVO.tipContent=strs
- taskVO.tipParam=findstr
- taskVO.need_find_way = taskTipVO.need_find_way
- end
-
- --完成副本
- function TaskModel:makeType2(taskVO, taskTipVO)
- --特殊限制的主线副本,因为UI还是显示任务栏,需要把通关副本改为击败怪物
- local dun_id = taskTipVO.id
- local strs = ""
- local is_special_ui_dun = Config.ConfigChangeSceneEffect.DungeonLimit[dun_id] and Config.ConfigChangeSceneEffect.DungeonLimit[dun_id].keep_ui
- if is_special_ui_dun then
- local wave_cfg = Config.Dunwave[dun_id.."@1"]
- if wave_cfg then
- local mon_list = stringtotable(wave_cfg.mon_list) or {}
- local mon_id = mon_list[1] and mon_list[1][1]
- local mon_cfg = ConfigItemMgr.Instance:GetMonsterDataItem(mon_id)
- if mon_cfg then
- local cfg = "消灭 <color=#2CF66F>%s</color>"
- strs = string.format(cfg, Trim(mon_cfg.name))
- if taskVO.type == TaskType.BOUNTY_LINE then
- local numStr = ""
- numStr = "("..HtmlColorTxt(taskTipVO.nowCount, "#2CF66F").."/"..taskTipVO.count..")"
- strs = strs..numStr
- end
- else
- strs = "消灭前方怪物"
- end
- else
- strs = "消灭前方怪物"
- end
- else
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = Config.Dungeoncfg[taskTipVO.id]
- if temp then
- if temp.type == BaseDungeonModel.DUN_TYPE.ONE_TOWER then
- strs = string.format("通关简单模式第<color=#2CF66F>%s</color>层", taskTipVO.id-7000)
- elseif dun_id == BossModel.FAKE_MONEY_BOSS_DUN_ID then
- strs = string.format("击杀<color=#2CF66F>%s</color>", Trim(temp.name))
- if not self:IsTaskProgressFinish(taskVO) then --未完成才显示进度
- local numStr = ""
- numStr = "("..HtmlColorTxt(taskTipVO.nowCount, "#2CF66F").."/"..taskTipVO.count..")"
- strs = strs..numStr
- end
- else
- strs = string.format(cfg, Trim(temp.name))
- end
- end
- else
- strs = Trim(taskVO.tips)
- end
- end
-
- taskVO.tipContent=strs
- taskVO.tipParam={TaskTipType.TYPE2, taskTipVO.sceneId, taskTipVO.id, taskVO.id, taskTipVO.scene_x, taskTipVO.scene_y}
- taskVO.need_find_way = 1
-
- local task_id = taskVO.id
- if task_id == Config.ConfigTaskEffect.TOWER_DUN_ID then
- local dun_id = taskVO.tipParam and taskVO.tipParam[3] or 0
- if tonumber(taskVO.tipParam[1]) == TaskTipType.TYPE2 and dun_id > 7000 and dun_id < 8000 then
- local dun_cfg = BaseDungeonModel:getInstance():GetDunCfg(dun_id)
- local dun_power = 150000--dun_cfg and dun_cfg.recommend_power or 0
- local my_power = RoleManager.Instance.mainRoleInfo.fighting
- if my_power >= dun_power then
- taskVO.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVO.type]
- else
- taskVO.sortKey = 9999 --置底
- end
- end
- end
- end
-
- --完成经验副本类型副本
- function TaskModel:makeType34(taskVO, taskTipVO)
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local dunStr = BaseDungeonModel.DUN_NAME[taskTipVO.id] or ""
- strs = string.format(cfg, dunStr)
- else
- strs = Trim(taskVO.tips)
- end
-
- taskVO.tipContent=strs
- taskVO.tipParam={TaskTipType.TYPE34, taskTipVO.sceneId, taskTipVO.id, taskVO.id, taskTipVO.scene_x, taskTipVO.scene_y}
- taskVO.need_find_way = 1
- end
-
- --收集
- function TaskModel:makeType6(taskVO, taskTipVO)
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = GoodsModel:getInstance():GetGoodsBasicByTypeId(taskTipVO.id)
- strs = string.format(cfg, Trim(temp.goods_name))
- else
- strs = Trim(taskVO.tips)
- end
- local findstr={}
- local findtype = TaskTipType.TYPE6
- local monster_id = 0 --找坐标就行了
- if taskTipVO.scene_x ~= 0 and taskTipVO.scene_y ~= 0 then
- findstr={findtype, taskTipVO.sceneId, monster_id,taskVO.id,taskTipVO.scene_x, taskTipVO.scene_y, taskVO.type}
- else
- findstr={findtype, taskTipVO.sceneId, monster_id,taskVO.id,taskTipVO.scene_x, taskTipVO.scene_y, taskVO.type}
- end
- taskVO.tipContent=strs
- taskVO.tipParam= findstr
- taskVO.need_find_way = taskTipVO.need_find_way
- end
-
- --探索场景, 寻路到指定场景指定地点
- function TaskModel:makeType16(taskVO, taskTipVO)
- local strs = "探索场景"
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = ConfigItemMgr.Instance:GetSceneItem(taskTipVO.sceneId)
- if temp then
- strs = string.format(cfg, Trim(temp.name))
- end
- end
- taskVO.tipContent=strs
- taskVO.tipParam={TaskTipType.TYPE16, taskTipVO.sceneId, taskTipVO.scene_x, taskTipVO.scene_y, taskTipVO.count}
- taskVO.need_find_way = 1
- end
-
- --采集
- function TaskModel:makeType18(taskVO, taskTipVO)
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = ConfigItemMgr.Instance:GetMonsterDataItem(taskTipVO.id)
- if temp then
- strs = string.format(cfg, Trim(temp.name))
- end
- else
- strs = Trim(taskVO.tips)
- end
- local findstr={}
- local findtype = TaskTipType.TYPE18
- if taskTipVO.scene_x ~= 0 and taskTipVO.scene_y ~= 0 then
- findstr={findtype, taskTipVO.sceneId, taskTipVO.id, taskVO.id,taskTipVO.scene_x, taskTipVO.scene_y, taskVO.type}
- else
- findstr={findtype, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- end
- taskVO.tipContent=strs
- taskVO.tipParam= findstr
- taskVO.need_find_way = taskTipVO.need_find_way
- end
-
- --与npc对话
- function TaskModel:makeType7(taskVO, taskTipVO)
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg and not SceneManager.Instance:IsClientHideNpc(taskTipVO.id) then
- local temp = ConfigItemMgr.Instance:GetNpcItem(taskTipVO.id)
- if temp and temp.name then
- strs = string.format(cfg, Trim(temp.name))
- end
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = taskTipVO.need_find_way
- end
-
- --击杀boss
- function TaskModel:makeType100( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- strs = cfg or Trim(taskVO.tips)
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --强化装备
- function TaskModel:makeType101( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count, taskTipVO.id)
- else
- strs = Trim(taskVO.tips)
- end
-
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --市场上架 市场购买
- function TaskModel:makeType109( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --完成某副本类型
- function TaskModel:makeType102( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local dunStr = BaseDungeonModel.DUN_NAME[taskTipVO.id] or ""
- strs = string.format(cfg, dunStr)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --单次副本获得x经验
- function TaskModel:makeType103( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local dunStr = Config.ConfigDungeonClient.dunTypeStr[taskTipVO.id] or ""
- strs = string.format(cfg, CalUnitNum2(taskTipVO.count))
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --添加好友类型
- function TaskModel:makeType104( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg,taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --装备吞噬
- function TaskModel:makeType26( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg,taskTipVO.id)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --击杀首领
- function TaskModel:makeType27( taskVO, taskTipVO )
- local strs = ""
- local cfg = ConfigItemMgr.Instance:GetMonsterDataItem(taskTipVO.id)
- if cfg then
- strs = "击杀 " .. HtmlColorTxt(Trim(cfg.name), ColorUtil.GREEN_DARK)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.count}
- taskVO.need_find_way = 1
- end
-
- function TaskModel:makeType28( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- function TaskModel:makeType29( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --符文爬塔
- function TaskModel:makeType111( taskVO, taskTipVO )
- -- local strs = ""
- -- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- -- if cfg then
- -- local dun_id = taskTipVO.count
- -- local layer_id = 1
- -- local name = ""
- -- local force_read_server = false
- -- local config = Config.Dungeoncfg[dun_id]
- -- if config then
- -- if config.type == 20 then
- -- name = "魂珠副本"
- -- elseif config.type == 21 then
- -- name = "神格副本"
- -- elseif config.type == 5 then
- -- force_read_server = true
- -- end
- -- end
-
- -- if force_read_server then
- -- strs = Trim(taskVO.tips)
- -- else
- -- config = BaseDungeonModel.GetDungeonrunelvdataCfg(dun_id)
- -- if config then
- -- layer_id = config.lv
- -- end
-
- -- strs = string.format(cfg,name,layer_id)
- -- end
- -- else
- -- strs = Trim(taskVO.tips)
- -- end
- -- taskVO.tipContent=strs
- -- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.count, taskVO.id}
- -- taskVO.need_find_way = 1
- end
-
- --装备附能
- function TaskModel:makeType36( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --副本波数进度
- function TaskModel:makeType37( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = Config.Dungeoncfg[taskTipVO.id]
- if temp then
- if temp.type == BaseDungeonModel.DUN_TYPE.EXP then
- strs = string.format("成功挑战第<color=#2CF66F>%s</color>波", taskTipVO.count)
- else
- strs = string.format(cfg, Trim(temp.name), taskTipVO.count)
- end
- end
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
-
- --战力
- local task_id = taskVO.id
- if task_id == Config.ConfigTaskEffect.EXP_DUN_ID then
- local my_power = RoleManager.Instance.mainRoleInfo.fighting
- local wave = taskTipVO.count
- local wave_cfg = BaseDungeonModel:getInstance():GetDunWaveCfg(BaseDungeonModel.EXP_DUN_ID, wave)
- local wave_power = wave_cfg.recommend_power or 999999999999
- if my_power >= wave_power then
- taskVO.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVO.type]
- else
- taskVO.sortKey = 9999 --置底
- end
- end
- end
-
- --提交装备
- function TaskModel:makeType106( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.id, ColorUtil:getColorName(taskTipVO.count))
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --竞技场次数
- function TaskModel:makeType31( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --装备升星
- function TaskModel:makeType39( taskVO, taskTipVO )
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- local strs = cfg or Trim(taskVO.tips)
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --商城购买
- function TaskModel:makeType40( taskVO, taskTipVO )
- local need_money = taskTipVO.sceneId --需要的价格
- local shop_key_id = taskTipVO.scene_x --商品id
- local money_type = Config.Shop[shop_key_id] and Config.Shop[shop_key_id].ctype --商品消耗货币类型
- local my_money = GoodsModel:getInstance():GetGoodsNumFromType(money_type) --我的商品消耗货币
- local money_type_id = Config.ConfigNotNormalGoods[money_type] and Config.ConfigNotNormalGoods[money_type].goods_id
- local money_name = GoodsModel:getInstance():getGoodsName(money_type_id)
-
- local goods_type_id = taskTipVO.id
- local goods_name = ""
- local goods = ConfigItemMgr.Instance:GetGoodItem(goods_type_id)
- if goods then
- local colorStr = TaskModel.QualityColor[goods.color] or TaskModel.QualityColor[1]
- goods_name = HtmlColorTxt(Trim(goods.goods_name), colorStr)
- end
- local strs = ""
- if taskTipVO.isFinish == 1 or my_money >= need_money then --已完成
- strs = string.format("%s足够了,去购买%s吧", money_name, goods_name)
- else --未完成
- strs = string.format("获得<color=#2CF66F>%s%s</color>,前往商城购买%s", need_money, money_name, goods_name)
- strs = strs .. "\n" .. string.format("当前%s(<color=#2CF66F>%s</color>/%s)", money_name, my_money, need_money)
- end
- -------------------------
- local equip_type = EquipModel:getInstance():GetEquipType( goods_type_id )
- if equip_type then
- local type_const = EquipModel.EquipType
- if equip_type == type_const.Guard or equip_type == type_const.LeftRing
- or equip_type == type_const.RightRing or equip_type == type_const.Necklace then
- -- 守护戒指耳饰类--项链类
- strs = string.format( "购买<color=#2CF66F>[%s]</color>",Trim(goods.goods_name) )
- strs = strs .. "\n" .. string.format("拥有%s(<color=#2CF66F>%s</color>/%s)", money_name, my_money, need_money)
- end
- end
- -------------------------
- taskVO.is_money_enough = my_money >= need_money
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, shop_key_id, goods_type_id, taskVO.id, need_money}
- taskVO.need_find_way = 1
- -- taskVO.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskTipVO.type]
- end
-
- --解锁地狱摩托
- function TaskModel:makeType51( taskVO, taskTipVO )
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- taskVO.tipContent = cfg
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --龙神抽奖
- function TaskModel:makeType53( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --装备套装
- function TaskModel:makeType54( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local color = ColorUtil:GetColor(taskTipVO.sceneId)
- strs = string.format(cfg, taskTipVO.count, taskTipVO.id, color, ColorUtil:getColorName(taskTipVO.sceneId))
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --战魂强化
- function TaskModel:makeType55( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --进阶目标(进阶到一定阶数)
- function TaskModel:makeType56( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, FosterConst.ModelName[taskTipVO.id], taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --完成预期任务
- function TaskModel:makeType57( taskVO, taskTipVO )
- local strs = Trim(taskVO.tips)
- if taskVO.id == 2040002 then
- taskVO.tipContent = strs .. "\n" .. HtmlColorTxt( "AI娘可以协助出战" , '#f558ff')
- elseif taskVO.id == 2040003 then
- taskVO.tipContent = strs .. "\n" .. HtmlColorTxt( "恶魔骑士正在前方等你" , '#f558ff')
- else
- taskVO.tipContent = strs
- end
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --晒娃
- function TaskModel:makeType48( taskVO, taskTipVO )
- local strs = Trim(taskVO.tips)
- if taskVO.id == 3120003 then
- taskVO.tipContent = strs .. "\n" .. HtmlColorTxt( "积攒同心值激活宝宝" , '#f558ff')
- else
- taskVO.tipContent = strs
- end
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --宝宝同心值
- function TaskModel:makeType58( taskVO, taskTipVO )
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --战力
- function TaskModel:makeType59( taskVO, taskTipVO )
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --任意主动技能升级次数
- function TaskModel:makeType60( taskVO, taskTipVO )
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.tipContent = HtmlColorTxt("升级技能", ColorUtil.GREEN_DARK)
- taskVO.need_find_way = 1
- end
-
- --指定商店购买技能书
- function TaskModel:makeType61( taskVO, taskTipVO )
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.tipContent = HtmlColorTxt("交易商店购买技能书", ColorUtil.GREEN_DARK)
- taskVO.need_find_way = 1
- end
-
- --任意商店技能书购买
- function TaskModel:makeType62( taskVO, taskTipVO )
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --无特殊参数要求2
- function TaskModel:makeNormalType2( taskVO, taskTipVO )
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- local strs = cfg or Trim(taskVO.tips)
- taskVO.tipContent = string.format(strs, taskTipVO.count)
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --完成社团活动
- function TaskModel:makeType107( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local tb = {"社团首领","社团晚宴","守卫社团","社团争霸"}
- strs = string.format(cfg,tb[taskTipVO.id])
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --合成装备
- function TaskModel:makeType23( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- local temp = GoodsModel:getInstance():GetGoodsBasicByTypeId(taskTipVO.id)
- strs = string.format(cfg, taskTipVO.count, Trim(temp.goods_name))
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --活跃度
- function TaskModel:makeType24( taskVO, taskTipVO )
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --通用寻路数据
- function TaskModel:makeFindType(taskVO, taskTipVO)
- local strs = ""
- strs = Trim(taskVO.tips)
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = taskTipVO.need_find_way
- end
-
- --不需要数据
- function TaskModel:makeNormalType(taskVO, taskTipVO)
- local strs = ""
- local cfg = Config.ConfigTaskEffect.ContentTip[taskTipVO.type]
- if cfg then
- strs = string.format(cfg, taskTipVO.id, taskTipVO.count)
- else
- strs = Trim(taskVO.tips)
- end
- taskVO.tipContent=strs
- taskVO.tipParam={taskTipVO.type, taskTipVO.sceneId, taskTipVO.id, taskVO.id}
- taskVO.need_find_way = 1
- end
-
- --* 使用","连接参数成字符串
- function TaskModel:MakeParams( _table)
- local result=""
- local len=#_table
- local index=1
- for key, var in ipairs(_table) do
- if index==len then
- result=result..var
- else
- result=result..var..","
- end
- index=index+1
- end
- return result
- end
-
- --根据ID 获取可接任务对象,没有则放回null
- function TaskModel:GetCanTaskById(taskId)
- local taskVO=nil;
- for key, taskVO in ipairs(self._canTaskList) do
- if taskVO.id == taskId then
- return taskVO
- end
- end
- return nil
- end
-
- --根据ID 获取已接任务对象,没有则放回null
- function TaskModel:GetReceivedTaskById(taskId)
- local taskVO=nil;
- for key, taskVO in ipairs(self._receivedTaskList) do
- if taskVO.id == taskId then
- return taskVO
- end
- end
- return nil
- end
-
- -- 根据类型 返回是否有该类型的任务
- function TaskModel:FindHaveTaskByType( taskType )
- for i,taskVO in ipairs(self.all_task_list) do
- if taskVO.type == taskType then
- return true
- end
- end
- return false
- end
-
- function TaskModel:GetReceivedTaskList()
- return self._receivedTaskList
- end
-
- function TaskModel:GetCanTaskList()
- return self._canTaskList
- end
-
- --获取主线任务
- function TaskModel:GetMainTask()
- for key, taskVO in ipairs(self._receivedTaskList) do
- if taskVO.type == TaskType.MAIN_LINE then
- return taskVO
- end
- end
- for _, taskVO in ipairs(self._canTaskList) do
- if taskVO.type == TaskType.MAIN_LINE and taskVO.level<=RoleManager.Instance.mainRoleInfo.level then
- return taskVO
- end
- end
- return self._nextMain
- end
-
- --npc是否是跟随npc
- function TaskModel:IsFollowNpc(npc_id)
- local bool = false
- if self.followNpcList then
- for i,v in ipairs(self.followNpcList) do
- if tonumber(v[1]) == npc_id then
- bool = true
- break
- end
- end
- end
- return bool
- end
-
- --点击任务链接操作 @use_shoe 是否使用小飞鞋
- --@force_use_shoe:点击任务栏飞鞋按钮时强制使用飞鞋
- function TaskModel:TaskClickFun(task_data, use_shoe, force_use_shoe)
- self.guild_kill_monster_num = 0--重置一下
- if not task_data then
- return
- end
- --未接任务的话就接一下
- if task_data.acceptType and task_data.acceptType==1 and task_data.type and task_data.type == TaskType.MAIN_LINE and task_data.level and task_data.level<=RoleManager.Instance.mainRoleInfo.level and task_data.id then
- TaskController.Instance.auto_accept_main_id = nil
- GlobalEventSystem:Fire(TaskEventType.SEND_TASK_ACCEPT, task_data.id)
- return
- end
-
- --PrintTable(task_data)
- self:MakeTaskTip(task_data)
- local params = self:MakeParams(task_data.tipParam)
- print("Saber:TaskModel [969] params: ",params)
- if not SceneManager.Instance:IsMainCityorYieldScene() and
- not SceneManager.Instance:IsMirrorDungeonScene() and
- not self:CanDoTaskInEveryScene(params) then
- Message.show("正在副本或活动中")
- return
- end
-
- self.is_stop = false --去掉停止任务状态 避免有些情况,停止了但不确定从哪个界面出来,没开始任务
- local vip_free_shoe = VipModel:getInstance():CanFreeUseShoe()
- -- if VipModel:getInstance():CanFreeUseShoe() then
- -- use_shoe = true
- -- end
-
- if task_data.type == TaskType.BOUNTY_LINE or task_data.type == TaskType.GUILD_LINE then
- --跑环类任务需要看看玩家有没有选择自动使用小飞鞋
- if (not vip_free_shoe) and self.circle_auto_use_shoe[task_data.type] then
- --有vip免费小飞鞋,就不要参与判断了
- use_shoe = true
- end
- else
- self.circle_auto_use_shoe = {}
- end
-
- -- if task_data.type == TaskType.MAIN_LINE then
- -- GlobalEventSystem:Fire(TaskEventType.SHOW_TASK_GUILD_ARROW, false)
- -- end
-
- -- SceneManager.Instance:ClearPreChangeSceneHandle()
- -- GlobalEventSystem:Fire(EventName.CANCEL_PRE_CHANGE)
-
- if params and task_data.mainTip == false then
- if self:IsAutoDoTask(task_data) then
- self.now_task_id = task_data.id
- -- 点击任务item的自动寻路,理论上应该也算是玩家自己选择任务,要避免进入多任务选择的逻辑
- DialogueModel:getInstance():SetMultSelectTaskID(task_data.id)
- end
- --新手任务特殊处理,采集完直接弹出对话框
- if task_data.id and task_data.id == 10020 then
- local is_task_finished = true
- for k,vo in pairs(task_data.taskTips) do
- if vo.isFinish == 0 then
- is_task_finished = false
- end
- end
- task_data.need_find_way = is_task_finished and 0 or 1
- end
-
- local is_daily_task_finished = false
- if task_data and task_data.type == TaskType.BOUNTY_LINE then
- for k,vo in pairs(task_data.taskTips) do
- if vo.isFinish == 1 then
- is_daily_task_finished = true
- end
- end
- end
-
- if task_data and task_data.type == TaskType.GUILD_LINE then
- is_daily_task_finished = task_data:IsLastTaskTipsFinished()
- print('Ych:TaskModel.lua[1899] data', is_daily_task_finished)
- PrintTable(task_data)
- end
-
- if is_daily_task_finished then
- GlobalEventSystem:Fire(EventName.OPEN_TASK_CIRCLE_TIPS, task_data.type)
- return
- end
-
-
- if task_data.need_find_way == 1 then
- GlobalEventSystem:Fire(EventName.WAYFINDING, params, use_shoe, force_use_shoe)
- else
- --不需要寻路,直接打开npc对话框
- if task_data.tipParam[3] then
- local npc = Scene.Instance:GetNpc(task_data.tipParam[3])
- if npc == nil or not npc:IsInState(PoseState.MOVE) then
- GlobalEventSystem:Fire(SceneEventType.SHOW_TASK, task_data.tipParam[3])
- end
- end
- -- 转职任务,如果是未达成需求等级的话弹出升级引导
- if task_data.type == TaskType.TRUN_LINE and RoleManager.Instance.mainRoleInfo.level < task_data.level then
- GlobalEventSystem:Fire(EventName.SHOW_MAIN_TASK_TIPS_VIEW, true)
- return
- end
- end
- if self:IsAutoDoTask(task_data) then
- --如果当前点击的和上一个完成的任务类型不同,就重置
- if task_data.type ~= self.last_task_type_cache then
- self.last_task_type_cache = nil
- self.last_task_id_cache = nil
- end
- -- GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT,false,true)
- if use_shoe then
- Scene.Instance:CancelClickTarget()
- Scene.Instance.user_manul_time = Status.NowTime
- end
- AutoFightManager:getInstance():CacheGoToPos()
- --重置状态
- self.is_auto_task = true --手动点击,设为true
- self:ResetFlag()
- end
- end
- end
-
- --重置状态
- function TaskModel:ResetFlag( )
- self.need_accept = nil
- self.is_stop = false
- self.wait_30003 = false
- self.wait_30004 = false
- end
-
- --获取任务打怪目标,用于自动战斗
- function TaskModel:GetTaskTarget( now )
- local task_data = self:GetCurTask()
- if not task_data then return end
- local params = self:MakeParams(task_data.tipParam)
- if params and task_data.mainTip == false then
- local array=Split(params,",")
- local type=tonumber(array[1])
- if type == TaskTipType.TYPE1 or type == TaskTipType.TYPE6
- and task_data.cur_num<task_data.target_num then
- local id = tonumber(array[3])
- local sceneId = tonumber(array[2])
- local monster = Scene.Instance:FindNearestMonster(id) --附近有怪的话直接自动打怪,没有则随机怪堆
- if monster then
- return monster
- else
- --打死怪物后,30001可能还没通知进度完成,这时可能去下一个打怪点,做下延迟判断
- if now then
- --如果做任务过程,有怪物追着你到npc,接完任务就马上打身边的怪物,
- --打完九宫格内就没怪物了,所以如果附近没怪,要手动寻找怪物点
- local random_pos = self:GetTaskMonsterRandomPos(id, sceneId)
- if random_pos then --随机一堆怪物,解决玩家分流问题,避免玩家扎堆杀怪
- local findVo = FindVo.New()
- findVo.type = FindVo.MONSTER
- findVo.id = id
- findVo.x = random_pos.x
- findVo.y = random_pos.y
- findVo.sceneId = sceneId
- GlobalEventSystem:Fire(EventName.FIND,findVo)
- GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
- return
- end
- else
- local onDelay = function ( )
- self.dtimer = nil
- if self.is_auto_task and not self.is_stop then
- self:GetTaskTarget(true)
- end
- end
- if not self.dtimer then
- self.dtimer = setTimeout(onDelay, 1)
- end
- end
- end
- end
- end
- end
-
- --获取任务打怪目标,用于自动战斗
- function TaskModel:GetTaskTargetId( )
- local task_data = self:GetCurTask()
- if not task_data then return end
- local params = self:MakeParams(task_data.tipParam)
- if params and task_data.mainTip == false then
- local array=Split(params,",")
- local type=tonumber(array[1])
- if type == TaskTipType.TYPE1 or type == TaskTipType.TYPE6
- and task_data.cur_num<task_data.target_num then
- local id = tonumber(array[3])
- return id
- end
- end
- end
-
- --是否已接采集任务
- function TaskModel:HaveCaiJiTask(content_id)
- local have = false
- local monster_id = nil
- for i,v in ipairs(self._receivedTaskList) do
- if v.task_kind == TaskKind.CAI_JI_KIND and v.id == self.now_task_id and v.cur_num<v.target_num then
- have = true
- if v.content_id == 0 then
- monster_id = content_id
- else
- monster_id = v.content_id
- end
- break
- end
- end
- return have, monster_id
- end
-
- --随机场景中某堆怪物, 解决玩家分流问题,避免玩家扎堆杀怪
- function TaskModel:GetTaskMonsterRandomPos(monster_id, sceneId)
- local random_logic_pos, random_real_pos, ignore_rush = nil
- local cfg = Config.ConfigWorldMon.SceneMons[tonumber(sceneId)]
- if cfg and cfg.mon_list then
- local monster_heap = cfg.mon_list[tonumber(monster_id)]
- if monster_heap and #monster_heap.way_point > 0 then
- ignore_rush = monster_heap.ignore_rush
- local pos = monster_heap.way_point[math.random(1, #monster_heap.way_point)]
- if pos then
- random_real_pos = pos
- random_logic_pos = {x = pos.x / SceneObj.LogicRealRatio.x, y = pos.y / SceneObj.LogicRealRatio.y}
- end
- end
- end
- return random_logic_pos, random_real_pos, ignore_rush
- end
-
- --刷新采集任务怪的名字面板,有相应任务时才显示名字面板
- function TaskModel:RefreshCollectMonsterName(content_id)
- for id, monster in pairs(Scene.Instance:GetMonsterList()) do
- if monster:GetVo().type_id == content_id then
- monster.vo:ChangeVar("name", monster.vo.name, nil, true)
- end
- end
- end
-
- --找出任务的步骤是否已完成
- function TaskModel:FindTaskTipIsFinish(task)
- local finish = false
- if task and task.taskTips then
- for i,v in ipairs(task.taskTips) do
- if v.isFinish == 1 then
- finish = true
- end
- end
- end
- return finish
- end
-
- --是否主线任务
- function TaskModel:IsMainTask(id)
- local basedata = ConfigItemMgr.Instance:GetTaskData(id)
- if basedata then
- return basedata.type == TaskType.MAIN_LINE
- end
- end
-
- --是否跑环任务
- function TaskModel:IsCircleTask(id)
- local basedata = ConfigItemMgr.Instance:GetTaskData(id)
- if basedata then
- return basedata.type == TaskType.BOUNTY_LINE or basedata.type == TaskType.GUILD_LINE
- end
- end
-
- --是否转职任务
- function TaskModel:IsTurnTask(id)
- local basedata = ConfigItemMgr.Instance:GetTaskData(id)
- if basedata then
- return basedata.type == TaskType.TRUN_LINE
- end
- end
-
- --是否第一个任务
- function TaskModel:IsFisrtTask()
- for i,v in ipairs(self.all_task_list) do
- if v.type == TaskType.MAIN_LINE then
- if v.id == TaskModel.FirstTaskId then
- return true
- end
- end
- end
- end
-
- --是否要创建飞龙
- function TaskModel:IsCreateDragonTask()
- return self.last_finish_task_id < TaskModel.DragonTaskId
- end
-
- --任务进度显示
- function TaskModel:GetTaskProgressTip( taskVo )
- local str = string.format("<color='%s'>进度:(<color='%s'>%s</color>/%s)</color>",
- TaskModel.Color.YELLOW, ColorUtil.RED, 0, 1)
- if taskVo.target_num~=0 then
- local color = ColorUtil.GREEN
- if taskVo.cur_num < taskVo.target_num then
- color = ColorUtil.RED
- end
- --暂时支持一个进度显示
- str = string.format("<color='%s'>进度:(<color='%s'>%s</color>/%s)</color>", TaskModel.Color.YELLOW,
- color, taskVo.cur_num, taskVo.target_num)
- end
- return str
- end
-
- --获取任务颜色
- function TaskModel:GetColorByTaskType( task_type )
- local color_str
- if task_type == TaskType.MAIN_LINE then
- color_str = TaskModel.Color.YELLOW
- elseif task_type == TaskType.EXTENSION_LINE then
- color_str = TaskModel.Color.BLUE
- elseif task_type == TaskType.BOUNTY_LINE then
- color_str = TaskModel.Color.ORANGE
- elseif task_type == TaskType.GUILD_LINE then
- color_str = TaskModel.Color.ORANGE
- elseif task_type == TaskType.LIMIT_LINE then
- color_str = TaskModel.Color.PINK
- elseif task_type == TaskType.TRUN_LINE then
- color_str = TaskModel.Color.PINK
- elseif task_type == TaskType.ACTIVITY_LINE then
- color_str = TaskModel.Color.BLUE
- elseif task_type == TaskType.TREASURE then
- color_str = TaskModel.Color.ORANGE
- elseif task_type == TaskType.DAILY_ACTIVITE then
- color_str = TaskModel.Color.GREEN
- else
- color_str = TaskModel.Color.GREEN
- end
-
- return color_str
- end
-
-
- --获取任务颜色
- function TaskModel:GetColorValueByTaskType( task_type )
- local color_str
- if task_type == TaskType.MAIN_LINE then
- color_str = TaskModel.ColorNoSymbols.YELLOW
- elseif task_type == TaskType.EXTENSION_LINE then
- color_str = TaskModel.ColorNoSymbols.BLUE
- elseif task_type == TaskType.BOUNTY_LINE then
- color_str = TaskModel.ColorNoSymbols.ORANGE
- elseif task_type == TaskType.GUILD_LINE then
- color_str = TaskModel.ColorNoSymbols.ORANGE
- elseif task_type == TaskType.LIMIT_LINE then
- color_str = TaskModel.ColorNoSymbols.PINK
- elseif task_type == TaskType.TRUN_LINE then
- color_str = TaskModel.ColorNoSymbols.PINK
- elseif task_type == TaskType.ACTIVITY_LINE then
- color_str = TaskModel.ColorNoSymbols.BLUE
- else
- color_str = TaskModel.ColorNoSymbols.GREEN
- end
-
- return color_str
- end
-
- --任务是否有红点
- function TaskModel:HasTaskRed( )
- return self:HasMainLineRed() or self:HasExtensionTaskAccept() or self:HasBountyRed() or self:HasGuildRed() or self:HasTurnRed()
- end
-
- --主线任务是否有红点
- function TaskModel:HasMainLineRed( )
- for _, taskVO in ipairs(self._canTaskList) do
- if taskVO.type == TaskType.MAIN_LINE and taskVO.level<=RoleManager.Instance.mainRoleInfo.level then
- return true
- end
- end
- end
-
- --支线任务是否有红点
- function TaskModel:HasExtensionTaskAccept( )
- for _, taskVO in ipairs(self._canTaskList) do
- if taskVO.type == TaskType.EXTENSION_LINE and taskVO.level<=RoleManager.Instance.mainRoleInfo.level then
- return true
- end
- end
- end
-
- --转职任务是否有红点
- function TaskModel:HasTurnRed( )
- for _, taskVO in ipairs(self._canTaskList) do
- if taskVO.type == TaskType.TRUN_LINE and taskVO.level<=RoleManager.Instance.mainRoleInfo.level then
- return true
- end
- end
- end
-
- --悬赏任务是否有红点
- function TaskModel:HasBountyRed( )
- return self:CanAcceptCircleTask(TaskType.BOUNTY_LINE)
- end
-
- --社团任务是否有红点
- function TaskModel:HasGuildRed( )
- return self:CanAcceptCircleTask(TaskType.GUILD_LINE)
- end
-
- --任务进度是否完成
- function TaskModel:IsTaskProgressFinish( task )
- if task and task.taskTips then
- for k,v in pairs(task.taskTips) do
- if v.isFinish==0 and v.type~=TaskTipType.TYPE9 then
- return false
- end
- end
- return true
- end
- end
-
- --显示小飞鞋的任务类型
- function TaskModel:IsShowFlyShoe( data )
- for k,v in pairs(Config.ConfigTaskEffect.circleRewardTaskId) do
- if data.id == v then
- --两个跑环领奖任务不要显示,但是属于跑环类
- return false
- end
- end
- return Config.ConfigTaskEffect.ShowShoeTaskType[data.tipType]
- and (data.type~=TaskType.EXTENSION_LINE or data.acceptType==0)
- and data.type~=TaskType.TREASURE
- end
-
- --设置社团/赏金任务进度
- function TaskModel:SetCircleTaskInfo( info )
- local set_auto_task = false--跑环任务变更修改自动任务状态
- if info.task_type == TaskType.BOUNTY_LINE then
- if (info.cur_progress == 10) then
- --某个等级之前,完成10环经验跑环,提示做主线
- if self.lask_bounty_process == 9 and RoleManager.Instance.mainRoleInfo.level <= Config.ConfigTaskEffect.DailyTaskFinishShowMainTipsLevel then
- self:ShowMainLineTips(true)
- end
- else
- self.circle_task_info[info.task_type] = info
- end
- self.lask_bounty_process = info.cur_progress
-
- elseif info.task_type == TaskType.GUILD_LINE then
- self.circle_task_info[info.task_type] = info
- if (self.lask_guild_process == 9 and info.cur_progress == 10) then
- GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
- if SceneManager:getInstance():IsMainCityorYieldScene() then
- GlobalEventSystem:Fire(EventName.OPEN_TASK_CIRCLE_TIPS, info.task_type)
- else
- self.wait_circle_show_award_data = info.task_type
- end
- end
- self.lask_guild_process = info.cur_progress
- end
- GlobalEventSystem:Fire(EventName.REFRESH_TASK_CIRCLE_TIPS)
- self:Fire(TaskEvent.TASK_LIST_INIT)
- end
-
- function TaskModel:GetCircleTaskInfo( task_type )
- return self.circle_task_info[task_type]
- end
-
- --能否接社团/赏金任务
- function TaskModel:CanAcceptCircleTask( task_type )
- local info = self:GetCircleTaskInfo(task_type)
- return not self:GetTaskByType(task_type) and info and info.cur_progress and info.cur_progress==0
-
- and ( (task_type==TaskType.BOUNTY_LINE and GetModuleIsOpen(300,1))
- or (task_type==TaskType.GUILD_LINE and GetModuleIsOpen(300,2) and RoleManager.Instance.mainRoleInfo.guild_id>0) )
- end
-
- --社团任务红点
- function TaskModel:CanAcceptTaskRed( )
- local info = self:GetCircleTaskInfo(TaskType.GUILD_LINE)
- if not info then return end
- return (self:GetTaskByType(TaskType.GUILD_LINE) ~= nil or (RoleManager.Instance.mainRoleInfo.level >= Config.ConfigOpenLv.Other.guild_task and RoleManager.Instance.mainRoleInfo.guild_id>0) and info.cur_progress == 0 )
- end
-
- --根据任务类型获取直接完成需要消耗的彩钻
- function TaskModel:GetCostFinishTask( task_type )
- local need = 0
- local cfg = Config.Tasktype[task_type]
- local list = false
- if cfg and cfg.finish_cost then
- list = stringtotable(cfg.finish_cost)
- if list[1] and list[1][3] then
- need = tonumber(list[1][3])
- end
- end
- return need,list[1]
- end
-
- --飞龙任务
- function TaskModel:IsDragonFlyTask()
- for i,v in ipairs(self.all_task_list) do
- if v.type == TaskType.MAIN_LINE then
- if v.id == TaskModel.DragonTaskId and v.acceptType==0 and v.cur_num<v.target_num then
- return true
- end
- end
- end
- end
-
- --断级主线任务是否需要显示箭头提醒
- function TaskModel:DefaultTaskShowArrow()
- if not self._nextMain then
- return
- end
- local level = self._nextMain.level
- if level and level~=0 and self.default_task_arrow_list[level] == nil then
- self.default_task_arrow_list[level] = true
- GlobalEventSystem:Fire(EventName.TEST_HELP_STEP, 999991007)
- GlobalEventSystem:Fire(EventName.IS_SHOW_TRUN_MASK_HELPER)
- end
- end
-
- --20秒不动,自动做任务, 副本,杀怪,采集类优先, 然后才是主线任务
- function TaskModel:AutoDoTaskByType( )
- --SceneManager:getInstance():IsEscortScene() or
- if (not SceneManager:getInstance():IsMainCityorYieldScene() and not self.is_stop and not self.is_auto_task) then
- return
- end
- local list = self:GetMainUITaskData()
- local task_data
- for k,v in pairs(list) do
- if v.tipParam and v.tipParam[1] then
- local tip_type = v.tipParam[1]
- if v.acceptType==0 and (tip_type==TaskTipType.TYPE1
- or tip_type==TaskTipType.TYPE2 or tip_type==TaskTipType.TYPE6
- or tip_type==TaskTipType.TYPE18) and self:IsAutoDoTask(v) then
- task_data = v
- break
- end
- end
- end
- if not task_data then
- task_data = self:GetMainTask()
- end
- if task_data and not task_data.mainTip then
- return task_data
- end
- end
-
- --是否显示武器, 采集任务完成后才显示
- function TaskModel:IsHideMainRoleWeapon( )
- local is_weapon_task_finish = self:IsTaskFinished(Config.ConfigTaskEffect.MonsterWeaponTaskID)
- if RoleManager.Instance.mainRoleInfo.level<4 and not is_weapon_task_finish then
- return true
- else
- return false
- end
- end
-
- --获取赏金任务提示
- function TaskModel:GetBountyTipTask( )
- if self:CanAcceptCircleTask(TaskType.BOUNTY_LINE) then
- print('Ych:TaskModel.lua[2216] data', data)
- --当日赏金任务任务未做
- local taskVo = TaskVo.New()
- taskVo.level = Config.ConfigOpenLv.Other.bounty_task
- local str = TaskModel.TaskTypeStr3[TaskType.BOUNTY_LINE]
- local cfg = self:GetTaskAcceptNpcConfig(TaskType.BOUNTY_LINE)
- local temp = ConfigItemMgr.Instance:GetNpcItem(cfg.npc_id)
- if not temp then return end
- taskVo.description = "日常每天做一做,升级快战力高,千万不要错过!每完成10环还有特殊奖励,每天凌晨4点重置日常任务!"
- taskVo.taskName = string.format("%s任务", str)
- taskVo.task_name = string.format("%s任务", str)
- taskVo.type = TaskType.BOUNTY_LINE
- taskVo.isTipTask = true
- taskVo.need_find_way = 1
- taskVo.target_num = 0
- taskVo.order = 0
- taskVo.id = Config.ConfigTaskEffect.bountyTaskTipId
- taskVo.task_id = Config.ConfigTaskEffect.bountyTaskTipId
- taskVo.tips = string.format("寻找<color=#2CF66F>%s</color>", Trim(temp.name))
- taskVo.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVo.type] --任务类型排序
- taskVo.taskTips = {}
- taskVo.taskTips[1] = TaskTipsVo.New()
- taskVo.taskTips[1].type = TaskTipType.TYPE0
- taskVo.taskTips[1].id = cfg.npc_id
- taskVo.taskTips[1].sceneId = cfg.scene_id
- taskVo.taskTips[1].need_find_way = 1
- taskVo.tipParam={taskVo.type, cfg.scene_id, cfg.npc_id, taskVo.id}
- -------------------------
- local basedata=ConfigItemMgr.Instance:GetTaskData(70010001)
- if basedata then
- taskVo.award_list = stringtotable(basedata.award_list)
- end
- for k,v in pairs(taskVo.award_list) do
- if tonumber(v[2]) == 100007 then
- v[3] = v[3] + NewMainRoleModel:getInstance():GetRoleActivityBaseExp( ) * DailyModel:GetInstance():GetBackAwardPer( 300, 1 )
- end
- end
- -------------------------
- return taskVo
- end
- end
-
- --获取社团任务提示
- function TaskModel:GetGuildTipTask( )
- if self:CanAcceptCircleTask(TaskType.GUILD_LINE) then
- --当日社团任务任务未做
- local taskVo = TaskVo.New()
- taskVo.level = Config.ConfigOpenLv.Other.guild_task
- local str = TaskModel.TaskTypeStr3[TaskType.GUILD_LINE]
- local cfg = self:GetTaskAcceptNpcConfig(TaskType.GUILD_LINE)
- local temp = ConfigItemMgr.Instance:GetNpcItem(cfg.npc_id)
- if not temp then return end
- taskVo.description = "凡是会长说的!砸锅卖铁也要干——《社团成员守则节选》!每10环社团任务还会有特殊阶段奖励!撸起袖子加油吧!每周一凌晨4点重置社团任务!"
- taskVo.taskName = string.format("%s任务", str)
- taskVo.task_name = string.format("%s任务", str)
- taskVo.type = TaskType.GUILD_LINE
- taskVo.isTipTask = true
- taskVo.target_num = 0
- taskVo.order = 0
- taskVo.need_find_way = 1
- taskVo.id = Config.ConfigTaskEffect.guildTaskTipId
- taskVo.task_id = Config.ConfigTaskEffect.guildTaskTipId
- taskVo.tips = string.format("寻找<color=#2CF66F>%s</color>", Trim(temp.name))
- taskVo.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVo.type] --任务类型排序
- taskVo.taskTips = {}
- taskVo.taskTips[1] = TaskTipsVo.New()
- taskVo.taskTips[1].type = TaskTipType.TYPE0
- taskVo.taskTips[1].id = cfg.npc_id
- taskVo.taskTips[1].sceneId = cfg.scene_id
- taskVo.taskTips[1].need_find_way = 1
- taskVo.tipParam={taskVo.type, cfg.scene_id, cfg.npc_id, taskVo.id}
- -------------------------
- local basedata=ConfigItemMgr.Instance:GetTaskData(60010001)
- if basedata then
- taskVo.award_list = stringtotable(basedata.award_list)
- end
- for k,v in pairs(taskVo.award_list) do
- if tonumber(v[2]) == 100007 then
- v[3] = v[3] + NewMainRoleModel:getInstance():GetRoleActivityBaseExp( ) * DailyModel:GetInstance():GetBackAwardPer( 300, 2 )
- end
- end
- -------------------------
- return taskVo
- end
- end
-
- --获取特殊支线步骤
- function TaskModel:GetExtendSpecialTip( task )
- if task and task.taskTips then
- for k,v in pairs(task.taskTips) do
- if Config.ConfigTaskEffect.NeedClickTaskType[v.type] then
- return v
- end
- end
- end
- end
-
- -- 获取下一阶段转职任务(不可接取的情况)
- function TaskModel:GetTurnTipTask( )
- local mainVo = RoleManager.Instance.mainRoleInfo
- -- 当前【转职任务】阶数为0,表示当前还没开始转职任务的第一阶段,第一阶段要到达对应等级直接接任务开始
- if not mainVo.turn_stage or mainVo.turn_stage == 0 then return nil end
- local taskVo = nil
- local key = (mainVo.turn+1).."@"..(mainVo.turn_stage+1)
- local task_cfg = Config.Transfer[key]
-
- if task_cfg and task_cfg.need_lev > mainVo.level then -- 要确定当前确实不可以接这个任务
- local basedata = ConfigItemMgr.Instance:GetTaskData(tonumber(task_cfg.task_id))
- taskVo = TaskVo.New()
- taskVo.level = task_cfg.need_lev
- local str = TaskModel.TaskTypeStr3[TaskType.TRUN_LINE]
- taskVo.description = "%s级可继续转职任务"
- taskVo.taskName = Trim(basedata.name)
- taskVo.type = TaskType.TRUN_LINE
- taskVo.isTipTask = true
- taskVo.cur_num = mainVo.level
- taskVo.target_num = task_cfg.need_lev
- taskVo.order = 0
- taskVo.need_find_way = 0
- taskVo.id = task_cfg.task_id
- taskVo.tips = string.format("<color=#2CF66F>%s</color>级继续任务", task_cfg.need_lev)
- taskVo.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVo.type] or 99 --任务类型排序
- -- taskVo.tipContent="<color="..TaskModel.Color.WHITE..">("..taskVo.cur_num.."/"..taskVo.target_num..")</color>"
- taskVo.tipContent=string.format("<color=#2CF66F>%s</color>级继续任务(<color=#f14041>%s</color>/%s)",
- task_cfg.need_lev, taskVo.cur_num, taskVo.target_num)
- taskVo.taskTips = {}
- -- taskVo.taskTips[1] = TaskTipsVo.New()
- -- taskVo.taskTips[1].type = TaskTipType.TYPE0
- -- taskVo.taskTips[1].id = cfg.npc_id
- -- taskVo.taskTips[1].sceneId = cfg.scene_id
- -- taskVo.taskTips[1].need_find_way = 1
- -- taskVo.tipParam={taskVo.type, cfg.scene_id, cfg.npc_id, taskVo.id}
- end
- return taskVo
- end
-
- function TaskModel:GetTreasureTask(type)
- self.treasure_task_list = self.treasure_task_list or {}
- if not self.treasure_task_list[type] then
- local treasure_task = TaskVo.New()
- treasure_task.id = Config.ConfigTaskEffect.TreasureMapTaskId
- treasure_task.level = 1
- treasure_task.type = TaskType.TREASURE
- treasure_task.sub_type = type
- treasure_task.taskName = type == TreasureMapConst.Normal and "普通藏宝图" or "高级藏宝图"
- treasure_task.tipContent = ""
- treasure_task.isSend = 1;
- treasure_task.acceptType = 0
- treasure_task.tipType = TaskType.TREASURE
- treasure_task.isFake = true
- treasure_task.sortKey = Config.ConfigTaskEffect.TaskTypeSort[TaskType.TREASURE]
- treasure_task.taskTips = {}
- treasure_task.taskTips[1] = TaskTipsVo.New()
- treasure_task.taskTips[1].type = TaskTipType.TYPE0
- treasure_task.taskTips[1].id = 0
- treasure_task.taskTips[1].sceneId = 0
- treasure_task.taskTips[1].need_find_way = 1
- treasure_task.tipParam = {TaskType.TREASURE, 0, 0, 0};
- self.treasure_task_list[type] = treasure_task
- end
- return self.treasure_task_list[type]
- end
-
- --获取当前的主线任务id 协议返回的是上一个完成的任务id, 加1就行了, 用于判断任务开放的功能
- function TaskModel:GetMainTaskId( )
- return self.last_finish_task_id + 1
- end
-
- --获取该npc的任务状态
- function TaskModel:GetNpcState( npc_id )
- for k,v in ipairs(self.all_task_list) do
- if v.taskTips and (v.type==TaskType.GUILD_LINE or v.type==TaskType.BOUNTY_LINE) then
- local len = #v.taskTips
- local start_npc = 0 --非对话步骤,没有npc_id,判断是否和开始npc一样就行了
- for m,n in ipairs(v.taskTips) do
- if n.type==TaskTipType.TYPE8 or n.type==TaskTipType.TYPE7 then
- start_npc = n.id
- break
- end
- end
- -------------------------
- if npc_id == v.tipParam[3] then
- -------------------------
- for m,n in ipairs(v.taskTips) do
- if (n.isFinish==0 or m==len) then
- if n.type==TaskTipType.TYPE8 or n.type==TaskTipType.TYPE7 then
- if n.id==npc_id then
- return 1
- end
- elseif n.type == TaskTipType.TYPE9 then
- if n.id==npc_id then
- return 3
- end
- elseif n.type == TaskTipType.TYPE38 then
- if n.id==npc_id then
- return 3
- end
- else
- if npc_id == start_npc then
- return 2
- end
- end
- end
- end
- end
- end
- end
- end
-
- --开始做日常任务
- function TaskModel:DoBountyTask( )
- local task
- if self:HasBountyRed() then
- task = self:GetBountyTipTask()
- else
- task = self:GetTaskByType(TaskType.BOUNTY_LINE)
- end
- self:TaskClickFun(task)
- end
-
- --开始做社团任务
- function TaskModel:DoGuildTask( )
- local task
- if self:HasGuildRed() then
- task = self:GetGuildTipTask()
- else
- task = self:GetTaskByType(TaskType.GUILD_LINE)
- end
- self:TaskClickFun(task)
- end
-
- --是否自动做的任务
- function TaskModel:IsAutoDoTask( task )
- if task and task.type and task.type==TaskType.LIMIT_LINE then
- return false
- end
-
- if task and (task.id == Config.ConfigTaskEffect.bountyTaskTipId or task.id == Config.ConfigTaskEffect.guildTaskTipId) then
- return true
- end
-
- if task and task.tipParam and task.tipParam[1] then
- if task.tipParam[1]==TaskTipType.TYPE2 then
- if task.type == TaskType.EXTENSION_LINE then
- --社团和赏金的副本是需要自动做的
- return false
- else
- return true
- end
- else
- return not Config.ConfigTaskEffect.NotNeedAutoTaskType[task.tipParam[1]]
- end
- end
- end
-
- --是否点一下才能完成的支线任务
- function TaskModel:IsNeedClickTask( task )
- if task and task.tipParam and task.tipParam[1] then
- if task.tipParam[1]==TaskTipType.TYPE2 then
- if task.type == TaskType.EXTENSION_LINE then
- return true
- else
- return false
- end
- else
- return Config.ConfigTaskEffect.NeedClickTaskType[task.tipParam[1]]
- end
- end
- end
-
- --是否点一下才能完成的支线任务 步骤
- function TaskModel:IsNeedClickTipTask( tip_type, task_type )
- if tip_type==TaskTipType.TYPE2 then
- if task_type == TaskType.EXTENSION_LINE then
- return true
- else
- return false
- end
- else
- return Config.ConfigTaskEffect.NeedClickTaskType[tip_type]
- end
- end
-
- --判断是否有转职任务
- function TaskModel:HasTurnLine( )
- for k,v in pairs(self.all_task_list) do
- if v.type == TaskType.TRUN_LINE then
- return true
- end
- end
- end
- ----- 转职任务相关特殊处理 -----
- -- 当前任务是否需要打开转职引导界面
- function TaskModel:NeedOpenTurnMainView(task_vo)
- if not task_vo then return true end
- if Config.ConfigTaskEffect.OpenMainTurnTaskViewId[task_vo.id] then return true end
- return false
- end
-
- -- 是否是可以继续自动进行的转职任务
- function TaskModel:NeedAutoDoTurnTask(task_vo)
- -- 打怪任务之外,其他的任务均不可自动继续
- if not task_vo then return false end
- local taskTipVO = task_vo.taskTips and task_vo.taskTips[1]
- if taskTipVO and taskTipVO.type == TaskTipType.TYPE1 then --击败怪物
- return true
- end
- if taskTipVO and taskTipVO.isFinish == 1 then -- 任务已经完成,可以自动前往
- return true
- end
- return false
- end
-
- -- 记录完成转职任务时的等级,用于判断后续接取的任务是不是在卡级阶段
- -- 是的话则不自动进行任务
- function TaskModel:RecordProcessingTurnTaskLevel( )
- self.recorded_finish_turn_task_lv = RoleManager.Instance.mainRoleInfo.level
- end
-
- -- 当前接取到的转职任务是否时卡级阶段
- function TaskModel:IsNewTurnTaskInLimitLv( )
- -- print("Saber:TaskModel [2699] self.recorded_finish_turn_task_lv: ",self.recorded_finish_turn_task_lv)
- -- print("Saber:TaskModel [2700] RoleManager.Instance.mainRoleInfo.level: ",RoleManager.Instance.mainRoleInfo.level)
- return self.recorded_finish_turn_task_lv < RoleManager.Instance.mainRoleInfo.level
- end
- ----- 转职任务相关特殊处理 -----
-
- --是否在等待30003或者30004, 如果请求了这两条, 返回后才刷新界面和做任务,否则可能数据是旧的
- function TaskModel:IsWaitProto( )
- return self.wait_30003 or self.wait_30004
- end
-
- function TaskModel:HideRoleWeapon( )
- --采集完武器,显示武器模型
- local role = Scene.Instance:GetMainRole()
- if role then
- if self:IsHideMainRoleWeapon() then
- role:HideAllWeapon(Character.WeaponHideFlag.Story)
- else
- role:ShowAllWeapon(Character.WeaponHideFlag.Story)
- end
- end
- end
-
- --获取任务面板的支线数据
- function TaskModel:GetExtensionTabData()
- local tab_data = {
- [1] = {main_tab = "已接支线", sub_tab = {}},
- [2] = {main_tab = "可接支线", sub_tab = {}},
- }
- local one = {}
- local data1 = {}
- local two = {}
- local data2 = {}
- self.all_task_list = self:SortFun(self.all_task_list)
- for i,v in ipairs(self.all_task_list) do
- if v.type == TaskType.EXTENSION_LINE then
- if v.acceptType == 0 then
- table.insert(data1, v)
- else
- table.insert(data2, v)
- end
- end
- end
-
- tab_data[1].sub_tab = data1
- tab_data[2].sub_tab = data2
- return tab_data
- end
-
- function TaskModel:GetDoubleExp(id)
- local exp = 0
- local level = 0
- local playerLv = RoleManager:getInstance():GetMainRoleVo().level
- for index,data in pairs(Config.Taskexpmodulelv) do
- if data.module_id == id and playerLv >= data.min_lv and playerLv <= data.max_lv then
- exp = data.exp
- break
- end
- end
-
- if exp ~= 0 then
- local curr_exp = RoleManager.Instance.mainRoleInfo.exp
- local total_exp = curr_exp + exp
- local need_exp = Config.Exp[playerLv].exp
- --如果不够一级
- if total_exp < need_exp then
- level = GetPreciseDecimal(exp / need_exp,1)
- elseif total_exp == need_exp then
- level = 1
- else
- local len = #Config.Exp - 1 --最后一级是 0
- local lv_exp = nil
- for i = playerLv,len do
-
- lv_exp = Config.Exp[i].exp
-
- if total_exp > lv_exp then
- level = level + 1
- total_exp = total_exp - lv_exp
- else
- level = level + GetPreciseDecimal(total_exp / lv_exp,1)
- break
- end
- end
- end
- end
-
- if level <= 0.1 then
- level = 0.1
- end
-
- return exp,level
- end
-
- function TaskModel:SetTaskAutoFlag(bool)
- self.is_auto_task = bool
- end
-
- --获取是否自动任务中
- function TaskModel:GetTaskAutoFlag()
- return self.is_auto_task
- end
-
-
- function TaskModel:IsLoseAutoTaskDungeon(dun_id)
- if SceneManager.Instance:IsGodHoodDungeon(dun_id) or SceneManager.Instance:IsGemDungeon(dun_id) then
- return true
- end
-
- return false
- end
-
- --主线是否完成
- function TaskModel:IsMainTaskFinish(task_id)
- if task_id <= self.last_finish_task_id then
- return true
- end
-
- return false
- end
-
- --主线是否完成
- function TaskModel:IsEnterDungeonTask()
- local task = TaskModel:getInstance():GetCurTask()
- if task then
- for k,v in pairs(task.taskTips) do
- if v.isFinish == 0 then
- if v.type==TaskTipType.TYPE2 then
- return true
- else
- return false
- end
- end
- end
- end
- return false
- end
-
- --主线是否完成
- function TaskModel:CanDoTaskInEveryScene(param)
- local array=Split(param,",")
- if array and #array > 0 then
- local type = tonumber(array[1])
-
- if Config.ConfigTaskEffect.NeedClickTaskType[type] then
- --点击判断是否已经完成任务,是的话发协议完成任务
- local task = TaskModel:getInstance():GetTaskById(tonumber(array[4]))
- if self:IsNeedClickTask(task) then
- local tip = self:GetExtendSpecialTip(task)
- if tip and tip.isFinish==1 then
- return true
- end
- end
- end
-
- if type == TaskTipType.TYPE41 or type == TaskTipType.TYPE25 or type == TaskTipType.TYPE101 or type == TaskTipType.TYPE104 or type == TaskTipType.TYPE105 or
- type == TaskTipType.TYPE106 or type == TaskTipType.TYPE108 or type == TaskTipType.TYPE109 or type == TaskTipType.TYPE110 or type == TaskTipType.TYPE23 or
- type == TaskTipType.TYPE24 or type == TaskTipType.TYPE26 then
- return true
- end
- end
-
- return false
- end
-
- --获取接取任务的npc配置
- function TaskModel:GetTaskAcceptNpcConfig(task_type)
- local npc_cfg = Config.ConfigTaskEffect.npc
- if KfWorldModel:GetInstance():IsKFCityOpen() then
- npc_cfg = Config.ConfigTaskEffect.kfNpc
- end
- if task_type then
- return npc_cfg[task_type]
- else
- return npc_cfg
- end
- end
-
- --主线是否完成
- function TaskModel:SetNeedTaskFlag(bool)
- self.need_task = bool
- end
-
- --主线是否完成
- function TaskModel:NeedShowExtendTip()
- local playerLv = RoleManager:getInstance():GetMainRoleVo().level
- if playerLv > 150 then
- return false
- end
-
- for index,taskVO in pairs(self.all_task_list) do
- if taskVO.type == TaskType.MAIN_LINE or taskVO.type == TaskType.BOUNTY_LINE or taskVO.type == TaskType.GUILD_LINE or taskVO.type == TaskType.TRUN_LINE then
- return false
- end
- end
-
- if self:GetBountyTipTask() or self:GetGuildTipTask() then
- return false
- end
-
- return true
- end
-
-
- function TaskModel:NeedFindWayTask(type)
- local need = false
- if type == TaskTipType.TYPE0 or type == TaskTipType.TYPE7 or type == TaskTipType.TYPE8 or
- type == TaskTipType.TYPE9 or type == TaskTipType.TYPE1 or type == TaskTipType.TYPE18 or
- type == TaskTipType.TYPE6 or type == TaskTipType.TYPE2 or type == TaskTipType.TYPE38 then
- need = true
- end
- return need
- end
-
- function TaskModel:SetCollectTaskId(task_id)
- self.collect_task_id = task_id
- end
-
- function TaskModel:ClearCollectTaskId()
- self.collect_task_id = false
- end
-
- function TaskModel:GetCollectTaskId()
- return self.collect_task_id
- end
-
- function TaskModel:IsTaskFinished( id )
- if self.finish_task_list then
- local flag = false
- if self.finish_task_list[id] then
- flag = true
- end
- return flag
- end
- end
-
- function TaskModel:SetFinishTaskList( list )--已完成任务列表
- self.finish_task_list = list
- GlobalEventSystem:Fire(TaskEvent.ANS_FINISHED_TASK_LIST)
- end
-
- function TaskModel:AddFinishTask( id )
- local story_id = Config.ConfigTaskEffect.TaskStoryID[id]
- if story_id then
- self:SetTriggerStoryId(story_id)
- end
- self.finish_task_list[id] = id
- if self.task_listen_list and self.task_listen_list[id] then
- GlobalEventSystem:Fire(TaskEvent.ANS_FINISHED_TASK_LIST,id)
- end
- end
-
- function TaskModel:SetTriggerStoryId( id )
- self.trigger_story_id = id
- end
-
- function TaskModel:GetTriggerStoryId( )
- return self.trigger_story_id
- end
-
- -- 2019年11月4日新增 : 获取可选任务内容配置
- function TaskModel:GetOptionalTaskCfg(task_id)
- if not task_id then return nil end
- local talk_cfg = {}
- local choose_talk_cfg = Config.Choosetalk[task_id]
- if choose_talk_cfg then
- talk_cfg.intellect = choose_talk_cfg.intellect
- talk_cfg.nastic = choose_talk_cfg.nastic
- talk_cfg.indecision = choose_talk_cfg.indecision
- talk_cfg.value = choose_talk_cfg.value
- talk_cfg.talk_list = {}
- -- 让对话id小的在前
- -- 1 理性, 2,感性 3中性
- local temp = {}
- temp[choose_talk_cfg.intellect] = 1
- temp[choose_talk_cfg.nastic] = 2
- if choose_talk_cfg.indecision then -- 不一定有第三个选项
- temp[choose_talk_cfg.indecision] = 3
- end
- for k,v in pairsByKeys(temp) do
- local index = #talk_cfg.talk_list+1
- talk_cfg.talk_list[index] = ConfigItemMgr.Instance:GetTalkItem(k)
- talk_cfg.talk_list[index].choose_type = v
- end
- -- if choose_talk_cfg.intellect < choose_talk_cfg.nastic then
- -- talk_cfg.intellect_first = true
- -- talk_cfg.talk_list[#talk_cfg.talk_list+1] = ConfigItemMgr.Instance:GetTalkItem(choose_talk_cfg.intellect)
- -- talk_cfg.talk_list[#talk_cfg.talk_list+1] = ConfigItemMgr.Instance:GetTalkItem(choose_talk_cfg.nastic)
- -- else
- -- talk_cfg.intellect_first = false
- -- talk_cfg.talk_list[#talk_cfg.talk_list+1] = ConfigItemMgr.Instance:GetTalkItem(choose_talk_cfg.nastic)
- -- talk_cfg.talk_list[#talk_cfg.talk_list+1] = ConfigItemMgr.Instance:GetTalkItem(choose_talk_cfg.intellect)
- -- end
- -- talk_cfg.reback = ConfigItemMgr.Instance:GetTalkItem(choose_talk_cfg.reback)
- else
- return nil
- end
- return talk_cfg
- end
-
- -- 根据npcid获取目标npc身上的任务
- function TaskModel:GetTaskDataByNpcId(npc_id)
- local tb = {}
- if not npc_id then return tb end
- for k, task_vo in pairs(self.all_task_list) do
- if task_vo.end_npc == npc_id then
- tb[#tb+1] = task_vo
- end
- end
- return tb
- end
-
- --动态任务内容配置
- function TaskModel:DynamicTaskConf( task_id )
- for k,v in pairs(Config.Typetaskdynamic) do
- if v.task_id == task_id then
- return v
- end
- end
- end
-
- --取得包含该副本id的任务信息
- function TaskModel:GetTaskVoByDungeonID( dun_id )
- for i,v in ipairs(self.all_task_list) do
- if v.tipParam then
- local task_tip_type = v.tipParam[1]
- local is_dun_type = task_tip_type == TaskTipType.TYPE2 or task_tip_type == TaskTipType.TYPE102
- local dun_id_in_task_info = v.tipParam[3]
- if is_dun_type and dun_id_in_task_info == dun_id then
- --副本类型的任务
- return v
- end
- end
- end
- return nil
- end
-
- --新手期显示章节任务UI
- function TaskModel:IsShowChapterTask( )
- return not self:IsTaskFinished(Config.ConfigTaskEffect.LastChapterTaskId)
- end
-
- --设置切换场景类型,任务寻路的时候,走到传送阵的时候传送类型是4(无视场景数量,直达最终场景)
- function TaskModel:SetChangeSceneType( type, find_vo )
- self.task_change_scene_type = type
- self.task_change_scene_vo = find_vo
- end
-
- function TaskModel:GetChangeSceneType( )
- return self.task_change_scene_type, self.task_change_scene_vo
- end
-
- --获取任务栏item的高度
- function TaskModel:GetTaskItemHeight( data )
- local temp_height = 52 --一行文本
- if not data then
- return temp_height
- end
- if data.tipType == TaskTipType.TYPE40 then --商城购买支线
- if data.is_money_enough or self:IsTaskProgressFinish(data) then
- temp_height = 72 --两行文本
- else
- temp_height = 92 --三行文本
- local equip_type = EquipModel:getInstance():GetEquipType( data.tipParam[3] )
- if equip_type then
- local type_const = EquipModel.EquipType
- if equip_type == type_const.Guard or equip_type == type_const.LeftRing
- or equip_type == type_const.RightRing or equip_type == type_const.Necklace then
- -- 守护戒指耳饰类--项链类
- temp_height = 72
- end
- end
- end
- elseif data.tipType == TaskTipType.TYPE1002 then -- 成就
- local str = DeleteColorTag(data.tipContent)
- local str_width = self:CalStrWidth(str)
- local per_width = 188
- local line_count = math.ceil(str_width / per_width)
- -- print('Msh:TaskModel.lua[2664] data', str_width, per_width, str)
- if line_count == 1 then
- temp_height = 52
- elseif line_count == 2 then
- temp_height = 72
- elseif line_count == 3 then
- temp_height = 92
- end
- elseif data.tipType == TaskTipType.TYPE42 then --亲密度支线
- temp_height = 72
- elseif data.tipType == TaskTipType.TYPE100 then--赏金幻魔
- temp_height = 72
- elseif data.tipType == TaskTipType.TYPE102 then --完成某副本类型
- if data.tipParam[3] == BaseDungeonModel.DUN_TYPE.PersonBoss then
- temp_height = 72
- end
- elseif data.tipType == TaskTipType.TYPE24 then --活跃度
- temp_height = 72
- -- elseif data.type == TaskType.BOUNTY_LINE or data.type == TaskType.GUILD_LINE then --跑环支线
- -- temp_height = 72 --一行文本+按钮
- elseif data.tipType == TaskTipType.TYPE57 then --完成预期任务
- temp_height = 72
- elseif data.tipType == TaskTipType.TYPE48 then --晒娃
- temp_height = 72
- elseif data.tipType == TaskTipType.TYPE58 then --宝宝同心值
- temp_height = 72
- elseif data.tipType == TaskTipType.TYPE59 then --战力
- temp_height = 72
- elseif TaskModel.TaskTurnBossTaskId[data.id] then--转职任务boss战任务id
- temp_height = 72
- end
- return temp_height
- end
-
- --当前存在此任务列表,并且 有一个任务没完成
- function TaskModel:IsTaskListUnFinished(task_list)
- if not task_list or #task_list == 0 then
- return false
- end
- local is_all_finished = true
- for k,v in pairs(task_list) do
- for ii,vv in ipairs(self.all_task_list) do
- if vv.id == v then
- return true
- end
- end
- end
- return false
- end
-
- --是否完成了前面一个任务,并且没完成后面一个任务
- function TaskModel:IsBetweenTaskListState(task_list)
- if not task_list or #task_list ~= 2 then
- return false
- end
- local b = false
- local pre_task_id, next_task_id = task_list[1], task_list[2]
- if self:IsTaskFinished(pre_task_id) and not self:IsTaskFinished(next_task_id) then
- b = true
- end
- return b
- end
-
- --是否可领取跑环奖励
- function TaskModel:CanCircleReward( task_type )
- if not task_type then return end
- local info = self:GetCircleTaskInfo(task_type)
- if not info then
- return false
- end
- local reward_progress = info and info.reward_progress or 0
- if reward_progress == 0 and info.cur_progress >= 10 then
- return reward_progress
- elseif reward_progress <= 1 and info.cur_progress >= 20 then
- return reward_progress
- end
- return false
- end
-
- --跑环的十环领取任务
- function TaskModel:GetCircleExtraTask( task_type )
- if not task_type then return end
- local can_reward = self:CanCircleReward( task_type ) and true or false
- if can_reward then
- --可领取十环奖励
- local taskVo = TaskVo.New()
- taskVo.level = 1
- local str = TaskModel.TaskTypeStr3[task_type]
- local cfg = self:GetTaskAcceptNpcConfig(task_type)
- local temp = ConfigItemMgr.Instance:GetNpcItem(cfg.npc_id)
- if not temp then return end
- taskVo.description = "每完成10环有特殊奖励!"
- taskVo.taskName = string.format("%s任务", str)
- taskVo.task_name = string.format("%s任务", str)
- taskVo.type = task_type
- taskVo.isTipTask = true
- taskVo.need_find_way = 1
- taskVo.target_num = 0
- taskVo.order = 0
- taskVo.id = Config.ConfigTaskEffect.circleRewardTaskId[task_type]
- taskVo.task_id = Config.ConfigTaskEffect.circleRewardTaskId[task_type]
- taskVo.tips = "领取环数奖励"--string.format("寻找<color=#2CF66F>%s</color>", Trim(temp.name))
- taskVo.sortKey = 0 --任务类型排序
- taskVo.taskTips = {}
- taskVo.taskTips[1] = TaskTipsVo.New()
- taskVo.taskTips[1].type = TaskTipType.TYPE0
- taskVo.taskTips[1].id = cfg.npc_id
- taskVo.taskTips[1].sceneId = cfg.scene_id
- taskVo.taskTips[1].need_find_way = 1
- taskVo.tipParam={taskVo.type, cfg.scene_id, cfg.npc_id, taskVo.id}
- taskVo.award_list = {}
- -------------------------
- return taskVo
- end
- end
-
- ----------推荐成就-start---------
- -- 直接拉取
- function TaskModel:SetAchiTaskVo( list )
- local level = RoleManager.Instance.mainRoleInfo.level
- if level < 150 then return end
-
- --如果所有的任务数量,超过6个则不显示可接的成就,否则填充至6个(已经完成的,不算最大数量里面)
- local cur_task_count = #list
- local max_can_get_achitask_count = 6
-
- local achieve_model = AchieveModel:getInstance()
- local can_get_list = achieve_model:GetCanGetAchiList() or {}
- for i, v in pairs(can_get_list) do
- local taskVo = TaskVo.New()
- taskVo.type = TaskType.ACHIEVE
- taskVo.tipContent = Trim(v.desc) .. "" .. achieve_model:ParseCondition( v )
- taskVo.taskName = Trim(v.name)
- taskVo.achi_data = v
- taskVo.progress_data = achieve_model:GetTargetAchieveData(v.type, v.sub_type)
- taskVo.tipType = TaskTipType.TYPE1002
- taskVo.task_position = 0
- taskVo.progressState = 1
- taskVo.achieve_id = v.type * 10000000000 + v.sub_type
- table.insert(list, taskVo)
- end
- --超过最大数量,就不添加了
- if cur_task_count >= max_can_get_achitask_count then return end
-
- local recommend_achi = achieve_model:GetRecommendAchiList() or {}
- for pos,v in pairs(recommend_achi) do
- local taskVo = TaskVo.New()
- taskVo.type = TaskType.ACHIEVE
- taskVo.tipContent = Trim(v.desc) .. achieve_model:ParseCondition( v )
- taskVo.taskName = Trim(v.name)
- taskVo.achi_data = v
- taskVo.progress_data = achieve_model:GetTargetAchieveData(v.type, v.sub_type)
- taskVo.tipType = TaskTipType.TYPE1002
- taskVo.task_position = pos
- taskVo.sortKey = Config.ConfigTaskEffect.TaskTypeSort[taskVo.type]
- taskVo.achieve_id = v.type * 10000000000 + v.sub_type
- table.insert(list, taskVo)
-
- --添加可接成就后,再去判断是否超过最大显示数量
- cur_task_count = cur_task_count + 1
- if cur_task_count >= max_can_get_achitask_count then break end
- end
- end
-
- -- 日常活跃任务
- function TaskModel:SetDailyActiviteTaskVo( list )
-
- local level = RoleManager.Instance.mainRoleInfo.level
- if level < Config.ConfigTaskEffect.DailyTaskActiviteCheckLevel then return end
- local is_show_task_finish = TaskModel:getInstance():IsTaskFinished(Config.ConfigTaskEffect.DailyCircleShowTaskId)
- if not is_show_task_finish then return end
- local daily_model = DailyModel.getInstance()
- local show_data = daily_model:GetCommonShowList() or {}
-
- local daily_list = {}
-
- self.cur_tips_daily_task_item = false
-
- for i,v in ipairs(show_data) do
- local taskVo = TaskVo.New()
- -- print('Ych:TaskModel.lua[3107] data', data)
- -- PrintTable(v)
-
- local task_max = v.show_max_times and v.show_max_times or v.max_times
- local cur_num, max_num = daily_model:DailyCommonTipsCurNumAndMaxNum(v)
- if cur_num < max_num then
- local key = v.module .. "@" .. v.module_sub
- local cfg = Config.ConfigTaskEffect.DailyActiviteTask[key]
- if cfg then
-
- if cfg.recommend == 1 and (not self.cur_tips_daily_task_item or self.cur_tips_daily_task_item.order < cfg.order) then
- self.cur_tips_daily_task_item = cfg
- end
- taskVo.type = TaskType.DAILY_ACTIVITE
- taskVo.tipContent = Trim(cfg.desc)
- taskVo.taskName = Trim(cfg.name)
- taskVo.achi_data = v
- taskVo.progress_data = 1
- taskVo.tipType = TaskTipType.TYPE9998
- taskVo.task_position = 0
- --竞技场如果处于冷却,排序要降低
- if v.module == 280 and v.module_sub == 0 then
- local is_cd, cd_time = PkRankModel.getInstance():GetChallengeCd()
- if is_cd then
- taskVo.order = 1
- else
- taskVo.order = cfg.order
- end
- --赏金幻魔显示购买次数的时候,置底,并且在竞技场之上
- elseif v.module == 460 and v.module_sub == 3 then
- local left_count, all_count = BossModel:GetInstance():GetMoneyLeftCount()
- if left_count > 0 then
- taskVo.order = cfg.order
- else
- taskVo.order = 2
- end
- else
- taskVo.order = cfg.order
- end
- taskVo.progressState = 0
- taskVo.id = 19000000000 + v.module * 100 + v.module_sub
- taskVo.module = v.module
- taskVo.module_sub = v.module_sub
- table.insert(list, taskVo)
- end
- end
-
- end
- end
-
-
- -- 更新任务数据
- function TaskModel:UpdateSingleAchiTaskVo( taskVo )
- local achieve_model = AchieveModel:getInstance()
- local recommend_data = achieve_model:GetRecommendAchiList()[taskVo.task_position] or {}
- if not recommend_data.name then return end
- taskVo.tipContent = Trim(recommend_data.desc) .. "" .. achieve_model:ParseCondition( recommend_data )
- taskVo.taskName = Trim(recommend_data.name)
- taskVo.achi_data = recommend_data
- taskVo.progress_data = achieve_model:GetTargetAchieveData(recommend_data.type, recommend_data.sub_type)
- end
-
- -- 更新任务数据
- function TaskModel:UpdateAchiTaskVo( taskVo_list )
- for i,v in ipairs(taskVo_list) do
- if v.type == TaskType.ACHIEVE and v.task_position > 0 then -- 只更新推荐任务栏
- self:UpdateSingleAchiTaskVo(v)
- end
- end
- end
-
-
- -- 是否是功能型开放任务
- function TaskModel:IsFuncOpenTask( task_vo )
- local b = false
- if task_vo and Config.ConfigTaskEffect.ModuleOpenTask[task_vo.id] then
- b = true
- end
- return b
- end
-
- -- 是否是高排序型任务(order 1000 <= order <= 9999)
- function TaskModel:IsHighOrderTask( task_vo )
- local b = false
- if task_vo and task_vo.order >= 1000 and task_vo.order <= 9999 then
- b = true
- end
- return b
- end
-
-
- -- 是否是第二排序任务(order 1000 <= order <= 9999)
- function TaskModel:IsSecondOrderTask( task_vo )
- local b = false
- if task_vo and task_vo.order >= 501 and task_vo.order <= 999 then
- b = true
- end
- return b
- end
-
- -- 是否是日常活跃任务
- function TaskModel:IsDailyActiviteTask( task_vo )
- local b = false
- if task_vo and task_vo.type == TaskType.DAILY_ACTIVITE then
- b = true
- end
- return b
- end
-
- -- 是否是日常活跃任务中的护送任务
- function TaskModel:IsDailyActiviteEscortTask( task_vo )
- local b = false
- if task_vo and task_vo.type == TaskType.DAILY_ACTIVITE and task_vo.module == 500 and task_vo.module_sub == 0 then
- b = true
- end
- return b
- end
-
- -- 是否是日常活跃任务中的竞技场任务
- function TaskModel:IsDailyActivitePkrankTask( task_vo )
- local b = false
- if task_vo and task_vo.type == TaskType.DAILY_ACTIVITE and task_vo.module == 280 and task_vo.module_sub == 0 then
- b = true
- end
- return b
- end
-
- -- 是否是第三排序任务(order 1 <= order <= 500)
- function TaskModel:IsThirdOrderTask( task_vo )
- local b = false
- if task_vo and task_vo.order >= 1 and task_vo.order <= 500 then
- b = true
- end
- return b
- end
-
- -- 知否是购买型支线,并且已经完成,或者满足完成条件
- function TaskModel:IsBuyGoodsTaskFinished( task_vo )
- local b = false
- if task_vo and task_vo.type == TaskType.EXTENSION_LINE and task_vo.taskTips then
- for key, taskTipVO in ipairs(task_vo.taskTips) do
- if taskTipVO.type == TaskTipType.TYPE40 then
- local need_money = taskTipVO.sceneId --需要的价格
- local shop_key_id = taskTipVO.scene_x --商品id
- local money_type = Config.Shop[shop_key_id] and Config.Shop[shop_key_id].ctype --商品消耗货币类型
- local my_money = GoodsModel:getInstance():GetGoodsNumFromType(money_type) --我的商品消耗货币
- if task_vo.progressState == 1 or taskTipVO.isFinish == 1 or my_money >= need_money then --已完成
- b = true
- end
- end
- end
- end
- return b
- end
-
- -- 计算任务的长度
- function TaskModel:CalStrWidth( str )
- local key_width = {
- [1] = 14.84, -- 汉字
- [2] = 4.88, -- "("
- [3] = 8.26, -- 数字 1
- [4] = 4.13, --"/"
- }
- local word_offset = 0.197
- if not str then
- return 0
- end
- local char_count = 0
- local width = 0;
- for i=1, #str do
- local curByte = string.byte(str, i)
- local temp_width = 0
- if curByte == nil then
- temp_width = 0
- elseif curByte == 47 then -- "/"
- temp_width = key_width[4]
- char_count = char_count + 1
- elseif curByte == 40 or curByte == 41 then -- "(" ")"
- temp_width = key_width[2]
- char_count = char_count + 1
- elseif curByte>=48 and curByte<=57 then -- 数字
- temp_width = key_width[3]
- char_count = char_count + 1
- elseif curByte>=224 and curByte<=239 then -- 汉字
- temp_width = key_width[1]
- char_count = char_count + 1
- elseif curByte>=240 and curByte<=247 then -- 汉字
- temp_width = key_width[1]
- char_count = char_count + 1
- end
- width = width + temp_width
- end
- --print('Msh:TaskModel.lua[2871] data', char_count, (char_count - 8))
- return width - (char_count - 8) * word_offset
- end
- ----------推荐成就-end-----------
-
-
- -- 是否可以去做主线
- function TaskModel:CanSitchToMainLine( target_task_vo)
- local is_can = false
- local cur_main_task = target_task_vo or self:GetMainTask()
- if cur_main_task and RoleManager.Instance.mainRoleInfo.level >= cur_main_task.level then
- local cur_tips_task_id = cur_main_task.tipParam and cur_main_task.tipParam[3] or -1
- -- print('Ych:TaskModel.lua[3296] data', data)
- -- PrintTable(cur_main_task)
- for k,v in pairs(cur_main_task.taskTips) do
- if cur_tips_task_id == v.id then
- if v.type == TaskTipType.TYPE7 or
- v.type == TaskTipType.TYPE8 or
- v.type == TaskTipType.TYPE9 or
- v.type == TaskTipType.TYPE1 then
- is_can = true
- end
- break
- end
-
- end
- --print('Ych:TaskModel.lua[3308] data', is_can)
- end
- return is_can
- end
-
- -- 是否可以去做主线
- function TaskModel:JustDoMainLine( )
- local cur_main_task = self:GetMainTask()
- if cur_main_task and RoleManager.Instance.mainRoleInfo.level >= cur_main_task.level then
- self.now_task_id = false
- self:SetTaskAutoFlag(true)
- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK, true, true)
- end
- end
-
-
- -- 是否可以日常跑环
- function TaskModel:CanSitchToDailyCircleTask( )
- local task_data = self:GetTaskByType(TaskType.BOUNTY_LINE)
- if task_data then
- return true
- end
- end
-
- -- 是否可以日常跑环
- function TaskModel:JustDoDailyCircleTask( )
- local task_data = self:GetTaskByType(TaskType.BOUNTY_LINE)
- if task_data then
- self.now_task_id = task_data.id
- self:SetTaskAutoFlag(true)
- GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK, true)
- end
- end
-
- function TaskModel:ShowMainLineTips(is_force)
- local main_task = self:GetMainTask()
- if main_task then
- if (RoleManager.Instance.mainRoleInfo.level >= main_task.level) or is_force then
- self.tip_new_main_line = main_task.id
- GuideController.Instance:TriggerHelper(GuideModel.TASK_TRIGGER_TYPE, 9993150002)
- self:Fire(TaskEvent.SHOW_NEW_MAIN_LINE_TIP)
- end
- end
- end
-
- -- 第一次登陆游戏做任务
- function TaskModel:FirstLoginGameToDotask( )
- if self.is_first_login_game_to_do_task == true then
- if RoleManager.Instance.mainRoleInfo.level <= Config.ConfigTaskEffect.DailyCircleTaskCheckLevel then
- local is_open_daily,_,_,_,tips_content = self:GetDefalutTaskCurTaskAndDes()
- if not (is_open_daily and not self.cur_tips_daily_task_item) then
- self:ShowMainLineTips(true)
- end
- end
- self.is_first_login_game_to_do_task = false
- end
- end
-
- -- 获取第一条日常活跃任务的序号
- function TaskModel:GetFirstDailyTaskIndex( )
- local idx = 0
- local task_list = self:GetMainUITaskData(true)
- for i,v in ipairs(task_list) do
- if v.type == TaskType.DAILY_ACTIVITE then
- idx = i
- break
- end
- end
-
- return idx, #task_list
- end
-
- ----------七日目标-start---------
- -- 直接拉取
- function TaskModel:SetSevenTargetTaskVo( list )
- local level = RoleManager.Instance.mainRoleInfo.level
-
- local seven_day_target_model = SevenDayTargetModel:getInstance()
- -- 【少于105级】 或 【没开放七日目标】 都返回
-
- -- print('=======Msh:TaskModel.lua[3451] =======', seven_day_target_model:IsSevenDayTargetOpen())
- if level < 105 or not seven_day_target_model:IsSevenDayTargetOpen() then
- return
- end
- -- 只拿最新那天
- local login_day = seven_day_target_model:GetSevenDayTargetLoginDay()
- local cfg = seven_day_target_model:GetSevenDayTargetTaskCFGByDay(login_day)
- local server_data = seven_day_target_model:GetSevenDayTargetInfo(login_day) or {}
-
- local total_num = TableSize(cfg)
- local cur_num = 0
- for i,v in pairs(server_data) do
- local cfg = seven_day_target_model:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
- if cfg then
- if v.progress >= cfg.limit_times then
- cur_num = cur_num + 1
- end
- end
- end
- -- 当天技能领完 就不用显示了
- if total_num == cur_num and total_num > 0 then -- 进度满了 看看技能领没领
- local skill_data = seven_day_target_model:GetSevenDayTargetSkillInfo() or {}
- if skill_data[login_day] then -- 有技能数据就是领了
- return
- end
- end
-
- -- local color = cur_num == 0 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
- local taskVo = TaskVo.New()
- taskVo.type = TaskType.SEVEN_DAY_TARGET
- taskVo.tipContent = string.format("完成本日目标 (%s/%s)", HtmlColorTxt(cur_num, ColorUtil.GREEN_DARK), total_num)
- taskVo.taskName = string.format('七日目标 【第%s日】', login_day)
- taskVo.server_data = server_data
- taskVo.total_num = total_num
- taskVo.cur_num = cur_num
- -- taskVo.seven_cfg = cfg
- taskVo.tipType = TaskTipType.TYPE1004
- taskVo.order = 501 -- 归为第二排序任务
- taskVo.sortKey = 3 -- 排序刚好要在转职后面
- -- taskVo.task_position = 0
- -- taskVo.progressState = 1
- -- taskVo.achieve_id = v.type * 10000000000 + v.sub_type
- table.insert(list, taskVo)
- end
- ----------七日目标-end-----------
|