| System/CrossServerOneVsOne/CrossMatchResultCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerArenaWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPKSeason.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPKSeason.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPkResult.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPkResult.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPlayerInfo.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerPlayerInfo.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossServerWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| System/CrossServerOneVsOne/CrossSeverBuyMatchTimesWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
System/CrossServerOneVsOne/CrossMatchResultCell.cs
@@ -19,9 +19,9 @@ var resultInfo = results[cell.index]; dateTime.text = resultInfo.PkEndTime; int offlineType = 0; bool isOffline = crossServerModel.TryGetOffLine(out offlineType); bool isOffline = resultInfo.TryGetOffLine(out offlineType); int winStreakScore = 0; bool isWinStreak = crossServerModel.TryGetWinStreakScore(out winStreakScore); bool isWinStreak = resultInfo.TryGetWinStreakScore(out winStreakScore); if(isOffline) { switch(offlineType) @@ -46,7 +46,7 @@ { int winNum = 0; int failNum = 0; crossServerModel.GetWinAndFailNum(out winNum,out failNum); resultInfo.GetWinAndFailNum(out winNum,out failNum); string compareScore = StringUtility.Contact(winNum,":",failNum); if (isWinStreak) { System/CrossServerOneVsOne/CrossServerArenaWin.cs
@@ -59,11 +59,12 @@ UpdateMatchInfo(); UpdatePKInfo(); UpdateActivityState(); seasonTimeText.text = CrossServerPKSeason.Instance.ToDisplaySeasonTime(); } private void UpdateMatchInfo() { int remainNum = crossServerModel.alreadyBuyNum + crossServerModel.freeMaxMatchNum - crossServerModel.dayMatchNum; int remainNum = CrossServerPlayerInfo.Instance.GetDayRemainNum(); if (remainNum > 0) { reaminNumText.text = StringUtility.Contact(UIHelper.AppendStringColor(TextColType.Green,remainNum.ToString()), "/", crossServerModel.freeMaxMatchNum); @@ -76,8 +77,8 @@ private void UpdatePKInfo() { winRateText.text = StringUtility.Contact(crossServerModel.curWinRate,"%"); sumNumText.text = crossServerModel.sumBattleNum.ToString(); winRateText.text = CrossServerPlayerInfo.Instance.DisplayWinningRate(); sumNumText.text = CrossServerPlayerInfo.Instance.PKCount.ToString(); } private void UpdateActivityState() @@ -108,7 +109,7 @@ private void ClickBuyTimes() { int remainNum = crossServerModel.alreadyBuyNum + crossServerModel.freeMaxMatchNum - crossServerModel.dayMatchNum; int remainNum = CrossServerPlayerInfo.Instance.GetDayRemainNum(); if (remainNum >= crossServerModel.freeMaxMatchNum) return; WindowCenter.Instance.Open<CrossSeverBuyMatchTimesWin>(); System/CrossServerOneVsOne/CrossServerModel.cs
@@ -12,7 +12,7 @@ public class CrossServerModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk { public string PkResultLocalSaveKey { get; private set; } public List<PkResultInfo> localSaveResults { get; private set; } public List<CrossServerPkResult> localSaveResults { get; private set; } public override void Init() { @@ -43,41 +43,8 @@ private void InitData() { curWinRate = 0; sumBattleNum = 0; dayMatchNum = 0; alreadyBuyNum = 0; pkResultInfo = new PkResultInfo(); } public bool TryGetMaxRank(out int upScore) { upScore = 0; if (pkResultInfo == null) return false; var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(pkResultInfo.DanLV); if(arenaConfig != null) { upScore = arenaConfig.LVUpScore; } return upScore == 0; } public int GetBuyMatchNumPrice() { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("buyCnt",alreadyBuyNum); return Equation.Instance.Eval<int>(priceFormula); } public bool TryGetWinStreakScore(out int score) { score = 0; if (pkResultInfo.WinStreak < 2) return false; Equation.Instance.Clear(); Equation.Instance.AddKeyValue("cWinCount",pkResultInfo.WinStreak); score = Equation.Instance.Eval<int>(winStreakScoreFormula); return true; CrossServerPlayerInfo.Instance.InitData(); pkResultInfo = new CrossServerPkResult(); } public List<AwardType> sortDayAwardslist = new List<AwardType>(); @@ -234,88 +201,17 @@ #endregion #region 协议 public int curWinRate { get; private set; } //当前胜率 public int sumBattleNum { get; private set; } //对战总场数 public int dayMatchNum { get; private set; } //今日匹配次数 public int alreadyBuyNum { get; private set;} //今日购买匹配次数 public PkResultInfo pkResultInfo { get; private set;} public CrossServerPkResult pkResultInfo { get; private set;} public event Action UpdatePkResultEvent; public void UpdatePKResultInfo(HC003_tagGCCrossRealmPKOverInfo pKOverInfo) { pkResultInfo = new PkResultInfo(); pkResultInfo.PkEndTime = pKOverInfo.TimeStr; pkResultInfo.OverType = pKOverInfo.OverType; pkResultInfo.WinnerID = (int)pKOverInfo.WinnerID; pkResultInfo.RoundCount = pKOverInfo.RoundCount; pkResultInfo.RoundWinnerIDs = pKOverInfo.RoundWinnerID; pkResultInfo.AddScore = pKOverInfo.AddScore; pkResultInfo.CurScore = pKOverInfo.Score; pkResultInfo.DanLV = pKOverInfo.DanLV; pkResultInfo.WinStreak = pKOverInfo.CWinCnt; pkResultInfo.VsPlayerName = pKOverInfo.TagName; pkResultInfo = new CrossServerPkResult(); pkResultInfo.UpdatePkResult(pKOverInfo); SetPkInfoLocalSave(pkResultInfo); if(UpdatePkResultEvent != null) { UpdatePkResultEvent(); } } public class PkResultInfo { public string PkEndTime; // 结算时间,格式 yyyy-MM-dd HH:mm:ss public int OverType; // 0-正常,1-有人离线 public int WinnerID; // 胜方ID(本次战斗结束,不是回合结束) public int RoundCount; // PK回合数 public uint[] RoundWinnerIDs; // 回合获胜ID列表 public int AddScore; // 本场加分 public int CurScore; // 当前积分 public int DanLV; // 当前段位 public int WinStreak; // 当前连胜数 public string VsPlayerName; //对手名字 } public void GetWinAndFailNum(out int winNum,out int failNum) { winNum = 0; failNum = 0; int playerId = (int)PlayerDatas.Instance.baseData.PlayerID; for(int i = 0; i < pkResultInfo.RoundCount; i++) { var winnerId = pkResultInfo.RoundWinnerIDs[i]; if(winnerId == playerId) { winNum += 1; } else { failNum += 1; } } } /// <summary> /// 1 自己离线 2 对手离线 /// </summary> /// <param name="type"></param> /// <returns></returns> public bool TryGetOffLine(out int type) { type = 0; int playerId = (int)PlayerDatas.Instance.baseData.PlayerID; if(pkResultInfo.OverType != 0) { type = playerId == pkResultInfo.WinnerID ? 2 : 1; } return pkResultInfo.OverType != 0; } /// <summary> @@ -334,19 +230,19 @@ private void GetLocalSaveData() { localSaveResults = new List<PkResultInfo>(); localSaveResults = new List<CrossServerPkResult>(); string[] localJsons = LocalSave.GeStringArray(PkResultLocalSaveKey); if(localJsons != null) { for(int i = 0; i < localJsons.Length; i++) { PkResultInfo resultInfo = JsonMapper.ToObject<PkResultInfo>(localJsons[i]); CrossServerPkResult resultInfo = JsonMapper.ToObject<CrossServerPkResult>(localJsons[i]); localSaveResults.Add(resultInfo); } } } public void SetPkInfoLocalSave(PkResultInfo resultInfo) public void SetPkInfoLocalSave(CrossServerPkResult resultInfo) { if (localSaveResults.Count >= 30) { System/CrossServerOneVsOne/CrossServerPKSeason.cs
New file @@ -0,0 +1,145 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Snxxz.UI { public class CrossServerPKSeason : Singleton<CrossServerPKSeason> { public int ZoneCount { get; private set;} // 所有赛区个数 public byte[] ZoneIDList { get; private set; } // 所有赛区列表 public int ZoneID { get; private set; } // 所属赛区ID public int SeasonID { get; private set; } // 当前赛季ID public OperationDate StartDate { get; private set; } // 开始日期 yyyy-MM-dd public OperationDate EndDate { get; private set; } // 结束日期 yyyy-MM-dd public string EndTime { get; private set; } // 赛季结算时间,赛季奖励该时间后才可领取 hh:mm public OperationDate NextStartDate { get; private set; } // 下赛季开始日期 yyyy-MM-dd public OperationDate NextEndDate { get; private set; } // 下赛季结束日期 yyyy-MM-dd public event Action activityStartEvent; public event Action activityEndEvent; private bool inDateNotify = false; private bool stepDateNotify = false; public CrossServerPKSeason() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; GlobalTimeEvent.Instance.secondEvent += SecondEvent; } private void BeforePlayerDataInitializeEvent() { } private void SecondEvent() { if(!inDateNotify && InDay(TimeUtility.ServerNow)) { inDateNotify = true; stepDateNotify = false; if(activityStartEvent != null) { activityStartEvent(); } } else if(!stepDateNotify && !InDay(TimeUtility.ServerNow)) { inDateNotify = false; stepDateNotify = true; if(activityEndEvent != null) { activityEndEvent(); } } } public void UpdatePkSeason(HC004_tagGCCrossRealmPKSeason pkSeason) { inDateNotify = false; stepDateNotify = false; this.ZoneCount = pkSeason.ZoneCount; this.ZoneIDList = pkSeason.ZoneIDList; this.ZoneID = pkSeason.ZoneID; this.SeasonID = pkSeason.SeasonID; this.StartDate = ParseOperationDate(pkSeason.StartDate); this.EndDate = ParseOperationDate(pkSeason.EndDate); this.EndTime = pkSeason.EndTime; this.NextStartDate = ParseOperationDate(pkSeason.NextStartDate); this.NextEndDate = ParseOperationDate(pkSeason.NextEndDate); } public bool InDay(DateTime time) { OperationDate date = new OperationDate() { year = time.Year, month = time.Month, day = time.Day, }; return date >= StartDate && date <= EndDate; } public int IndexOfDays(DateTime time) { if (!InDay(time)) { return -1; } DateTime s = new DateTime(StartDate.year, StartDate.month, StartDate.day); return (time - s).Days; } public string ToDisplaySeasonTime() { if(InDay(TimeUtility.ServerNow)) { return ToDisplayTime(StartDate,EndDate); } else { if(NextStartDate.Equals(default(OperationDate))) { return "敬请期待"; } else { return ToDisplayTime(NextStartDate,NextEndDate); } } } private string ToDisplayTime(OperationDate start,OperationDate end) { if(start != end) { return StringUtility.Contact(start.ToDisplay(),"-",end.ToDisplay()); } return start.ToDisplay(); } OperationDate ParseOperationDate(string date) { string[] dateArray = date.Split('-'); if (dateArray != null && dateArray.Length == 3) { return new OperationDate() { year = int.Parse(dateArray[0].Trim()), month = int.Parse(dateArray[1].Trim()), day = int.Parse(dateArray[2].Trim()) }; } return default(OperationDate); } } } System/CrossServerOneVsOne/CrossServerPKSeason.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 928bbb81d6dba30429c81415d441eab9 timeCreated: 1545274644 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/CrossServerOneVsOne/CrossServerPkResult.cs
New file @@ -0,0 +1,97 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Snxxz.UI { public class CrossServerPkResult { public string PkEndTime { get; private set; } // 结算时间,格式 yyyy-MM-dd HH:mm:ss public int OverType { get; private set; } // 0-正常,1-有人离线 public int WinnerID { get; private set; } // 胜方ID(本次战斗结束,不是回合结束) public int RoundCount { get; private set; } // PK回合数 public uint[] RoundWinnerIDs { get; private set; } // 回合获胜ID列表 public int AddScore { get; private set; } // 本场加分 public int CurScore { get; private set; } // 当前积分 public int DanLV { get; private set; } // 当前段位 public int WinStreak { get; private set; } // 当前连胜数 public string VsPlayerName { get; private set; } //对手名字 CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } } public void UpdatePkResult(HC003_tagGCCrossRealmPKOverInfo pKOverInfo) { this.PkEndTime = pKOverInfo.TimeStr; this.OverType = pKOverInfo.OverType; this.WinnerID = (int)pKOverInfo.WinnerID; this.RoundCount = pKOverInfo.RoundCount; this.RoundWinnerIDs = pKOverInfo.RoundWinnerID; this.AddScore = pKOverInfo.AddScore; this.CurScore = pKOverInfo.Score; this.DanLV = pKOverInfo.DanLV; this.WinStreak = pKOverInfo.CWinCnt; this.VsPlayerName = pKOverInfo.TagName; } public void GetWinAndFailNum(out int winNum, out int failNum) { winNum = 0; failNum = 0; int playerId = (int)PlayerDatas.Instance.baseData.PlayerID; for (int i = 0; i < RoundCount; i++) { var winnerId = RoundWinnerIDs[i]; if (winnerId == playerId) { winNum += 1; } else { failNum += 1; } } } /// <summary> /// 1 自己离线 2 对手离线 /// </summary> /// <param name="type"></param> /// <returns></returns> public bool TryGetOffLine(out int type) { type = 0; int playerId = (int)PlayerDatas.Instance.baseData.PlayerID; if (OverType != 0) { type = playerId == WinnerID ? 2 : 1; } return OverType != 0; } /// <summary> /// 获取连胜积分 /// </summary> /// <param name="score"></param> /// <returns></returns> public bool TryGetWinStreakScore(out int score) { score = 0; if (WinStreak < 2) return false; Equation.Instance.Clear(); Equation.Instance.AddKeyValue("cWinCount",WinStreak); score = Equation.Instance.Eval<int>(crossServerModel.winStreakScoreFormula); return true; } } } System/CrossServerOneVsOne/CrossServerPkResult.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 3671aeddaf339284da02fea96852c028 timeCreated: 1545275649 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/CrossServerOneVsOne/CrossServerPlayerInfo.cs
New file @@ -0,0 +1,84 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using TableConfig; namespace Snxxz.UI { public class CrossServerPlayerInfo : Singleton<CrossServerPlayerInfo> { public int Score { get; private set; } // 当前积分 public int DanLV { get; private set; } // 当前段位 public int PKCount { get; private set; } // PK次数 public int WinCount { get; private set; } // 胜利次数 public int CWinCount { get; private set; } // 连胜次数 public int DayPKCount { get; private set; } // 当日已PK次数 public int DayBuyCount { get; private set; } // 当日已购买次数 CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } } public void InitData() { Score = 0; DanLV = 0; PKCount = 0; WinCount = 0; CWinCount = 0; DayPKCount = 0; DayBuyCount = 0; } public void UpdatePlayerInfo(HC101_tagMCCrossRealmPKPlayerInfo playerInfo) { this.Score = (int)playerInfo.Score; this.DanLV = playerInfo.DanLV; this.PKCount = playerInfo.PKCount; this.WinCount = playerInfo.WinCount; this.CWinCount = playerInfo.CWinCount; this.DayPKCount = playerInfo.DayPKCount; this.DayBuyCount = playerInfo.DayBuyCount; } public bool TryGetMaxRank(out int upScore) { upScore = 0; var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(DanLV); if (arenaConfig != null) { upScore = arenaConfig.LVUpScore; } return upScore == 0; } public int GetBuyMatchNumPrice() { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("buyCnt",DayBuyCount); return Equation.Instance.Eval<int>(crossServerModel.priceFormula); } public int GetDayRemainNum() { return DayBuyCount + crossServerModel.freeMaxMatchNum - DayPKCount; } public int GetDayRemainBuyNum() { return crossServerModel.buyMaxMatchNum - DayBuyCount; } public string DisplayWinningRate() { float rate = (float)WinCount / PKCount; return StringUtility.Contact((float)Math.Round(rate,1),"%"); } } } System/CrossServerOneVsOne/CrossServerPlayerInfo.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 2e6652bfe09218842a7a721dd9833bce timeCreated: 1545277165 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/CrossServerOneVsOne/CrossServerWin.cs
@@ -31,6 +31,7 @@ CrossServerRewardModel m_CrossServerRewardModel; CrossServerRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel<CrossServerRewardModel>()); } } CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } } CrossServerPlayerInfo playerInfo; #region Built-in protected override void BindController() { @@ -78,6 +79,7 @@ private void SetDisplay() { playerInfo = CrossServerPlayerInfo.Instance; var playerData = PlayerDatas.Instance.baseData; headImg.SetSprite(GeneralDefine.GetOtherJobHeadPortrait(playerData.Job, 0)); nameText.text = playerData.PlayerName; @@ -86,21 +88,21 @@ scoreSlider.maxValue = 1; UpdateScore(); var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(crossServerModel.pkResultInfo.DanLV); var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(playerInfo.DanLV); rankText.text = arenaConfig.Name; } private void UpdateScore() { curScoreText.text = crossServerModel.pkResultInfo.CurScore.ToString(); curScoreText.text = playerInfo.Score.ToString(); int maxScore = 0; bool isMaxRank = crossServerModel.TryGetMaxRank(out maxScore); bool isMaxRank = playerInfo.TryGetMaxRank(out maxScore); danLvUpObj.SetActive(!isMaxRank); if (!isMaxRank) { scorePerText.text = StringUtility.Contact(crossServerModel.pkResultInfo.CurScore, "/", maxScore); scoreSlider.value = (float)crossServerModel.pkResultInfo.CurScore / maxScore; scorePerText.text = StringUtility.Contact(playerInfo.Score, "/", maxScore); scoreSlider.value = (float)playerInfo.Score / maxScore; } } System/CrossServerOneVsOne/CrossSeverBuyMatchTimesWin.cs
@@ -46,8 +46,8 @@ private void SetDisplay() { int remainBuyTimes = crossServerModel.buyMaxMatchNum - crossServerModel.alreadyBuyNum; price = (ulong)crossServerModel.GetBuyMatchNumPrice(); int remainBuyTimes = CrossServerPlayerInfo.Instance.GetDayRemainBuyNum(); price = (ulong)CrossServerPlayerInfo.Instance.GetBuyMatchNumPrice(); m_CostRemind.text = Language.Get("TimesBuyLanguage3",price); m_ContainerBuylimit.gameObject.SetActive(remainBuyTimes <= 0); m_BuyTimes.gameObject.SetActive(remainBuyTimes > 0);