private void SyncActivityData() { dynamic resp = Post("/illustration/list", "type=4"); if (resp != null && resp.errorCode == 0) { LogInfo("同步活动信息"); #region activities var activities = new List<MojoActivityItem>(); foreach (var a in resp.data.list) { #region conditions var conditions = new List<MojoActivityItemCondition>(); foreach (var c in a.conditions) { var new_c = new MojoActivityItemCondition { Id = c.id, EntityCount = c.entity_count, EntityId = c.entity_id, EntityLevel = c.entity_level, IsEnough = c.is_enough, NeedChoose = c.need_choose, PlayerEntityCount = c.player_entity_count, EntityName = c.entity == null ? "" : c.entity.name }; conditions.Add(new_c); } #endregion var new_i = new MojoActivityItem { Id = a.id, Name = a.name, NeedPlayerLevel = a.need_player_level, ColdDown = a.cooling_time, LastSyncTime = DateTime.Now, CouldDo = a.could_do, HasDo = a.has_do, HasInvalid = a.has_invalid, IsRepeat = a.is_repeat, NotStart = a.not_start, Probability = a.probability, Conditions = conditions, }; if (a.award != null) { new_i.AwardName = a.award.name; new_i.AwardId = a.award.id; } if (SGLL.Data.ActivityData != null && SGLL.Data.ActivityData.Activities != null) { var exist = SGLL.Data.ActivityData.Activities.FirstOrDefault(p => p.Id == new_i.Id); if (exist != null) new_i.AwardGot = exist.AwardGot; } activities.Add(new_i); } #endregion SGLL.Data.ActivityData = new MojoActivityData { Activities = activities, ColdDown = CD(3600), LastSyncTime = DateTime.Now, }; SGLL.CallStatusUpdate(this, ChangedType.Activity); } }
private bool CouldDo(MojoActivityItem activity) { if (activity.CouldDo) { if (activity.IsRepeat && DateTime.Now < activity.LastSyncTime.AddSeconds(activity.ColdDown)) return false; else if (activity.Conditions.Any(p => p.EntityName.Contains("信物"))) { // 取消**信物自动兑换 return false; } return true; } else { if (activity.HasDo) return false; // 如果蒋干和蒙古马不足导致的,可以自动购买 if (MatchConditions(activity, new string[] { "蒋干", "蒙古马", "银币" }) && MatchParam(SR.ParaKey.ActivityAutoJM, "true", false)) { var m_c = activity.Conditions.Single(p => p.EntityName == "银币"); if (!m_c.IsEnough) return false; var jm = activity.Conditions.Where(p => !p.IsEnough && p.EntityName != "银币"); return jm.Count() > 0 && SGLL.Data.PlayerInfo.VM >= 1200; } return false; } }
private bool MatchConditions(MojoActivityItem activity, string[] entityNames) { var targetNames = activity.Conditions.Select(p => p.EntityName).ToList(); for (int i = 0; i < entityNames.Length; i++) { if (!targetNames.Contains(entityNames[i])) { return false; } targetNames.Remove(entityNames[i]); } return targetNames.Count == 0; }