//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, December 12, 2018 //-------------------------------------------------------- using System; using System.Collections.Generic; using TableConfig; using Snxxz.UI; //跨服PK奖励信息 [XLua.LuaCallCSharp] public class Item_Class { public int ItemId; public int ItemNumber; public int Isbind; } public class SeasonAwardClass//赛季奖励 { public int DanLv; public string Name; public int Score; public List ItemList; } public struct ZoneRankingStruct { public int ZoneID; public int SeasonID; public override bool Equals(object obj) { var compare = (ZoneRankingStruct)obj; return this.ZoneID== compare.ZoneID && this.SeasonID == compare.SeasonID; } public override int GetHashCode() { return (ZoneID*1000+ SeasonID).GetHashCode(); } } public class RankingInformationClass//排名信息 { public int Rankin;//名次 public int Realm;//境界 public int PlayerID;//玩家ID public string PlayerName;//玩家名 public int Job;//职业 public int Power;//战力 public int DanLv;//段位 public int PkScore;//积分 } public enum CrossRealmPKAwardStateEnum { DayPKCountAwardState = 1, DayWinCountAwardState = 2, DanLVAwardState = 3, SeasonAwardState = 4, } public class CrossServerRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel(); } } public Dictionary SegmentRewardDic = new Dictionary(); public ImpactRankModel.RankAwardItem SeasonRewardDic = new ImpactRankModel.RankAwardItem(); //Dictionary Dictionary> ZoneRankingDic = new Dictionary>(); public Dictionary RankInformationDic = new Dictionary(); public Action CrossRealmPKAwardStateUpdate;//领取奖励刷新 public Action RankInformationUpdate;//排行奖励刷新 private uint DayPKCountAwardState; //每日匹配次数奖励记录 private uint DayWinCountAwardState; // 每日胜利次数奖励记录 private uint DanLVAwardState; // 段位达标奖励记录 private int SeasonAwardState; // 赛季结算奖励是否已领取 private bool m_IsOpenMatch; public int ZoneID = 0;//赛区ID public int SeasonID = 0;//赛季ID public bool IsOpenMatch { get { return m_IsOpenMatch; } set { m_IsOpenMatch = value; } } DateTime m_DateTime = DateTime.Now; public DateTime Date_Time { get { return m_DateTime; } set { m_DateTime = value; } } public override void Init() { GetSeasonAward(); GetSegmentReward(); } public void OnBeforePlayerDataInitialize() { ZoneID = 0; SeasonID = 0; crossServerModel.UpdatePkResultEvent -= UpdatePkResultEvent; } public void OnPlayerLoginOk() { crossServerModel.UpdatePkResultEvent += UpdatePkResultEvent; } public override void UnInit() { } private void UpdatePkResultEvent() { if (IsCrossServer())//副本结算界面 { WindowCenter.Instance.Open(); } } private void GetSeasonAward() { var config = Config.Instance.GetAllValues(); for (int i = 0; i < config.Count; i++) { var _config = config[i]; if (!SegmentRewardDic.ContainsKey(_config.DanLV)) { SeasonAwardClass seasonAwardClass = new SeasonAwardClass(); seasonAwardClass.DanLv = _config.DanLV; seasonAwardClass.Name = _config.Name; seasonAwardClass.Score = _config.LVUpScore; var _jsonData = LitJson.JsonMapper.ToObject(_config.SeasonAwardList); List itemClassList = new List(); for (int j = 0; j < _jsonData.Count; j++) { Item_Class itemClass = new Item_Class(); itemClass.ItemId = int.Parse((_jsonData[j][0]).ToString()); itemClass.ItemNumber = int.Parse((_jsonData[j][1]).ToString()); itemClass.Isbind = int.Parse((_jsonData[j][2]).ToString()); itemClassList.Add(itemClass); } seasonAwardClass.ItemList = itemClassList; SegmentRewardDic.Add(_config.DanLV, seasonAwardClass); } } } private void GetSegmentReward() { var CrossRealmPKAward = Config.Instance.Get("CrossRealmPKAward"); ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem(); var _jsonData = LitJson.JsonMapper.ToObject(CrossRealmPKAward.Numerical3); foreach (string key in _jsonData.Keys) { var _ranking = int.Parse(key); var _itemArray = LitJson.JsonMapper.ToObject(_jsonData[key].ToJson()); for (int j = 0; j < _itemArray.Length; j++) { _award.Add(_ranking, new AwardItem() { item = new Item(_itemArray[j][0], _itemArray[j][1]), isBind = _itemArray[j][2], }); } } SeasonRewardDic = _award; } public void ResetTime() { Date_Time = TimeUtility.ServerNow; } public void CrossRealmPKAwardState(HC102_tagMCCrossRealmPKAwardState info)//c102跨服PK玩家奖励记录 { DayPKCountAwardState = info.DayPKCountAwardState; DayWinCountAwardState = info.DayWinCountAwardState; DanLVAwardState = info.DanLVAwardState; SeasonAwardState = info.SeasonAwardState; if (CrossRealmPKAwardStateUpdate != null) { CrossRealmPKAwardStateUpdate(); } } public bool IsAwardState(CrossRealmPKAwardStateEnum _cross, int Index)//是否已领取奖励 { bool _bool = false; if (_cross == CrossRealmPKAwardStateEnum.SeasonAwardState) { if (SeasonAwardState == 1) { _bool = true; } else { _bool = false; } } else { switch (_cross) { case CrossRealmPKAwardStateEnum.DayPKCountAwardState: _bool = MathUtility.GetBitValue(DayPKCountAwardState, (ushort)Index); break; case CrossRealmPKAwardStateEnum.DayWinCountAwardState: _bool = MathUtility.GetBitValue(DayWinCountAwardState, (ushort)Index); break; case CrossRealmPKAwardStateEnum.DanLVAwardState: _bool = MathUtility.GetBitValue(DayWinCountAwardState, (ushort)Index); break; } } return _bool; } public void CrossRealmPKGetAward(CrossRealmPKAwardStateEnum _cross, int Index)//领奖发包 { CC103_tagCMCrossRealmPKGetAward c103 = new CC103_tagCMCrossRealmPKGetAward(); c103.AwardType = (byte)_cross; c103.AwardData = (byte)Index; GameNetSystem.Instance.SendInfo(c103); } public bool IsCrossServer()//是否再跨服副本中 { bool _bool = false; int mapId = PlayerDatas.Instance.baseData.MapID; if (mapId == 32010 || mapId == 32011) { _bool = true; } return _bool; } public void ViewCrossPKBillboard(int ZoneID, int SeasonID)//(赛区,赛季) 查看跨服竞技场赛季排行榜 { CC001_tagCGViewCrossPKBillboard c001 = new CC001_tagCGViewCrossPKBillboard(); c001.ZoneID = (byte)ZoneID; c001.SeasonID = (byte)SeasonID; GameNetSystem.Instance.SendInfo(c001); } public void CrossRealmPKBillboardInfo(HC005_tagGCCrossRealmPKBillboardInfo info)//跨服PK赛季排行榜 { ZoneID = info.ZoneID; SeasonID = info.SeasonID; if (info.Count > 0) { RankInformationDic.Clear(); for (int i = 0; i < info.Count; i++) { if (!RankInformationDic.ContainsKey(i)) { RankingInformationClass RankingInformation = new RankingInformationClass(); RankingInformation.PlayerID = (int)info.PKBillboardList[i].PlayerID; RankingInformation.PlayerName = info.PKBillboardList[i].PlayerName; RankingInformation.Job = info.PKBillboardList[i].Job; RankingInformation.Power = (int)info.PKBillboardList[i].FightPower; RankingInformation.Realm = (int)info.PKBillboardList[i].RealmLV; RankingInformation.DanLv = (int)info.PKBillboardList[i].DanLV; RankingInformation.PkScore = (int)info.PKBillboardList[i].PKScore; RankInformationDic.Add(i, RankingInformation); } else { RankingInformationClass RankingInformation = new RankingInformationClass(); RankingInformation.PlayerID = (int)info.PKBillboardList[i].PlayerID; RankingInformation.PlayerName = info.PKBillboardList[i].PlayerName; RankingInformation.Job = info.PKBillboardList[i].Job; RankingInformation.Power = (int)info.PKBillboardList[i].FightPower; RankingInformation.Realm = (int)info.PKBillboardList[i].RealmLV; RankingInformation.DanLv = (int)info.PKBillboardList[i].DanLV; RankingInformation.PkScore = (int)info.PKBillboardList[i].PKScore; RankInformationDic[i] = RankingInformation; } } } ZoneRankingStruct zoneRank = new ZoneRankingStruct(); zoneRank.ZoneID = info.ZoneID; zoneRank.SeasonID = info.SeasonID; if (!ZoneRankingDic.ContainsKey(zoneRank)) { ZoneRankingDic.Add(zoneRank, RankInformationDic); } else { ZoneRankingDic[zoneRank] = RankInformationDic; } if (RankInformationUpdate != null) { RankInformationUpdate(); } } }