private async Task TrainNextHero() { var index = trainingIndex % barracks.Heroes.Count; ++trainingIndex; // Tướng đang được duyệt. var hero = barracks.Heroes[index]; if (!IsHeroAutoTrain(hero.Id)) { // Không được đánh dấu. return; } if (hero.IsTraining) { // Đang được huấn luyện. return; } if (barracks.CurrentSlots == barracks.MaxSlots) { // Hết vị trí huấn luyện. if (barracks.Heroes.Count(item => item.IsTraining) < barracks.CurrentSlots) { // Có vị trí nào đó hết thời gian huấn luyện. // Cập nhật lại thao trường. await RefreshHeroesAsync(); return; } } else { logModel.Log(String.Format("Bắt đầu huấn luyện tướng {0} Lv. {1} Exp {2}/{3}", hero.Name, hero.Level, hero.Exp, hero.NextExp)); await packetWriter.TrainHeroAsync(hero.Id); await RefreshHeroesAsync(); } }