public BattleActor() { ReceiveAsync <BattleTask>(async task => { if (!await Context.ActorOf <LoginActor>().Ask <bool>(task)) { Sender.Tell(false); return; } if (!await Context.ActorOf <HomeActor>().Ask <bool>(task)) { Sender.Tell(false); return; } var serverApi = task.serverApi; var deckId = string.IsNullOrEmpty(task.deckId) ? serverApi.userDeck.First().id : task.deckId.ToString(); var followerId = string.IsNullOrEmpty(task.followerId) ? serverApi.userFollower.First().userId : task.followerId.ToString(); System.Console.WriteLine("userId : " + serverApi.PlatfromInfos["userId"]); System.Console.WriteLine("name : " + serverApi.userGame.name); System.Console.WriteLine("lv : " + serverApi.userGame.lv); System.Console.WriteLine("ap : " + serverApi.ApNum); start: bool hasQuest = false; string questId = null; int ap = serverApi.ApNum; int minAp = 10000000; mstQuest mstQuestData = null; foreach (var item in serverApi.userQuest) { if (task.questIds.Contains(item.questId)) { var questData = AssetManage.Database.mstQuest.FirstOrDefault(q => q.id == item.questId); if (questData != null) { mstQuestData = questData; hasQuest = true; var actConsume = int.Parse(questData.actConsume);; if (actConsume > ap) { minAp = actConsume < minAp ? actConsume : minAp; continue; } questId = item.questId; break; } } } if (!hasQuest) { System.Console.WriteLine("战斗任务找不到匹配的副本。自动禁用 ID:" + task.id); await Context.ActorOf <DisableTaskAcotr>().Ask(task.id); Sender.Tell(false); return; } if (string.IsNullOrEmpty(questId)) { System.Console.WriteLine("Ap不够了"); var item = serverApi.userItem.Where(u => u.itemId == "100").FirstOrDefault(); if (item != null && item.num != "0" && task.useitem) { var itemuse = await serverApi.Itemuse(item.itemId, "1"); if (itemuse.code == 0) { System.Console.WriteLine("消耗了一个苹果,总共" + item.num + "个"); goto start; } } var t = TimeSpan.FromMilliseconds((minAp - ap) * 300 * 1000); System.Console.WriteLine("等待 " + t.Hours + "小时" + t.Minutes + "分" + t.Seconds + "秒"); await Task.Delay(t); } var setup = await serverApi.Battlesetup(deckId, followerId, questId); if (setup.code != 0) { await TaskErrorAndBack(task.id, GameAction.BATTLESETUP, setup); return; } var random = new Random(); var time = random.Next((int)TimeSpan.FromMinutes(2).TotalMilliseconds, (int)TimeSpan.FromMinutes(3).TotalMilliseconds); var timespan = TimeSpan.FromMilliseconds(time); Context.ActorOf <SaveRoleDataActor>().Tell(new SaveActionDataTask() { action = GameAction.BATTLESETUP, serverApi = serverApi, expiresTime = DateTime.Now.Add(timespan), taskId = task.id, battleId = setup.cache.replaced.battle[0].id }); var color = System.Console.ForegroundColor; System.Console.ForegroundColor = ConsoleColor.DarkBlue; System.Console.WriteLine(mstQuestData.name); System.Console.WriteLine("战斗开始,等待" + timespan.Minutes + "分" + timespan.Seconds + "秒"); System.Console.ForegroundColor = color; await Task.Delay(time); var count = random.Next(20, 35); var action = new BattleresultActionItem[count]; for (int i = 0; i < count; i++) { action[i] = new BattleresultActionItem() { ty = random.Next(1, 4), uid = random.Next(1, 4) }; } var battresult = await serverApi.Battleresult(setup.cache.replaced.battle[0].id, action, new string[] { }); if (battresult.code != 0) { await TaskErrorAndBack(task.id, GameAction.BATTLERESULT, battresult); return; } System.Console.WriteLine("战斗结束"); await Task.Delay(10000); Context.ActorOf <SaveRoleDataActor>().Tell(task); Sender.Tell(true); }); }
public BattleResultActor() { ReceiveAsync<BattleTask>(async task => { try { if (task.serverApi == null) task.serverApi = InitServerApi(task); var serverApi = task.serverApi; if (!task.task_data.ContainsKey("battleId")) { Log(task.id, GameAction.BATTLERESULT, "结束战斗失败,战斗信息不存在"); await TaskErrorBack(task.id, GameAction.BATTLERESULT, serverApi.LastResponse, "无法读取战斗ID"); return; } BattleresultRes result = null; var battleId = task.task_data["battleId"]; battleEnd: if (task.task_data.ContainsKey("questId") && constBattleData.ContainsKey(task.task_data["questId"])) { var data = constBattleData[task.task_data["questId"]]; result = await serverApi.Battleresult(battleId, data.actions, data.voicePlayedList); } else { var random = new Random(); var count = random.Next(10, 35); var action = new BattleresultActionItem[count]; for (int i = 0; i < count; i++) { action[i] = new BattleresultActionItem() { ty = random.Next(1, 4), uid = random.Next(1, 4) }; } result = await serverApi.Battleresult(battleId, action, "[]"); } if (result.code != 0) { await TaskErrorBack(task.id, GameAction.BATTLERESULT, result); return; } if (result.response[0].nid == "battle_setup") { await Task.Delay(1000); goto battleEnd; } if (task.roleData != null && serverApi.userQuest != null) task.roleData.quest_info = JsonConvert.SerializeObject(serverApi.userQuest); Log(task.id, GameAction.BATTLESETUP, "结束战斗成功"); await SaveActionData(task, GameAction.BATTLERESULT); Sender.Tell(true); } catch (Exception ex) { logger.Error(ex); Log(task.id, GameAction.BATTLERESULT, "结束战斗失败"); Sender.Tell(false); } }); }