/// <summary> /// Attempts to refresh all heroes. /// </summary> private async Task<bool> RefreshHeroesAsync() { if (asyncLock) { return false; } try { asyncLock = true; var packet = await packetWriter.SendCommandAsync("41100", "0"); if (packet == null) { return false; } barracks = Barracks.Parse(JToken.Parse(packet.Message)); var details = new List<HeroDetail>(); var heroIds = new List<int>(); foreach (var hero in barracks.Heroes) { heroIds.Add(hero.Id); var p1 = await packetWriter.SendCommandAsync("41107", hero.Id.ToString()); if (p1 == null) { return false; } var detail = HeroDetail.Parse(JToken.Parse(p1.Message)); details.Add(detail); } heroDetails = details; heroList.SetObjects(heroIds, true); return true; } finally { asyncLock = false; } }
private async Task <TaskResult> Process(TaskBoard taskBoard, List <TaskDetail> tasks) { Debug.Assert(processing); var market = await Client.RefreshMarketAsync(); if (market == null) { return(TaskResult.LostConnection); } var impose = await Client.RefreshImposeAsync(); if (impose == null) { return(TaskResult.LostConnection); } const int MaxWeaponCount = 20; var upgrade = await Client.RefreshUpgradeAsync(1, 0, MaxWeaponCount); if (upgrade == null) { return(TaskResult.LostConnection); } var packet = await Client.SendCommandAsync(41100, "1"); if (packet == null) { return(TaskResult.LostConnection); } var barracks = Barracks.Parse(JToken.Parse(packet.Message)); var helpers = new Dictionary <TaskType, ITaskHelper>(); // FIXME. //helpers.Add(TaskType.Food, new FoodTaskHelper(Client)); //helpers.Add(TaskType.Improve, new ImproveTaskHelper(packetWriter, infoModel, barracks)); //helpers.Add(TaskType.Impose, new ImposeTaskHelper(packetWriter, infoModel, impose)); //helpers.Add(TaskType.AttackNpc, new AttackNpcTaskHelper(packetWriter, mcuModel)); //helpers.Add(TaskType.Upgrade, new UpgradeTaskHelper(packetWriter, infoModel, upgrade)); return(await Process(taskBoard, tasks, helpers)); }
public static Barracks Parse(JToken token) { var result = new Barracks(); result.CurrentSlots = (int)token["currentnum"]; result.MaxSlots = (int)token["maxnum"]; result.MTL = (int)token["tufeiTokenCount"]; result.CanGuide = (bool)token["guidecdusable"]; result.guideCooldown = new Cooldown((int)token["cd"]); var heroes = new List <Hero>(); var general = token["general"]; foreach (var subToken in general) { heroes.Add(Hero.Parse(subToken)); } result.Heroes = heroes; return(result); }
public HeroTrainingView() { InitializeComponent(); barracks = null; heroDetails = null; asyncLock = false; timerLock = false; guidingIndex = 0; trainingIndex = 0; autoTrainStates = new Dictionary<int, bool>(); autoGuideStates = new Dictionary<int, bool>(); nameColumn.AspectGetter = obj => { return heroDetails.Find(item => item.Id == (int) obj).Name; }; levelColumn.AspectGetter = obj => { return heroDetails.Find(item => item.Id == (int) obj).Level; }; shiftLevelColumn.AspectGetter = obj => { return heroDetails.Find(item => item.Id == (int) obj).ShiftLevel; }; autoTrainColumn.AspectGetter = obj => { return IsHeroAutoTrain((int) obj); }; autoTrainColumn.AspectPutter = (obj, value) => { autoTrainStates[(int) obj] = (bool) value; }; autoGuideColumn.AspectGetter = obj => { return IsHeroAutoGuide((int) obj); }; autoGuideColumn.AspectPutter = (obj, value) => { autoGuideStates[(int) obj] = (bool) value; }; }
public ImproveTaskHelper(IPacketWriter writer, IPlayerInfo info, Barracks barracks) { this.writer = writer; this.info = info; this.barracks = barracks; }