Esempio n. 1
0
        public async Task Battle(BattleTask task, string questId, LoginResult res, IActorRef battleSetup, IActorRef battleResult)
        {
            var serverApi = task.serverApi;
            var data      = task.roleData;

            task.task_data["questId"] = questId;
            var decks = JsonConvert.DeserializeObject <List <Unreal.FGO.Core.Api.ToploginUserdeck> >(data.deck_info);

            task.task_data["deckId"] = decks.First().id.ToString();
            task.deckId = task.task_data["deckId"];

            var questChecker = new QuestChecker()
            {
                TimetampSecond = serverApi.TimetampSecond,
                userQuest      = serverApi.userQuest == null ? new List <Core.Api.HomeUserquest>() : serverApi.userQuest
            };
            var questList = questChecker.GetUserQuestList();
            var quest     = questList.Where(q => questId == q.id).FirstOrDefault();

            if (quest == null)
            {
                return;
            }

            var count     = AssetManage.Database.mstQuestPhase.Where(p => p.questId == quest.id).Count();
            var userQuest = serverApi.userQuest.FirstOrDefault(u => u.questId == quest.id);

            if (count > 0 && userQuest != null && userQuest.questPhase < count)
            {
                task.task_data["questPhase"] = (++userQuest.questPhase).ToString();
            }
            else
            {
                task.task_data["questPhase"] = "1";
            }
            task.task_data["questId"] = quest.id;

            if (res.code != 0)
            {
                Sender.Tell(res);
                return;
            }
            var sleepTime = await battleSetup.Ask <TimeSpan>(task);

            if (sleepTime.TotalMilliseconds == 0)
            {
                res.code    = -1;
                res.message = "战斗开始失败:" + questId;
                Sender.Tell(res);
                return;
            }
            logger.Info("战斗开始:" + questId);
            logger.Info("战斗开始,等待" + sleepTime.Minutes + "分" + sleepTime.Seconds + "秒");
            await Task.Delay(sleepTime);

            if (await battleResult.Ask <bool>(task))
            {
                logger.Info("战斗结束");
            }
        }
Esempio n. 2
0
        public async Task SetName(BattleTask task, LoginResult res, string name = null)
        {
            var serverApi = task.serverApi;
            var role      = task.role;

            if (res.code != 0)
            {
                return;
            }
            if (name == null)
            {
                name = role.username.Length > 6 ? role.username.Substring(0, 6) + new Random().Next(1, 100) : role.username;
            }
            else
            {
                name = name.Length > 6 ? name.Substring(0, 6) : name;
            }
            var setNameRes = await serverApi.Profileeditname(name);

            if (setNameRes.code != 0)
            {
                res.code    = -500;
                res.message = setNameRes.message;
                return;
            }
            var createRoleRes = await serverApi.ApiClientCreateRole(name);

            if (createRoleRes.code != 0)
            {
                res.code    = -500;
                res.message = createRoleRes.message;
                return;
            }
            return;
        }
Esempio n. 3
0
        public void action(IBattleable actioner, BattleTask task)
        {
            if (ActiveSkillSupporter.canUseAffectSkill(actioner, task.getTargets(), this))
            {
                return;
            }

            observer.used();
            setBounsToCharacter(task.getTargets());
            actioner.minusMp(cost);
        }
Esempio n. 4
0
        public void action(IBattleable actioner, BattleTask task)
        {
            //MPが足りないと終わり
            if (actioner.getMp() < this.COST)
            {
                return;
            }

            move(actioner, task.getMove());

            actioner.minusMp(this.COST);
        }
Esempio n. 5
0
        public void action(IBattleable actioner, BattleTask task)
        {
            if (!ActiveSkillSupporter.canUseAffectSkill(actioner, task.getTargets(), this))
            {
                return;
            }

            attack(actioner, task.getTargets());

            actioner.minusMp(this.cost);

            observer.used();
        }
Esempio n. 6
0
        public BattleResult()
        {
            ReceiveAsync <BattleResultParam>(async param =>
            {
                var db   = new Db();
                var role = db.GetUserRoleById(param.roleId);
                db.Dispose();

                var result    = new BattleResultResult();
                var device    = getDevice(role.device_id);
                var roleData  = getRoleData(role.id);
                var serverApi = InitServerApi(role, device, roleData);

                var taskData = new Dictionary <string, string> {
                    { "battleId", param.battleId },
                };

                if (!string.IsNullOrEmpty(param.questId))
                {
                    taskData["questId"] = param.questId;
                }
                var task = new BattleTask()
                {
                    role      = role,
                    device    = device,
                    roleData  = roleData,
                    serverApi = serverApi,
                    task_data = taskData
                };
                var flag = await Context.ActorOf <BattleResultActor>().Ask <bool>(task);

                if (!flag)
                {
                    result.code    = -1;
                    result.message = "战斗结束失败";
                    Sender.Tell(result);
                    return;
                }
                Sender.Tell(result);
            });
        }
Esempio n. 7
0
        private KancolleTaskResult Battle(BattleTask task)
        {
            bool   result;
            Battle battle      = null;
            string taskContent = "作战行动";

            if (task is BattleChoiceTask)
            {
                var t = task as BattleChoiceTask;
                taskContent = $"作战行动【{t.BattleChoice.ToString()}】";
                if (t.BattleChoice == BattleChoiceTask.BattleChoices.Back || t.BattleChoice == BattleChoiceTask.BattleChoices.Night)
                {
                    //夜战选择
                    result = WaitForScene(KancolleSceneTypes.Battle_NightChoice, ActionTimeout);
                    if (!result)
                    {
                        return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】与预期场景【{KancolleSceneTypes.Battle_NightChoice}】不符", UnexceptedScene));
                    }
                    //左为返回,右为夜战
                    if (t.BattleChoice == BattleChoiceTask.BattleChoices.Back)
                    {
                        actionExecutor.Execute(KancolleWidgetPositions.Battle_LeftChoice);
                    }
                    else
                    {//夜战会返回battle结果
                        battle = WaitForBattle(new KancolleAction(KancolleWidgetPositions.Battle_RightChoice));
                        if (battle == null)
                        {
                            return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"未能获得Battle数据", NoBattleInfo));
                        }
                    }
                }
                else if (t.BattleChoice == BattleChoiceTask.BattleChoices.Next || t.BattleChoice == BattleChoiceTask.BattleChoices.Return)
                {
                    result = WaitForScene(KancolleSceneTypes.Battle_NextChoice, ActionTimeout);
                    if (!result)
                    {
                        return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】与预期场景【{KancolleSceneTypes.Battle_NextChoice}】不符", UnexceptedScene));
                    }
                    //左为进击,右为回港
                    if (t.BattleChoice == BattleChoiceTask.BattleChoices.Next)
                    {
                        actionExecutor.Execute(KancolleWidgetPositions.Battle_LeftChoice);
                    }
                    else
                    {
                        actionExecutor.Execute(KancolleWidgetPositions.Battle_RightChoice);
                    }
                }
            }
            else if (task is BattleFormationTask)
            {
                var t = task as BattleFormationTask;
                if (t.Formation <= 0 || t.Formation > 5)
                {
                    return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"阵型参数错误,应为1-5,实际为【{t.Formation}】", IllegalFormation));
                }
                taskContent = $"阵型选择【{t.Formation}】";
                result      = WaitForScene(KancolleSceneTypes.Battle_Formation, ActionTimeout);
                if (!result)
                {
                    return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】与预期场景【{KancolleSceneTypes.Battle_Formation}】不符", UnexceptedScene));
                }
                //阵型会返回battle结果
                battle = WaitForBattle(new KancolleAction(KancolleWidgetPositions.Battle_Formation[t.Formation - 1]));
                if (battle == null)
                {
                    return(new KancolleTaskResult(task, KancolleTaskResultType.Fail, $"未能获得Battle数据", NoBattleInfo));
                }
            }
            else if (task is BattleSkipTask)
            {
                //var t = task as BattleSkipTask;
                taskContent = "跳过战斗过场";
                DateTime start = DateTime.Now;
                while ((DateTime.Now - start).TotalMilliseconds <= ActionTimeout)
                {
                    Thread.Sleep(500);
                    //一直点击屏幕空白处,直到场景跳转为已知,且不为罗盘娘界面
                    if (CurrentScene != KancolleSceneTypes.Unknown && CurrentScene != KancolleSceneTypes.Battle_Compass)
                    {
                        break;
                    }
                    actionExecutor.Execute(GetBattleRandomSafePoint());
                }
            }

            return(new KancolleTaskResult(task, KancolleTaskResultType.Success, $"{taskContent}完成", Success, battle));
        }
Esempio n. 8
0
        public InitRole()
        {
            ReceiveAsync <InitRoleParam>(async(param) =>
            {
                logger.Info("InitRole Starting..");
                var role = param.role;
                var res  = new LoginResult();
                try
                {
                    var db     = new Db();
                    var device = db.GetDeviceById(role.device_id);
                    db.Dispose();
                    var login = Context.ActorOf <Login>();

                    var loginRes = await login.Ask <LoginResult>(new LoginParam()
                    {
                        role   = role,
                        device = device
                    });

                    if (loginRes.code != 0)
                    {
                        Sender.Tell(loginRes);
                        return;
                    }

                    var data      = getRoleData(role.id);
                    var serverApi = InitServerApi(role, device, data);
                    if (role.inited)
                    {
                        logger.Info(role.username + "已经初始成功");
                        await Home(serverApi, data, role);
                        Sender.Tell(res);
                        return;
                    }
                    var battleSetup  = Context.ActorOf <BattleSetupActor>();
                    var battleResult = Context.ActorOf <BattleResultActor>();
                    BattleTask task  = new BattleTask()
                    {
                        serverApi = serverApi,
                        task_data = new Dictionary <string, string>()
                        {
                            { "deckId", "" },
                            { "followerId", "0" },
                            { "questId", "1000000" },
                            { "questPhase", "1" },
                        },
                        role       = role,
                        device     = device,
                        followerId = "0",
                        deckId     = "",
                        roleData   = data
                    };
                    if (serverApi.userGame != null && serverApi.userGame.tutorial1 == "8198")
                    {
                        logger.Info(role.username + "已经初始成功");
                        await Home(serverApi, data, role);
                        db   = new Db();
                        role = db.userRoles.Find(role.id);
                        role.last_update_time = DateTime.Now;
                        role.inited           = true;
                        db.SaveChanges();
                        Sender.Tell(res);
                    }
                    logger.Info(role.username + "初始开始");
                    var questIds = new string[] { "1000000", "1000001", "1000002" };
                    foreach (var questId in questIds)
                    {
                        if (serverApi.userGame != null &&
                            serverApi.userQuest.Any(u => u.questId == "1000000") &&
                            serverApi.userGame.name == serverApi.userGame.userId
                            )
                        {
                            logger.Info("设置名字");
                            await SetName(task, res, param.name);
                            if (res.code != 0)
                            {
                                Sender.Tell(res);
                                return;
                            }
                            logger.Info("名字设置成功");
                        }
                        if (new QuestChecker()
                        {
                            userQuest = serverApi.userQuest, TimetampSecond = serverApi.TimetampSecond
                        }.CheckQuestClear(questId))
                        {
                            continue;
                        }
                        await Battle(task, questId, res, battleSetup, battleResult);
                        if (res.code != 0)
                        {
                            Sender.Tell(res);
                            return;
                        }
                    }

                    var tutorialResult = await serverApi.Tutorialprogress("1");
                    var gachaRes       = await serverApi.Gachadraw("101", "2", "10");
                    //Gachadraw
                    var tutorialSetResult = await serverApi.Tutorialset("101");
                    tutorialResult        = await serverApi.Tutorialprogress("2");


                    //var gachaRes = await serverApi.Decksetup(serverApi.userDeck);
                    //
                    tutorialResult = await serverApi.Tutorialprogress("3");

                    await Battle(task, "1000003", res, battleSetup, battleResult);
                    if (res.code != 0)
                    {
                        Sender.Tell(res);
                        return;
                    }
                    await Home(serverApi, data, role);
                    db   = new Db();
                    role = db.userRoles.Find(role.id);
                    role.last_update_time = DateTime.Now;
                    role.inited           = true;
                    db.SaveChanges();

                    Sender.Tell(res);
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                    res.message = ex.Message;
                    res.code    = -500;
                    Sender.Tell(res);
                }
            });
        }