Exemplo n.º 1
0
        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);
            });
        }
Exemplo n.º 2
0
        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);
                }
            });
        }