using vnxbqy.UI; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class SkillMatchModel : ILModel { int skillPage; List skillIds; int pageLength = 15; int pageQuickSettingType = 1; int skillQuickSettingType = 3; public int selectId; public event Action onSkillMatchPageUpdate; protected override void Init() { this.skillPage = 0; skillIds = new List(); for (int i = 0; i < 3; i++) { var values = ILSkillMatchConfig.GetValues(); var ids = new int[values.Count]; for (int j = 0; j < values.Count; j++) { ids[j] = values[j].id; } skillIds.Add(ids); } QuickSetting.Instance.onQuickSettingUpdate += OnQuickSettingUpdate; ModelCenter.Instance.GetModelEx().treasureSkillRefresh += OnTreasureSkillRefresh; GameEvent.playerLoginOkEvent += OnPlayerLoginOk; var skillModel = ModelCenter.Instance.GetModelEx(); this.onSkillMatchPageUpdate += skillModel.OnSkillMatchPageUpdate; } protected override void UnInit() { var skillModel = ModelCenter.Instance.GetModelEx(); this.onSkillMatchPageUpdate -= skillModel.OnSkillMatchPageUpdate; } void OnPlayerLoginOk() { TreasureSkillUpdate(); } void OnQuickSettingUpdate() { var str = QuickSetting.Instance.GetQuickSetting(pageQuickSettingType, 0); if (string.IsNullOrEmpty(str)) this.skillPage = 0; else this.skillPage = int.Parse(str); UpdateSkillMatchs(); } void OnTreasureSkillRefresh(int id) { TreasureSkillUpdate(); } void UpdateSkillMatchs() { for (int i = 0; i < skillIds.Count; i++) { var ids = this.skillIds[i]; for (int j = 0; j < ids.Length; j++) { var id = ids[j]; var newid = this.GetQuickSetting(i, j); if (newid != 0 && id != newid) { var index = Array.IndexOf(ids, newid); ids[j] = newid; ids[index] = id; } } } } void TreasureSkillUpdate() { var configs = ILSkillMatchConfig.GetValues(); for (int i = 0; i < configs.Count; i++) { var config = configs[i]; var skillid = GetSkillId(config.id); var model = ModelCenter.Instance.GetModelEx(); TreasureSkill skill; if (model.TryGetSkill(skillid, out skill)) { if (skill.level > 0) { for (int p = 0; p <= 2; p++) TrySetDefaultSkillMatch(config.id, p); } } } QuickSetting.Instance.SendPackage(); } void TrySetDefaultSkillMatch(int _id, int page) { var skillid = this.GetSkillId(_id); for (int i = 0; i < ILSkillMatchConfig.GetValues().Count; i++) { var ids = this.skillIds.Get(page); if (ids != null && i < ids.Length && HasKey(ids[i])) { var id = ids[i]; if (id == _id) return; } else { SetQuickSetting(page, i, _id); } } } bool HasKey(int id) { var configs = ILSkillMatchConfig.GetValues(); for (int i = 0; i < configs.Count; i++) { if (configs[i].id == id) return true; } return false; } public int GetSkillId(int id) { var config = ILSkillMatchConfig.Get(id); if (config != null) { var job = PlayerDatas.Instance.baseData.Job; var length = config.skills.Length; if (job <= length) return config.skills[job - 1]; } return 0; } public List GetSkills() { List skills = new List(); var ids = this.skillIds.Get(this.skillPage); if (ids != null) for (int i = 0; i < ids.Length; i++) { var id = ids[i]; if (id != 0 && !skills.Contains(id)) skills.Add(GetSkillId(id)); } return skills; } void SkillMatchPageUpdate() { onSkillMatchPageUpdate?.Invoke(); } public int[] GetDisplayIds(int page) { List skills = new List(); var ids = this.skillIds.Get(page); return ids; //if (ids == null) // ids = new int[0]; //for (int i = 0; i < ids.Length; i++) //{ // var id = ids[i]; // if (id != 0 && !skills.Contains(id)) // skills.Add(id); //} //List sorted = new List(); //var config = SkillMatchConfig.GetValues(); //for (int i = 0; i < config.Count; i++) //{ // if (!ids.Contains(config[i].id)) // sorted.Add(config[i].id); //} //sorted.Sort((x, y) => //{ // var xOrder = SkillMatchConfig.Get(x).order; // var yOrder = SkillMatchConfig.Get(y).order; // return xOrder.CompareTo(yOrder); //}); //skills.AddRange(sorted); //return skills; } public void SetQuickSetting(int page, int index, int id) { this.skillIds[page][index] = id; var str = Convert.ToString(id, 16); index = page * pageLength + index; QuickSetting.Instance.SetQuickSetting(skillQuickSettingType, str, index); } int GetQuickSetting(int page, int index) { index = page * pageLength + index; var str = QuickSetting.Instance.GetQuickSetting(skillQuickSettingType, index); if (string.IsNullOrEmpty(str) || str == "0" || str == "*") { return 0; } return Convert.ToInt32(str, 16); } public void SetSkillMatch(int page) { if (this.skillPage != page) { this.skillPage = page; QuickSetting.Instance.SetQuickSetting(pageQuickSettingType, page.ToString(), 0); QuickSetting.Instance.SendPackage(); } this.SkillMatchPageUpdate(); } public int GetSkillPage() { return this.skillPage; } }