From 9de24634e39289fe54d235e6a77e2abbd1f685a9 Mon Sep 17 00:00:00 2001 From: Putoo <290555932@qq.com> Date: Fri, 10 Jul 2026 16:39:52 +0800 Subject: [PATCH] 121212 --- .../game/user/unit_user_task.cs | 3 + .../BusEvents/BusEventsEnum.cs | 2 + .../BusEvents/BusEventsSubscriber.cs | 20 +++ Service/Application.Domain/Enum/GameEnum.cs | 2 + .../Application.Domain/Enum/MonsterEnum.cs | 7 +- .../Interface/Monster/IGameMonsterService.cs | 2 + .../Interface/Task/IGameTaskService.cs | 4 + .../Service/Business/GameAutoJobService.cs | 12 ++ .../Service/Monster/GameMonsterService.cs | 20 +++ .../Services/Service/Task/GameTaskService.cs | 145 +++++++++++++++- .../Application.Domain/Tool/Base/GameBus.cs | 12 ++ .../Controllers/Login/LoginController.cs | 30 +++- .../Controllers/Map/MapController.cs | 5 +- .../Controllers/Map/TaskController.cs | 89 ++++++++++ .../Controllers/Pub/FightController.cs | 55 ++++-- Web/src/pages/fight/result.vue | 33 +++- Web/src/pages/map/index.vue | 4 +- Web/src/pages/map/npc/index.vue | 10 +- Web/src/pages/task/index.vue | 42 ++++- Web/src/pages/task/info.vue | 2 +- Web/src/pages/task/look.vue | 118 +++++++++++++ Web/src/services/map/TaskService.ts | 24 +++ 任务生成/create.zip | Bin 0 -> 30984 bytes 任务生成/create/goods.xls | Bin 0 -> 20992 bytes 任务生成/create/monster.xls | Bin 0 -> 21504 bytes 任务生成/create/npc.xls | Bin 0 -> 21504 bytes 任务生成/create/store.xls | Bin 0 -> 20992 bytes 任务生成/create/task.xls | Bin 0 -> 21504 bytes 任务生成/requirement.md | 158 ++++++++++++++++++ 任务生成/resource.zip | Bin 0 -> 11348 bytes 任务生成/resource/map.xls | Bin 0 -> 43008 bytes 31 files changed, 760 insertions(+), 39 deletions(-) create mode 100644 Web/src/pages/task/look.vue create mode 100644 任务生成/create.zip create mode 100644 任务生成/create/goods.xls create mode 100644 任务生成/create/monster.xls create mode 100644 任务生成/create/npc.xls create mode 100644 任务生成/create/store.xls create mode 100644 任务生成/create/task.xls create mode 100644 任务生成/requirement.md create mode 100644 任务生成/resource.zip create mode 100644 任务生成/resource/map.xls diff --git a/Service/Application.Domain.Entity/game/user/unit_user_task.cs b/Service/Application.Domain.Entity/game/user/unit_user_task.cs index 651a21b..599819d 100644 --- a/Service/Application.Domain.Entity/game/user/unit_user_task.cs +++ b/Service/Application.Domain.Entity/game/user/unit_user_task.cs @@ -29,6 +29,9 @@ namespace Application.Domain.Entity /// [SugarColumn(IsNullable = true)] public int? itemId { get; set; } + + [SugarColumn(IsNullable = true)] + public int? lev { get; set; } /// /// name diff --git a/Service/Application.Domain/BusEvents/BusEventsEnum.cs b/Service/Application.Domain/BusEvents/BusEventsEnum.cs index 1f7fccf..126ee20 100644 --- a/Service/Application.Domain/BusEvents/BusEventsEnum.cs +++ b/Service/Application.Domain/BusEvents/BusEventsEnum.cs @@ -18,6 +18,8 @@ namespace Application.Domain HandleCreateMonster,//处理创建的怪物 HandleFightData,//处理战斗日志数据 HandleExchangeData,//处理兑换数据 + HandleTaskLog,//处理任务日志 + HandelTaskUser,//处理角色任务 } } diff --git a/Service/Application.Domain/BusEvents/BusEventsSubscriber.cs b/Service/Application.Domain/BusEvents/BusEventsSubscriber.cs index 44a064b..b99ef8d 100644 --- a/Service/Application.Domain/BusEvents/BusEventsSubscriber.cs +++ b/Service/Application.Domain/BusEvents/BusEventsSubscriber.cs @@ -85,5 +85,25 @@ var exchangeService = App.GetService(); await exchangeService.HandleExchangeLogData(); } + /// + /// 处理任务日志 + /// + /// + [EventSubscribe(BusEventsEnum.BusEventsName.HandleTaskLog, NumRetries = 0,RetryTimeout = 999999999)] + public async Task HandleTaskLog(EventHandlerExecutingContext context) + { + var taskService = App.GetService(); + await taskService.HandleUserTaskLog(); + } + /// + /// 处理角色任务 + /// + /// + [EventSubscribe(BusEventsEnum.BusEventsName.HandelTaskUser, NumRetries = 0,RetryTimeout = 999999999)] + public async Task HandelTaskUser(EventHandlerExecutingContext context) + { + var taskService = App.GetService(); + await taskService.HandleUserTask(); + } } } \ No newline at end of file diff --git a/Service/Application.Domain/Enum/GameEnum.cs b/Service/Application.Domain/Enum/GameEnum.cs index be6179e..054172b 100644 --- a/Service/Application.Domain/Enum/GameEnum.cs +++ b/Service/Application.Domain/Enum/GameEnum.cs @@ -15,6 +15,8 @@ public static class GameEnum UpdateCreateMonster,//更新创建得怪物 UpdateFightData,//更新战斗信息 UpdateExchangeData,//更新兑换的记录 + UpdateTaskLog,//更新任务日志 + UpdateTaskUser,//更新角色任务 } public enum PropCode//游戏资源编码 { diff --git a/Service/Application.Domain/Enum/MonsterEnum.cs b/Service/Application.Domain/Enum/MonsterEnum.cs index cd501cf..abec428 100644 --- a/Service/Application.Domain/Enum/MonsterEnum.cs +++ b/Service/Application.Domain/Enum/MonsterEnum.cs @@ -7,5 +7,10 @@ public static class MonsterEnum Default, } - + public enum MonsterCode + { + Default, + Dup, + Task + } } \ No newline at end of file diff --git a/Service/Application.Domain/Services/Interface/Monster/IGameMonsterService.cs b/Service/Application.Domain/Services/Interface/Monster/IGameMonsterService.cs index 3b8db25..dcdd08b 100644 --- a/Service/Application.Domain/Services/Interface/Monster/IGameMonsterService.cs +++ b/Service/Application.Domain/Services/Interface/Monster/IGameMonsterService.cs @@ -16,6 +16,8 @@ public interface IGameMonsterService Task GetCreateMonsterInfo(string umId); Task RemoveCreateMonster(string umId); Task RemoveCreateMonster(unit_user_monster data); + Task ClearCreateMonster(string userId,string code, string par, string monsterId, string mapId); + Task GetUserMonsterCount(string userId, string monsterId, int state); Task HandleCreateMonster(); Task> GetMapMonster(string userId, string mapId, string teamId); diff --git a/Service/Application.Domain/Services/Interface/Task/IGameTaskService.cs b/Service/Application.Domain/Services/Interface/Task/IGameTaskService.cs index 2749dcc..8ad806f 100644 --- a/Service/Application.Domain/Services/Interface/Task/IGameTaskService.cs +++ b/Service/Application.Domain/Services/Interface/Task/IGameTaskService.cs @@ -12,10 +12,14 @@ public interface IGameTaskService #region 个人任务 + Task> GetUserTaskData(string userId); Task GetUserTaskInfo(string userId, int taskId); Task UpdateUserTaskInfo(string userId, int itemId); Task GetUserTaskCount(string userId, int taskId); + Task ResetNextTask(string userId, int nextId); Task GetUserTaskModel(string userId, game_task_item task); + Task HandleUserTaskLog(); + Task HandleUserTask(); #endregion } \ No newline at end of file diff --git a/Service/Application.Domain/Services/Service/Business/GameAutoJobService.cs b/Service/Application.Domain/Services/Service/Business/GameAutoJobService.cs index 4a75a42..3cfde59 100644 --- a/Service/Application.Domain/Services/Service/Business/GameAutoJobService.cs +++ b/Service/Application.Domain/Services/Service/Business/GameAutoJobService.cs @@ -91,5 +91,17 @@ public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis, ITi await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleExchangeData, data)); } + else if (data.code == nameof(GameEnum.JobCode.UpdateTaskLog)) //更新任务日志 + { + var _eventPublisher = App.GetService(); + await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleTaskLog, + data)); + } + else if (data.code == nameof(GameEnum.JobCode.UpdateTaskUser)) //更新角色任务 + { + var _eventPublisher = App.GetService(); + await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandelTaskUser, + data)); + } } } \ No newline at end of file diff --git a/Service/Application.Domain/Services/Service/Monster/GameMonsterService.cs b/Service/Application.Domain/Services/Service/Monster/GameMonsterService.cs index fc7c8f3..aba2a27 100644 --- a/Service/Application.Domain/Services/Service/Monster/GameMonsterService.cs +++ b/Service/Application.Domain/Services/Service/Monster/GameMonsterService.cs @@ -152,6 +152,26 @@ public class GameMonsterService(ISqlSugarClient DbClient, IRedisCache redis) : I return result; } + public async Task ClearCreateMonster(string userId, string code, string par, string monsterId, string mapId) + { + var db = DbClient.AsTenant().GetConnectionWithAttr(); + bool result = await db.Deleteable() + .Where(it => it.userId == userId && it.code == code && it.par == par && it.monsterId == monsterId) + .ExecuteCommandAsync() > 0; + if (result) + { + await ClearCreateMonster(mapId); + } + } + + public async Task GetUserMonsterCount(string userId, string monsterId, int state) + { + var db = DbClient.AsTenant().GetConnectionWithAttr(); + return await db.Queryable() + .Where(it => it.userId == userId && it.monsterId == monsterId && it.state == state).CountAsync(); + } + + public async Task HandleCreateMonster() { var endTime = TimeExtend.GetTimeStampSeconds; diff --git a/Service/Application.Domain/Services/Service/Task/GameTaskService.cs b/Service/Application.Domain/Services/Service/Task/GameTaskService.cs index 08c3d94..c1924a1 100644 --- a/Service/Application.Domain/Services/Service/Task/GameTaskService.cs +++ b/Service/Application.Domain/Services/Service/Task/GameTaskService.cs @@ -64,6 +64,20 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam #region 个人任务 + public async Task> GetUserTaskData(string userId) + { + string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskData"); + if (await redis.HExistsHashAsync(key, userId)) + { + return await redis.GetHashAsync>(key, userId); + } + + var db = DbClient.AsTenant().GetConnectionWithAttr(); + var data = await db.Queryable().Where(it => it.userId == userId).ToListAsync(); + await redis.AddHashAsync(key, userId, data); + return data; + } + public async Task GetUserTaskInfo(string userId, int taskId) { string utId = $"{userId}_{taskId}"; @@ -80,6 +94,17 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam return data; } + private async Task ClearUserTaskCache(string userId, string utId = "") + { + string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskData"); + await redis.DelHashAsync(key, userId); + if (!string.IsNullOrEmpty(utId)) + { + key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskInfo"); + await redis.DelHashAsync(key, utId); + } + } + public async Task UpdateUserTaskInfo(string userId, int itemId) { bool result = false; @@ -93,8 +118,7 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam result = await db.Deleteable().Where(it => it.utId == utId).ExecuteCommandAsync() > 0; if (result) { - string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskInfo"); - await redis.DelHashAsync(key, utId); + await ClearUserTaskCache(userId, utId); } } else @@ -107,6 +131,7 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam onTask.userId = userId; onTask.taskId = taskInfo.taskId; onTask.itemId = taskInfo.tiId; + onTask.lev = taskInfo.lev; onTask.name = taskInfo.name; onTask.code = taskInfo.code; onTask.endTime = await GetItemEndTime((int)taskInfo.taskId, (int)taskInfo.time); @@ -117,6 +142,7 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam { onTask.itemId = taskInfo.tiId; onTask.name = taskInfo.name; + onTask.lev = taskInfo.lev; onTask.code = taskInfo.code; onTask.endTime = await GetItemEndTime((int)taskInfo.taskId, (int)taskInfo.time); var db = DbClient.AsTenant().GetConnectionWithAttr(); @@ -127,17 +153,36 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam { string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskInfo"); await redis.AddHashAsync(key, utId, onTask); + await ClearUserTaskCache(userId); } } } if (result) { + //清理遗留数据,如怪物 + if (taskInfo.needData.Count > 0) + { + var monsterService = App.GetService(); + foreach (var item in taskInfo.needData) + { + if (item.code == nameof(GameEnum.PropCode.Monster)) + { + if (!string.IsNullOrEmpty(item.mapId)) + { + await monsterService.ClearCreateMonster(userId, nameof(MonsterEnum.MonsterCode.Task), + taskInfo.tiId.ToString(), item.parameter, item.mapId); + } + } + } + } + if (taskInfo.itemType == 0) { await AddUserTaskLog(userId, (int)taskInfo.taskId); } - else if (taskInfo.itemType == 1) + + if (taskInfo.itemType != 2) { //初始化下一环任务 await ResetNextTask(userId, taskInfo.tiId + 1); @@ -169,7 +214,7 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam long endTime = await GetEndTime(taskId); unit_user_task_log log = new unit_user_task_log() { - utId = utId, + utId = StringAssist.NewGuid, userId = userId, taskId = taskId, addTime = DateTime.Now, @@ -184,9 +229,35 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam } } - private async Task ResetNextTask(string userId, int nextId) + public async Task ResetNextTask(string userId, int nextId) { - await Task.CompletedTask; + var taskInfo = await GetTaskItemInfo(nextId); + if (taskInfo != null) + { + if (taskInfo.needData.Count > 0) + { + var monsterService = App.GetService(); + var monster = taskInfo.needData.FindAll(it => it.code == nameof(GameEnum.PropCode.Monster)); + if (monster.Count > 0) + { + foreach (var item in monster) + { + if (!string.IsNullOrEmpty(item.mapId) && !string.IsNullOrEmpty(item.parameter)) + { + int opCount = 0; + int count = await monsterService.GetUserMonsterCount(userId, item.parameter, 0); + if (count < item.count) + { + opCount = (int)item.count - count; + await monsterService.CreateMonsterToMap(userId, item.mapId, item.areaCode, + item.parameter, + opCount, (int)taskInfo.time, nextId.ToString()); + } + } + } + } + } + } } public async Task GetUserTaskModel(string userId, game_task_item task) @@ -268,6 +339,68 @@ public class GameTaskService(ISqlSugarClient DbClient, IRedisCache redis) : IGam return model; } + + public async Task HandleUserTaskLog() + { + //处理任务日志 + var db = DbClient.AsTenant().GetConnectionWithAttr(); + List uts = new List(); + long endTime = TimeExtend.GetTimeStampSeconds; + var data = await db.Queryable().Where(it => it.endTime < endTime).ToListAsync(); + foreach (var item in data) + { + string utId = $"{item.userId}_{item.taskId}"; + if (uts.Any(it => it == utId)) + { + continue; + } + + uts.Add(utId); + } + + if (uts.Count > 0) + { + bool result = + await db.Deleteable().Where(it => it.endTime < endTime).ExecuteCommandAsync() > 0; + if (result) + { + string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskCount"); + await redis.DelHashAsync(key, uts.ToArray()); + } + } + } + + public async Task HandleUserTask() + { + var db = DbClient.AsTenant().GetConnectionWithAttr(); + List users = new List(); + List uts = new List(); + long endTime = TimeExtend.GetTimeStampSeconds; + var data = await db.Queryable().Where(it => it.endTime < endTime).ToListAsync(); + foreach (var item in data) + { + if (users.Any(it => it == item.userId) == false) + { + users.Add(item.userId); + } + + uts.Add($"{item.userId}_{item.taskId}"); + } + + if (users.Count > 0) + { + bool result = + await db.Deleteable().Where(it => it.endTime < endTime).ExecuteCommandAsync() > 0; + if (result) + { + string key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskData"); + await redis.DelHashAsync(key, users.ToArray()); + key = string.Format(UserCache.BaseCacheKeys, "TaskCache", "UserTaskInfo"); + await redis.DelHashAsync(key, uts.ToArray()); + } + } + } + #endregion #region 辅助 diff --git a/Service/Application.Domain/Tool/Base/GameBus.cs b/Service/Application.Domain/Tool/Base/GameBus.cs index c6f0e21..bfc5746 100644 --- a/Service/Application.Domain/Tool/Base/GameBus.cs +++ b/Service/Application.Domain/Tool/Base/GameBus.cs @@ -220,6 +220,18 @@ public static class GameBus isok = false; } } + else if (item.code == nameof(GameEnum.PropCode.Monster)) + { + var monsterService = App.GetService(); + var onCount = await monsterService.GetUserMonsterCount(userId,item.parameter,1); + item.count = item.count; + item.onCount = onCount; + if (onCount < item.count) + { + item.isAsk = 0; + isok = false; + } + } result.result = isok; result.isDeal = isDeal; diff --git a/Service/Application.Web/Controllers/Login/LoginController.cs b/Service/Application.Web/Controllers/Login/LoginController.cs index 6b62704..69cf40a 100644 --- a/Service/Application.Web/Controllers/Login/LoginController.cs +++ b/Service/Application.Web/Controllers/Login/LoginController.cs @@ -28,17 +28,37 @@ namespace Application.Web.Controllers.Login _attrService = attrService; } + [HttpGet] + public string GetExp() + { + string html = string.Empty; + decimal sum = 0M; + decimal addsum = 0; + for (int i = 1; i < 121; i++) + { + Decimal exp = GameTool.GetUserUpExp(i); + if (i > 160 && i < 221) + { + addsum += exp; + } + sum += exp; + html += string.Format("当前等级:{0},升级经验:{1};总经验:{2}\n\r", i, exp, sum); + } + html += String.Format("总经验:{0}", sum); + html += String.Format("升级经验:{0}", addsum); + return html; + } /// /// 登录接口 /// /// /// - [HttpPost] - public async Task Login([FromBody] LoginParms parms) - { - return PoAction.Ok(parms.code); - } + // [HttpPost] + // public async Task Login([FromBody] LoginParms parms) + // { + // return PoAction.Ok(parms.code); + // } /// /// 探玩自动登录 diff --git a/Service/Application.Web/Controllers/Map/MapController.cs b/Service/Application.Web/Controllers/Map/MapController.cs index c310e03..87bae68 100644 --- a/Service/Application.Web/Controllers/Map/MapController.cs +++ b/Service/Application.Web/Controllers/Map/MapController.cs @@ -152,7 +152,7 @@ public class MapController : ControllerBase string fightId = userFight.Count > 0 ? userFight[0] : ""; var mapGoods = await _fightService.GetMapFightGoods(mapInfo.mapId); mapGoods = mapGoods.FindAll(it => it.userId == "0" || it.userId == userId).Take(3).ToList(); - + var taskData = await _taskService.GetUserTaskData(userId); int isHook = 0; //挂机处理 var onHook = await _hookService.GetUserOnHook(userId); isHook = (int)onHook.status; @@ -173,7 +173,8 @@ public class MapController : ControllerBase monster = monsterData, fightId, gameTips, - isHook + isHook, + taskCount = taskData.Count }; diff --git a/Service/Application.Web/Controllers/Map/TaskController.cs b/Service/Application.Web/Controllers/Map/TaskController.cs index c851694..354e455 100644 --- a/Service/Application.Web/Controllers/Map/TaskController.cs +++ b/Service/Application.Web/Controllers/Map/TaskController.cs @@ -103,6 +103,94 @@ public class TaskController : ControllerBase { npc = npcInfo, data = data, talkMsg, taskState, btnTips = taskInfo.btnTips, toGoods, retGoods }); } + /// + /// 获取个人任务 + /// + /// + [HttpGet] + public async Task GetUserTask() + { + string userId = StateHelper.userId; + var data = await _taskService.GetUserTaskData(userId); + return PoAction.Ok(data); + } + + /// + /// 重置任务 + /// + /// + /// + [HttpGet] + public async Task RestTask(int task) + { + string userId = StateHelper.userId; + var onTaskInfo = await _taskService.GetUserTaskInfo(userId,task); + if (onTaskInfo == null) + { + return PoAction.Message("暂无任务!"); + } + + int nextId = (int)onTaskInfo.itemId + 1; + var nextTask = await _taskService.GetTaskItemInfo(nextId); + if (nextTask == null) + { + return PoAction.Message("当前任务已结束,无需重置!"); + } + + var result = await _taskService.GetUserTaskModel(userId, nextTask); + if (result.result.result) + { + return PoAction.Message("任务可完成,无需重置!"); + } + + await _taskService.ResetNextTask(userId, nextId); + return PoAction.Ok(true); + } + + /// + /// 获取个人任务详情 + /// + /// + /// + [HttpGet] + public async Task GetUserTaskInfo(int taskId) + { + string userId = StateHelper.userId; + + var taskInfo = await _taskService.GetTaskItemInfo(taskId); + if (taskInfo == null) + { + return PoAction.Message("任务不存在!"); + } + + string talkMsg = taskInfo.taskTips; + int taskState = 1; + var userOnTask = await _taskService.GetUserTaskInfo(userId, (int)taskInfo.taskId); + if (userOnTask != null) + { + if (userOnTask.itemId == taskId) + { + var nextInfo = await _taskService.GetTaskItemInfo(taskId + 1); + if (taskInfo == null) + { + taskState = 100; + } + else + { + talkMsg = taskInfo.nextTips; + taskInfo = nextInfo; + } + } + } + + var data = await _taskService.GetUserTaskModel(userId, taskInfo); + + int toGoods = await _goodsService.GetUserGoodsCount(userId, GameConfig.GameGetTaskGoods); + int retGoods = await _goodsService.GetUserGoodsCount(userId, GameConfig.GameRetTaskGoods); + return PoAction.Ok(new + { data = data, talkMsg, taskState, toGoods, retGoods }); + } + /// /// 完成任务 /// @@ -175,6 +263,7 @@ public class TaskController : ControllerBase } message = message.TrimEnd(','); + await GameBus.UpdateBag(userId, 1, award, "完成任务");//发放奖励 } return PoAction.Ok(true, message); diff --git a/Service/Application.Web/Controllers/Pub/FightController.cs b/Service/Application.Web/Controllers/Pub/FightController.cs index 19f1f7f..febf5b9 100644 --- a/Service/Application.Web/Controllers/Pub/FightController.cs +++ b/Service/Application.Web/Controllers/Pub/FightController.cs @@ -20,11 +20,12 @@ public class FightController : ControllerBase private readonly IUnitUserService _userService; private readonly IOnHookService _hookService; private readonly IUnitUserRelationService _relationService; + private readonly IGameTaskService _taskService; public FightController(IGameFightService fightService, IGameMonsterService monsterService, IUnitUserAttrService attrService, IGameMapService mapService, IUnitUserAccService accService, IGameGoodsService goodsService, IUnitUserService userService, IOnHookService hookService, - IUnitUserRelationService relationService) + IUnitUserRelationService relationService, IGameTaskService taskService) { _fightService = fightService; _monsterService = monsterService; @@ -35,6 +36,7 @@ public class FightController : ControllerBase _userService = userService; _hookService = hookService; _relationService = relationService; + _taskService = taskService; } /// @@ -162,16 +164,18 @@ public class FightController : ControllerBase return PoAction.Message("该地图不允许跨服战斗!"); } } + string fightId = StringAssist.NewGuid; string areaCode = nameof(GameEnum.AreaCode.Own); string code = nameof(GameEnum.FightCode.PVP); - string keyId = StringAssist.GetSortKey(userId,otUser.userId); + string keyId = StringAssist.GetSortKey(userId, otUser.userId); long exp = 0; long copper = 0; long petExp = 0; string award = string.Empty; string pars = ""; - bool result = await _fightService.AddFight(fightId, areaCode, keyId, otUser.userId, code, onMapInfo.code, onMapInfo.mapId, userId, exp, + bool result = await _fightService.AddFight(fightId, areaCode, keyId, otUser.userId, code, onMapInfo.code, + onMapInfo.mapId, userId, exp, copper, petExp, award, pars); if (result) { @@ -229,17 +233,6 @@ public class FightController : ControllerBase #endregion //更新攻击 - if (fightResult.result == 0) - { - myHarm = fightResult.myHarm; - myHarm += await _fightService.GetUserFightHarm(userId); - otHarm = fightResult.otHarm; - await _attrService.UpdateUserBlood(userId, 1, fightResult.myHarm); - await _attrService.AddUserLoadState(userId, fightResult.myStateData); - await _fightService.HandelFightEnd(userId, fightResult.myRemData); - } - - var myAttr = await _attrService.GetUserAttrModel(userId, fight.scene); UserAttrModel otAttr = new UserAttrModel(); if (fight.code == nameof(GameEnum.FightCode.PVE)) { @@ -264,6 +257,20 @@ public class FightController : ControllerBase otAttr = await _attrService.GetUserAttrModel(fight.mainId, fight.scene); } + if (fightResult.result == 0) + { + if (otAttr.blood >0) + { + myHarm = fightResult.myHarm; + myHarm += await _fightService.GetUserFightHarm(userId); + otHarm = fightResult.otHarm; + await _attrService.UpdateUserBlood(userId, 1, fightResult.myHarm); + await _attrService.AddUserLoadState(userId, fightResult.myStateData); + await _fightService.HandelFightEnd(userId, fightResult.myRemData); + } + } + + var myAttr = await _attrService.GetUserAttrModel(userId, fight.scene); //结束战斗都此处直接返回 if (otAttr.blood < 1 || myAttr.blood < 1) @@ -545,10 +552,26 @@ public class FightController : ControllerBase } } + string figArea = nameof(MonsterEnum.MonsterCode.Default); var myAttr = await _attrService.GetUserAttrModel(userId, fight.scene); + var parsData = JsonConvert.DeserializeObject(fight.pars); + object figResult = new object(); + if (Convert.ToString(parsData.type) == "Create") + { + if (Convert.ToString(parsData.code) == nameof(MonsterEnum.MonsterCode.Task)) + { + int itemId = Convert.ToInt32(parsData.par); + var taskInfo = await _taskService.GetTaskItemInfo(itemId); + if (taskInfo != null) + { + figArea = nameof(MonsterEnum.MonsterCode.Task); + figResult = await _taskService.GetUserTaskModel(userId, taskInfo); + } + } + } - - return PoAction.Ok(new { isWin, otName, blood = myAttr.blood, upBlood = myAttr.upBlood, fight, isCopy }); + return PoAction.Ok(new + { isWin, otName, blood = myAttr.blood, upBlood = myAttr.upBlood, fight, isCopy, figArea, figResult }); } #region 挂机相关 diff --git a/Web/src/pages/fight/result.vue b/Web/src/pages/fight/result.vue index 59d036f..86eb63e 100644 --- a/Web/src/pages/fight/result.vue +++ b/Web/src/pages/fight/result.vue @@ -27,6 +27,15 @@
+
+
+ 任务要求:
+ +
+
+ ➢我要传送 +
+
\ No newline at end of file +const retTask = async (btnData: any) => { + MessageExtend.LoadingToast("传送中..."); + let result = await TaskService.ReturnTask(Number(figAreaData.value.itemId)); + MessageExtend.LoadingClose(); + if (result.code == 0) { + PageExtend.RedirectTo("/map"); + } + else { + MessageExtend.Notify(result.msg, "danger"); + } +} + diff --git a/Web/src/pages/map/index.vue b/Web/src/pages/map/index.vue index ba94e1a..54ffce6 100644 --- a/Web/src/pages/map/index.vue +++ b/Web/src/pages/map/index.vue @@ -9,7 +9,7 @@
{{ cityInfo.cityName }}·{{ mapInfo.mapName }}({{ mapInfo.x }},{{ mapInfo.y }}) 刷新 - 任务 + 任务{{ taskCount > 0 ? "(" + taskCount + ")" : "" }} 消息{{ messageCount > 0 ? "(" + messageCount + ")" : "" }}
@@ -146,6 +146,7 @@ const broadcast = ref>([]); const gameTips = ref(''); const isHook = ref(0); const mapGoods = ref>([]); +const taskCount = ref(0); // 城内地图显示 const showCity = ref(false); @@ -181,6 +182,7 @@ const BindData = async (map: string): Promise => { gameTips.value = result.data.gameTips; mapGoods.value = result.data.mapGoods; isHook.value = result.data.isHook; + taskCount.value = result.data.taskCount; // console.log(result) } else if (result.code == 103) { diff --git a/Web/src/pages/map/npc/index.vue b/Web/src/pages/map/npc/index.vue index aa0c0f4..063bfe2 100644 --- a/Web/src/pages/map/npc/index.vue +++ b/Web/src/pages/map/npc/index.vue @@ -16,11 +16,16 @@
当前任务:
- - + + [{{ item.code }}]{{ item.name }}
+
+
+ ◈{{ item.name }} +
+
\ No newline at end of file diff --git a/Web/src/pages/task/info.vue b/Web/src/pages/task/info.vue index 1af2992..dd94ebe 100644 --- a/Web/src/pages/task/info.vue +++ b/Web/src/pages/task/info.vue @@ -3,7 +3,7 @@ {{ npcData.npcName }}:{{ talkMsg }}
- 等待开放下一环任务! + 恭喜,任务已全部完成!
diff --git a/Web/src/pages/task/look.vue b/Web/src/pages/task/look.vue new file mode 100644 index 0000000..bc00d3d --- /dev/null +++ b/Web/src/pages/task/look.vue @@ -0,0 +1,118 @@ + + \ No newline at end of file diff --git a/Web/src/services/map/TaskService.ts b/Web/src/services/map/TaskService.ts index 38c82ac..7d34b1c 100644 --- a/Web/src/services/map/TaskService.ts +++ b/Web/src/services/map/TaskService.ts @@ -7,6 +7,30 @@ export class TaskService { return await ApiService.Request("get", "/Map/Task/GetTaskByNpc", { npcId, taskId }); } + /** + * 获取个人任务 + * GET /Map/Task/GetUserTask + */ + static async GetUserTask() { + return await ApiService.Request("get", "/Map/Task/GetUserTask"); + } + + /** + * 重置任务 + * GET /Map/Task/RestTask + */ + static async RestTask(task: number) { + return await ApiService.Request("get", "/Map/Task/RestTask", { task }); + } + + /** + * 获取个人任务详情 + * GET /Map/Task/GetUserTaskInfo + */ + static async GetUserTaskInfo(taskId: number) { + return await ApiService.Request("get", "/Map/Task/GetUserTaskInfo", { taskId }); + } + /** * 完成任务 * GET /Map/Task/OverTask diff --git a/任务生成/create.zip b/任务生成/create.zip new file mode 100644 index 0000000000000000000000000000000000000000..b71503276f82fb0f2ed052e2628e2ae80c639897 GIT binary patch literal 30984 zcmbT+V~}J~yRhjl+jdo#ZQJUyZQHhO+qP}H%eL+6;#Bu}&pGkU#6(QYugvwt${lOx zkIalaFIh<-VB{Y^et`dQH$T%Xwh}e+LHl0H|M&s_{a|2kq~~ZvYhq(#=s@FY>2RqD zrivtvoE^v~0M|t>6#9V5;jbt+r@${agM@$rj|?n_00mZpkBSVkZnq*#WpdpW0YXLQ zEK{2`URD~SI@Yzx#F7CVZ?T=Ewsmzu`PKQy#JC|NR|vvf?jLf!drmkRJUAB|03l@Et=z!#5# zNV1TY1GZNKddP^j((*T+@wq%ApwZMlUrg+4BTM%l-dah0fgm-Ju;$8hF~_p8kW`-> zx~5o{Y}4~Vv8IWjZt@$kwD!W;wRNBGi2lcPk^YCa(BN0UHt%>O7gqzZPoM?Nr3?oI0|=}f!t$(4)qcbWUc_PLLkm-N zXK*hFS?7Y0`J({EANnn4@(Cs5Tf#-b2szj4MTuL8C<8I%k^1?N)_KEstQT*IJs~k; zgJZSb#*G5l-3%MCt_Oo^Sd4=#bpzxJ5wiIGyL^Ccf8-$<3j>EhF zYncCqP9>2(OEE?P4HuBChSF6H#&cC4<#lgyO;|x*>53$gdup9 z7|70@f47e#ib_8@w6VBrK<0-suX{p*&cSVWDv#J6&ys6^nq9%d5cDaJJI&G4OOhNi zgE;VfKtUL%6`P2Wf2*$Brxc%%As0u=GDMVn6DBu`KVBH`4ln?I$LD1e0@1hsl zMm8uY5Q-ZJUJ2MtMb{h-wNE%^kOya}hw4Wear`RhUjcCSDtEF5;Go59GKO4VLC~s? z+J~;HZ(vJxdpr91Awc+nG-jX+Y=B=6)n8d#dlY0uSQvyMm^w-$78ymnM7>Iz%*Fl- zpMJ96p{O9bwwp{XARK*If1)>0l3y(V*m@~-eS*M{mC@FNU1+uzW{J+JTfye8-W&|( z?+pUf2T9Tw&C3?~zrXkeNTw9a>`O6P=%ZJ0r}zzaxx(Y@kjOy2y)2+`^a)7g8?v#| zvpH0w{uGVPyQDXTYs;nnu~q;x3ya>EqB%?D`(%!?_Jcj1-6^5h3=FZvy8j~6(BX`P zfKxIpGdwrTPWsTlxu4Ans1a(qOmo&Ua$Y$PrZ-@)tOHn@GoH-}&3Ghks;ndMqSDBo z!rys-Jqcckdn*r9ajumN4MgLts7A{Re1|pLqj_ncI_?R-|d$Gzsai9pi3GsImTI4(n-`j5H zILKwV-5NzBz#XZ>8L^)NY?uPAo^zJb_kw_v_3!C{Y`;(MJo0^dNBqC1$3-ux;)~Hm z_Ycj74r&^TJjRT$izpR(P|PpeZF=8=^H*0_PlYBaFd3hGNRNgF

&ztx`fekz@IXovB1ZyLMeSM3UD!dyIt3QBdp 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 OVF)m=D$wa*VE+%eu_l86 literal 0 HcmV?d00001 diff --git a/任务生成/create/goods.xls b/任务生成/create/goods.xls new file mode 100644 index 0000000000000000000000000000000000000000..42befb5b3503f0631c37639f5bde9d65379fbdb4 GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/任务生成/create/npc.xls b/任务生成/create/npc.xls new file mode 100644 index 0000000000000000000000000000000000000000..358c6e85cf0d07d2cd393451619bd3cfe4dd9ab7 GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/任务生成/requirement.md b/任务生成/requirement.md new file mode 100644 index 0000000..23be56a --- /dev/null +++ b/任务生成/requirement.md @@ -0,0 +1,158 @@ +# 生成任务说明 +你需要进行游戏任务的生成,游戏是一个以大航海时代为背景的wap游戏,按照提示的任务故事,进行生成任务,生成标准按照本文档。 + +## 任务设计方案 +本任务设计模式采用只完成模式,玩家没有接任务状态,当完成任务时自动记录当前完成的任务ID,下一环任务ID为当前完成任务的ID + 1,默认相当于自动接取下一环任务,所以在设计任务时,注意NPC的串联,以及相关下一环任务描述的合理性。 + +## 数据文件说明 +在当前目录下,共有4个文件夹,他们的作用分别是: + +1. resource 文件夹:包含游戏的场景等数据,用于生成必要数据的填充使用。 +2. create 文件夹: 生成数据的数据文件模板。 +3. resutlt 文件夹: 生成的数据excel 放在本文件夹。 +4. temp 文件夹:生成的脚本、记录等AI辅助文件全部放在该文件夹下 + +## 数据结构说明 + +以下针对数据结构进行说明,生成任务时要参考数据结构。 + +### resource 文件夹数据结构说明 +- map.xls : 这是地图资源文件,包含当前任务可用的所有地图点,具体字段意思如下: +地图ID:地图主键ID,关联相关数据时使用。 +地图名称:地图点的名称。 +城市名称:地图点所在城市的名称。 + + + +### create 文件夹数据结构说明 +- task.xls : 这是生成任务模板,具体每个字段意思如下: +任务ID:数字ID,生成时自动生成,从1001开始,每环任务+1。 +任务名称:该任务的简要名称。 +NPCID:根据NPC规则,对应任务绑定的NPCID。 +任务提示:指NPC说出的内容,即任务串联起来的故事。 +我的回答:指玩家应该回答的内容。 +下一环任务摘要:指玩家完成该任务后,下一环任务的摘要,摘要需要包含城市和地图名称,例如"去威尼斯广场和某某NPC兑换";如果下一环任务要求中是击杀怪物获得的道具作为任务要求的,要在任务中说明去哪里击杀怪物收集哪些物品交给哪个NPC,同时要内容丰富的介绍下一环完成条件(如果有条件)。 +任务要求:任务可以需要任务物品/或者击杀怪物,当本环任务没有任务要求,仅对话任务时,该字段内容为:“[]”,如果有要求时该字段为数组json结构,结构模型如下: +[ + { + "code":"Monster",//要求类型:Monster:怪物,Goods:物品,copper:铜贝 + "name":"病鸡",//相关名称:为怪物名称或者物品名称,如果是铜贝名称为“铜贝” + "parameter":"0AA26D21-B220-A830-A355-63C344C54079",//物品参数,怪物的怪物ID或者物品ID, + "count":3,//要求的属灵 + "mapId":"10_19",//怪物所在的地图ID,如果是怪物掉落物品的话,为怪物所在的地图ID,如果需要购买的物品为NPC所在的地图ID;非怪物或物品,该参数值为空 + "areaCode":"Own", //如果是怪物类型的话,仅个人击杀怪物参数为“Own”,如果是队伍都可以击杀为“Team”,非怪物类型该参数为空。 + "isOp":0//如果是物品或者铜贝需要扣除的该参数值为1,否则为0;如果时任务物品,且后续任务环不再需要该物品,要进行扣除处理,如果后续还需要,且后续不再给该道具,则不要进行扣除,要保证任务连贯性。 + } +] + +任务奖励: 任务奖励是完成该环任务发放的奖励,如果该环不发奖励,该值为空;否则按照数组json格式生成,格式如下: + +[ + { + "code": "exp",//发放奖励类型:copper:铜贝 renown :声望 exp:经验 Goods:物品 + "name": "经验",//物品道具名称 + "parameter": null,//物品道具参数 + "count": 230 //数量 + }, + { + "code":"copper", + "name":"铜贝", + "parameter":null, + "count":200 + }, + { + "code":"renown", + "name":"声望", + "parameter":null, + "count":1 + }, + { + "code":"Goods", + "name":"领路蝶", + "parameter":"10033", + "count":100 + }, + { + "code":"Goods", + "name":"引路蜂", + "parameter":"10034", + "count":100 + } +] + + +- npc.xls :生成任务的NPC数据结构,当进行任务生成时,同时任务对应的NPC数据结构,结构参数说明如下: +NPCID:生成的NPCID,为数字类型,参考提示要求的数字起始值进行叠加1生成。 +npc名称:生成任务时对话的NPC名称。 +地图ID:NPC所在地图点ID,参考任务生成npc所在地图。 +npc类型:类型值为“Task”。 +是否拥有业务: 如果该npc提供玩家购买物品,则该值为“商店”,否则为空。 +npc介绍: 对生成的该npc有一个性格或者人物的背景介绍,要求不超过50字。 + + +- goods.xls : 任务需要的物品,为串联任务或怪物掉落或任务剧情道具物品生成在该表格,参数说明: +物品ID:物品的主键ID,为数组类型,生成按照提示进行+1生成设计。 +物品名称: 物品或道具名称 +物品介绍:该物品的简单说明,不超过30字。 +获取途径:说明该物品如何获取。 + + +- monster.xls : 怪物表格,任务进行中如果有击杀怪物要求,对应的怪物表格 +怪物ID:生成的怪物ID,为数组类型,生成按照提示进行+1生成设计。 +怪物名称:怪物的名称 +等级: 生成怪物对应的等级,根据提示要求范围进行合理生成等级。 +最小攻击: 怪物的最小攻击,生成的公式:怪物等级*2 +最大攻击:怪物最大攻击,生成的公式:按照最小攻击*1.5 +防御:怪物防御值,生成的公式:按照最小攻击*0.8 +敏捷:怪物敏捷值,生成的公式:按照最小攻击*0.8 +体力:怪物的生命值,生成的公式:按照最大攻击*5 +经验:击杀怪物获得的经验,生成公式:怪物等级*3 +说明:怪物背景的说明,简要说明,不超过30字。 +怪物掉落:在设计的任务中,如果需要击杀怪物掉落物品,则需要配置该字段,否则为空。如果需要进行掉落,则掉落的参数配置为json,结构样例如下: +{ + "type":"Default", + "award": + { + "code":"Chance", + "name":"", + "empty":100,//掉落几率,在任务怪物中该值为100 + "data": + [ + { + "code":"Goods",//掉落类型,Goods:物品 + "name":"情书",//物品名称 + "par":"200001",//物品ID + "minCount":1,//掉落最小数量 + "maxCount":1,//掉落最大数量 + "chance":100.0//概率,最大100,最小0,在任务中该值永远为100 + } + ] + } +} + +- store.xls :NPC商店数据表,如果任务要求需要玩家找特性npc进行购买时,生成的数据要放在这里,其中每个参数的意思如下: +售卖ID:商店ID,按照NPCID+0001,叠加+1生成即可,数字类型。 +NPCID:对应的NPCID +物品名称:对应售卖的物品名称 +物品ID:对应生成的物品ID +物品价格:按照提示中要求的物品价格区间进行随机生成。 + + + +### resutlt 文件夹数据结构说明 + +参考 create文件夹中包含的文件模板,把生成的数据分类放在result文件夹下,文件名称和模板对应的文件名称保持一致。 + +## 特别说明和注意事项 +1. 当下一环任务要求提供的物品,如果该物品不是击杀怪物掉落同时也不是商城购买,则需要在下一环任务开始之前通过其他环任务发放奖励的方式给与玩家,保证玩家在完成该环任务时不缺少道具。 +2. 如果在提示中,没有要求奖励指定道具物品,则任务奖励除了必要的任务所需道具物品外,任务奖励只发放经验、声望、铜贝,具体数值参考提示(按照提示中给的总额度,进行设计分配)。 +3. 按照提示,结合本文档的相关说明生成任务数据。 +4. 生成之后要对数据进行效验比较,认真检查。 +5. 如果该任务完成后发放奖励,则任务奖励中的每一项奖励的count不能小于0。 +6. 如果怪物掉落任务物品,那么掉落的数量大于任务要求数量,例如:如果任务要求3个物品,怪物设置了1个,那么这个怪物击杀后奖励必须为最少3个,可以设置击多个怪物数量。 +7. 如果是怪物掉落的物品作为任务道具,则怪物也要同时作为任务完成条件。 +8. 一定要检查下一环任务摘要中的描述和下一环实际场景是否对战,如果下一环有击杀任务要求,要验证是否和描述中的地图点是否一致。 + + +## 验证 +完成所有生成后,对生成数据的每个细节点、逻辑点等进行最后全面检查。 \ No newline at end of file diff --git a/任务生成/resource.zip b/任务生成/resource.zip new file mode 100644 index 0000000000000000000000000000000000000000..bfeda0e45839047f5beab6af88dbdf7267314619 GIT binary patch literal 11348 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 GB>w|ZL2I%A literal 0 HcmV?d00001 diff --git a/任务生成/resource/map.xls b/任务生成/resource/map.xls new file mode 100644 index 0000000000000000000000000000000000000000..a9d6b50bc356ed2d76b9fe8e2ec088439213ab90 GIT binary patch literal 43008 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