--- --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by zhangkai. --- DateTime: 2024/8/29 下午2:08 --- TaskHandler = {} local this = {} ---任务状态 TaskHandler.Status = { ---已接取 ACCEPT = 1, ---已完成 FINISH = 2, ---已提交 SUBMIT = 3, } ---任务记录 function this.GetNewTaskRecord() local TaskRecord = { ---任务id task_id = 0, ---任务目标id target_id = 0, ---任务目标类型 task_goal = 0, ---任务当前进度 goal_count = 0, ---任务目标数量 max_count = 0, ---任务状态 state = TaskHandler.Status.ACCEPT, } return TaskRecord end ---@alias TaskGoalHandler table 外置任务类型目标 TaskGoalHandler = { ---@see 通关副本次数 [TaskTargetType.FINISH_DUPLICATE] = ActivityTaskGoal.FlushFinishDupCount, ---@see 通关指定副本次数 [TaskTargetType.FINISH_GOAL_DUP] = ActivityTaskGoal.FlushFinishGoalDupCount, ---@see 合成次数 [TaskTargetType.SYNTHESIS] = EquipTaskGoal.FlushSynthesisCount, ---@see 回收次数 [TaskTargetType.RECOVERY] = EquipTaskGoal.FlushRecoveryCount, ---@see 指定部位强化到达指定等级 [TaskTargetType.PARTS_STRENGTHEN_LV] = EquipTaskGoal.FlushPartsStrengthenLv, ---@see 完成勇士任务 [TaskTargetType.FINISH_GOLD_TASK] = ActivityTaskGoal.FlushFinishGoldTaskCount, ---@see 在指定地图对怪造成伤害 [TaskTargetType.HURT_MAP_MONSTER] = MonsterTaskGoal.FlushHurtMapMonster, ---@see 首饰升级 [TaskTargetType.JEWELRY_LV_UP] = EquipTaskGoal.FlushJewelryLvUp, ---@see 通关秘境副本 [TaskTargetType.FINISH_SECRET_REALM_DUPLICATE] = ActivityTaskGoal.FlushSecretRealmFinishTimes, ---@see 开启三倍收益 [TaskTargetType.OPEN_TRIPLE_INCOME] = PlayerTaskGoal.FlushTripleIncome, ---@see 指定部位追加到达指定等级 [TaskTargetType.EQUIP_APPEND] = EquipTaskGoal.FlushPartsAppendLv, ---@see 击杀指定类型怪物 [TaskTargetType.KILL_TYPE_MONSTER] = MonsterTaskGoal.FlushKillTypeMonster, ---@see 交易行上架商品 [TaskTargetType.TRADE_LINE_UP_GOODS] = TradeTaskGoal.FlushTradeLineUpGoods, ---@see 商城购买商品 [TaskTargetType.MALL_BUY_GOODS] = TradeTaskGoal.FlushMallBuyGoods, ---@see 装备叠加 [TaskTargetType.EQUIP_SUPERPOSITION] = EquipTaskGoal.FlushEquipSuperposition, ---@see 卓越词条 [TaskTargetType.EXCELLENCE_ATTR] = EquipTaskGoal.FlushExcellenceAttr, ---@see 镶嵌萤石 [TaskTargetType.INLAID_GEMSTONES] = EquipTaskGoal.FlushInlaidGemstones, ---@see 装备卓越词条数量 [TaskTargetType.EQUIP_EXCELLENCE_ATTR_COUNT] = EquipTaskGoal.FlushExcellenceAttrCount, ---@see 加点 [TaskTargetType.DEPLOY_ATTR_POINT] = PlayerTaskGoal.FlushDeployAttrPoint, ---@see 重新获取一个指定道具 [TaskTargetType.RE_GET_ITEM] = EquipTaskGoal.FlushReGetItem, ---@see 从NPC商店购买指定道具 [TaskTargetType.NPC_MALL_BUY_GOODS] = TradeTaskGoal.FlushNpcMallBuyGoods, ---@see 回收获得指定道具 [TaskTargetType.RECOVERY_GET_APPOINT_ITEM] = EquipTaskGoal.FlushRecoveryGetAppointItem, ---@see 完成一次BOSS悬赏 [TaskTargetType.BOSS_BOUNTY] = ActivityTaskGoal.FlushBossRewardBounty, ---@see 激活连击技能 [TaskTargetType.ACTIVATE_COMBO_SKILL] = PlayerTaskGoal.FlushActivateComboSkill, ---@see 激活白银特权 [TaskTargetType.ACTIVATE_SILVER_PRIVILEGE] = PlayerTaskGoal.ActivateSilverPrivilege, ---@see 完成第X章首饰任务 [TaskTargetType.JEWELRY_TASK_CHAPTER] = ActivityTaskGoal.JewelryTaskChapter, ---@see 穿戴装备累计强化x次数 [TaskTargetType.EQUIP_STRENGTHEN_TIMES] = EquipTaskGoal.EquipStrengthenTimes, ---@see 击杀x次指定等级以上怪物 [TaskTargetType.KILL_LEVEL_MONSTER] = MonsterTaskGoal.KillLevelMonster, ---@see 使用果实 [TaskTargetType.USE_FRUIT_ITEM] = PlayerTaskGoal.UseFruitItem, ---@see 穿戴装备的总追加达到x级 [TaskTargetType.EQUIP_APPEND_TOTAL_LV] = EquipTaskGoal.EquipAppendTotalLv, ---@see 穿戴指定装备 [TaskTargetType.SPECIFIC_STAGE_EQUIP] = EquipTaskGoal.SpecificStageEquip, ---@see 尾刀击杀怪物 [TaskTargetType.LAST_KILL_MONSTER] = MonsterTaskGoal.LastKillMonster, ---@see 镶嵌卡牌 [TaskTargetType.INLAID_TRANSFORMATION_CARD] = EquipTaskGoal.InlaidTransformationCard, ---@see 完成勇气试炼X层 [TaskTargetType.FLUSH_BRAVE_TEST_LV] = ActivityTaskGoal.FlushBraveTestLv, ---@see 进入地图分线 [TaskTargetType.ENTER_MAP_LINE] = PlayerTaskGoal.EnterMapLine, ---@see 首刀击杀怪物 [TaskTargetType.FIRST_ATTACK_MONSTER] = MonsterTaskGoal.FirstAttackMonster, ---@see 合成卡牌 [TaskTargetType.SYNTHESIS_CARD] = EquipTaskGoal.FlushSynthesisCard, ---@see 装备指定数量圣杯 [TaskTargetType.TAKE_ON_GRAIL_COUNT] = EquipTaskGoal.FlushTakeOnGrailCount, ---@see 强化圣杯 达到强化到指定等级的圣杯数量 [TaskTargetType.STRENGTHEN_GRAIL] = EquipTaskGoal.FlushStrengthenGrail, } ---@description 触发任务刷新 ---@param actor table 玩家对象 ---@param taskTargetType number 任务目标类型 ---@param param any 自定义刷新参数 function TaskHandler.TriggerTaskGoal(actor, taskTargetType, param) local success, errorInfo = xpcall(this.TriggerTaskGoal, debug.traceback, actor, taskTargetType, param) if not success then gameDebug.assertPrint(success, "任务目标更新异常:", errorInfo, "参数", actor, taskTargetType, param) end end function this.TriggerTaskGoal(actor, taskTargetType, param) local ok = TaskGoal.IsTaskTargetType(taskTargetType) if not ok then return end ---触发内置任务系统系统刷新 if TaskGoal.isLuaGoalType(taskTargetType) then taskgoalflush(actor, taskTargetType, param) end -- 任意任务类型刷新触发 DailyActivity.taskGoalFlush(actor, taskTargetType, param) -- 刷新王者之路任务 KingRoad.FlushKingRoadTask(actor, taskTargetType, param) -- 翅膀任务刷新 Wings.FlushWingsTask(actor, taskTargetType, param) end ---构建任务记录 ---@param actor table 玩家对象 ---@param taskId number 任务id ---@param targetId number 任务目标配置id function TaskHandler.BuildTaskRecord(actor, taskId, targetId) local success, taskRecord = xpcall(this.BuildTaskRecord, debug.traceback, actor, taskId, targetId) if not success then gameDebug.assertPrint(success, "构建任务记录异常:", taskRecord, "参数", actor, taskId, targetId) return nil end return taskRecord end function this.BuildTaskRecord(actor, taskId, targetId) local targetList = ConfigDataManager.getTable("cfg_task_target", "id", targetId) if table.isNullOrEmpty(targetList) or #targetList < 1 then return nil end local targetConfig = targetList[1] local taskGoalType = tonumber(targetConfig["taskgoaltype"]) local ok = TaskGoal.IsTaskTargetType(taskGoalType) if not ok then return nil end local maxCount = tonumber(targetConfig["goalcount"]) if maxCount == nil then maxCount = 1 end local taskRecord = this.GetNewTaskRecord() taskRecord.task_id = taskId taskRecord.target_id = targetId taskRecord.task_goal = taskGoalType taskRecord.max_count = maxCount local count = TaskGoal.FlushTaskCount(actor, taskGoalType, targetId, 0, nil) if count > 0 then taskRecord.goal_count = math.min(count, maxCount) if count >= maxCount then taskRecord.state = TaskHandler.Status.FINISH end end return taskRecord end function TaskHandler.onTaskChange(actor, taskId, state) TaskHandler.saveTaskChange(actor, taskId, state) TaskHandler.sendTaskState(actor) end function TaskHandler.saveTaskChange(actor, taskId, state) local taskStates = getplaydef(actor, "T$taskStates") or {} taskStates[taskId] = state setplaydef(actor, "T$taskStates", taskStates) end function TaskHandler.sendTaskState(actor) local taskStates = getplaydef(actor, "T$taskStates") or {} sendluamsg(actor, LuaMessageIdToClient.RES_TASK_STATES_TO_FUNC_ON, taskStates) end