少年修仙传客户端代码仓库
Client_PangDeRong
2018-12-20 21bf9f76f0c9351450150551007038e2d35f93ea
5398 子 【开发】【1.4】跨服竞技场 / 【前端】【1.4】跨服竞技场开发
5个文件已修改
6个文件已添加
515 ■■■■ 已修改文件
System/CrossServerOneVsOne/CrossMatchResultCell.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerArenaWin.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerModel.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPKSeason.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPKSeason.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPkResult.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPkResult.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPlayerInfo.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerPlayerInfo.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerWin.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossSeverBuyMatchTimesWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | 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);