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("战斗结束"); } }
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; }
public void action(IBattleable actioner, BattleTask task) { if (ActiveSkillSupporter.canUseAffectSkill(actioner, task.getTargets(), this)) { return; } observer.used(); setBounsToCharacter(task.getTargets()); actioner.minusMp(cost); }
public void action(IBattleable actioner, BattleTask task) { //MPが足りないと終わり if (actioner.getMp() < this.COST) { return; } move(actioner, task.getMove()); actioner.minusMp(this.COST); }
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(); }
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); }); }
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)); }
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); } }); }