少年修仙传客户端代码仓库
Client_PangDeRong
2018-12-19 c8a1770aae86bf00ebfdc89734e3d55866e0476b
5398  【前端】【1.4】跨服竞技场开发
3个文件已修改
4个文件已添加
237 ■■■■■ 已修改文件
System/CrossServerOneVsOne/CrossMatchRecordWin.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossMatchRecordWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossMatchResultCell.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossMatchResultCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerArenaWin.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerModel.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerWin.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossMatchRecordWin.cs
New file
@@ -0,0 +1,59 @@
using System;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class CrossMatchRecordWin : Window
    {
        [SerializeField] ScrollerController resultCtrl;
        [SerializeField] Button closeBtn;
        CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            closeBtn.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            SetDisplay();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void SetDisplay()
        {
            UpdateResultCell();
        }
        private void UpdateResultCell()
        {
            var results = crossServerModel.localSaveResults;
            resultCtrl.Refresh();
            for(int i = 0; i < results.Count; i++)
            {
                resultCtrl.AddCell(ScrollerDataType.Header,i);
            }
            resultCtrl.Restart();
        }
    }
}
System/CrossServerOneVsOne/CrossMatchRecordWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: df6eb0062ff2c524aa564a542bf94e39
timeCreated: 1545199685
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/CrossServerOneVsOne/CrossMatchResultCell.cs
New file
@@ -0,0 +1,66 @@
using System;
using UnityEngine;
using UnityEngine.UI;
using EnhancedUI.EnhancedScroller;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class CrossMatchResultCell : ScrollerUI
    {
        [SerializeField] Text dateTime;
        [SerializeField] Text info;
        [SerializeField] Image resultImg;
        CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } }
        public override void Refresh(CellView cell)
        {
            var results = crossServerModel.localSaveResults;
            var resultInfo = results[cell.index];
            dateTime.text = resultInfo.PkEndTime;
            int offlineType = 0;
            bool isOffline = crossServerModel.TryGetOffLine(out offlineType);
            int winStreakScore = 0;
            bool isWinStreak = crossServerModel.TryGetWinStreakScore(out winStreakScore);
            if(isOffline)
            {
              switch(offlineType)
                {
                    case 1:
                        info.text = Language.Get("CrossServer105", resultInfo.VsPlayerName, resultInfo.AddScore);
                        break;
                    case 2:
                        if(isWinStreak)
                        {
                            info.text = Language.Get("CrossServer104", resultInfo.VsPlayerName, resultInfo.AddScore,
                                resultInfo.WinStreak,winStreakScore);
                        }
                        else
                        {
                            info.text = Language.Get("CrossServer103",resultInfo.VsPlayerName,resultInfo.AddScore);
                        }
                        break;
                }
            }
            else
            {
                int winNum = 0;
                int failNum = 0;
                crossServerModel.GetWinAndFailNum(out winNum,out failNum);
                string compareScore = StringUtility.Contact(winNum,":",failNum);
                if (isWinStreak)
                {
                    info.text = Language.Get("CrossServer102", resultInfo.VsPlayerName,compareScore,resultInfo.AddScore,
                        resultInfo.WinStreak, winStreakScore);
                }
                else
                {
                    info.text = Language.Get("CrossServer101", resultInfo.VsPlayerName,compareScore,resultInfo.AddScore);
                }
            }
            bool isWinner = PlayerDatas.Instance.baseData.PlayerID == resultInfo.WinnerID ? true : false;
            resultImg.SetSprite(isWinner ? "" : "");
        }
    }
}
System/CrossServerOneVsOne/CrossMatchResultCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0cfdcd65f265117449df8b7ebdadb182
timeCreated: 1545200173
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/CrossServerOneVsOne/CrossServerArenaWin.cs
@@ -17,7 +17,7 @@
        [SerializeField] Text seasonTimeText;
        [SerializeField] Text openTimeText;
        [SerializeField] Button buyTimesBtn;
        [SerializeField] Button matchRecordBtn;
        CrossServerRewardModel m_CrossServerRewardModel;
        CrossServerRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel<CrossServerRewardModel>()); } }
        CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } }
@@ -31,6 +31,7 @@
            dayAwardBtn.AddListener(ClickDayAward);
            matchBtn.AddListener(ClickMatch);
            buyTimesBtn.AddListener(ClickBuyTimes);
            matchRecordBtn.AddListener(ClickMatchRecord);
        }
        protected override void OnPreOpen()
@@ -105,7 +106,6 @@
        }
        private void ClickBuyTimes()
        {
            int remainNum = crossServerModel.alreadyBuyNum + crossServerModel.freeMaxMatchNum - crossServerModel.dayMatchNum;
@@ -128,5 +128,10 @@
            WindowCenter.Instance.Open<MatchWin>();
        }
        private void ClickMatchRecord()
        {
            WindowCenter.Instance.Open<CrossMatchRecordWin>();
        }
    }
}
System/CrossServerOneVsOne/CrossServerModel.cs
@@ -11,6 +11,9 @@
    [XLua.LuaCallCSharp]
    public class CrossServerModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk
    {
        public string PkResultLocalSaveKey { get; private set; }
        public List<PkResultInfo> localSaveResults { get; private set; }
        public override void Init()
        {
            ParseFuncConfig();
@@ -23,7 +26,9 @@
        public void OnAfterPlayerDataInitialize()
        {
            int playerId = (int)PlayerDatas.Instance.baseData.PlayerID;
            PkResultLocalSaveKey = StringUtility.Contact("PkResultLocalSaveKey", playerId);
            GetLocalSaveData();
        }
        public void OnPlayerLoginOk()
@@ -64,6 +69,17 @@
            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;
        }
        public List<AwardType> sortDayAwardslist = new List<AwardType>();
        public void SortDayAwardsList()
        {
@@ -89,6 +105,7 @@
        public int freeMaxMatchNum { get; private set; } //每日免费匹配次数
        public int buyMaxMatchNum { get; private set; } //每日可购买次数
        public string priceFormula { get;private set;} //购买匹配次数需要价格公式
        public string winStreakScoreFormula { get; private set; } //连胜积分公式
        public List<AwardType> dayAwardTypelist { get; private set; }
        private void ParseFuncConfig()
        {
@@ -152,6 +169,9 @@
            freeMaxMatchNum = int.Parse(CrossRealmPKMatchCount.Numerical1);
            buyMaxMatchNum = int.Parse(CrossRealmPKMatchCount.Numerical2);
            priceFormula = CrossRealmPKMatchCount.Numerical3;
            var CrossRealmPKScore = Config.Instance.Get<FuncConfigConfig>("CrossRealmPKScore");
            winStreakScoreFormula = CrossRealmPKScore.Numerical3;
        }
        public class AwardType
@@ -222,6 +242,7 @@
        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;
@@ -232,6 +253,7 @@
            pkResultInfo.DanLV = pKOverInfo.DanLV;
            pkResultInfo.WinStreak = pKOverInfo.CWinCnt;
            pkResultInfo.VsPlayerName = pKOverInfo.TagName;
            SetPkInfoLocalSave(pkResultInfo);
            if(UpdatePkResultEvent != null)
            {
                UpdatePkResultEvent();
@@ -244,7 +266,7 @@
            public int OverType;    // 0-正常,1-有人离线
            public int WinnerID;    // 胜方ID
            public int WinnerID;    // 胜方ID(本次战斗结束,不是回合结束)
            public int RoundCount;    // PK回合数
@@ -281,6 +303,22 @@
        }
        /// <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>
        ///0-取消匹配; 1-进行匹配
        /// </summary>
        /// <param name="type"></param>
@@ -291,6 +329,41 @@
            GameNetSystem.Instance.SendInfo(match);
        }
        #endregion
        #region 匹配记录
        private void GetLocalSaveData()
        {
            localSaveResults = new List<PkResultInfo>();
            string[] localJsons = LocalSave.GeStringArray(PkResultLocalSaveKey);
            if(localJsons != null)
            {
                for(int i = 0; i < localJsons.Length; i++)
                {
                    PkResultInfo resultInfo = JsonMapper.ToObject<PkResultInfo>(localJsons[i]);
                    localSaveResults.Add(resultInfo);
                }
            }
        }
        public void SetPkInfoLocalSave(PkResultInfo resultInfo)
        {
            if (localSaveResults.Count >= 30)
            {
                localSaveResults.RemoveAt(localSaveResults.Count - 1);
            }
            localSaveResults.Insert(0,resultInfo);
            string[] localJsons = new string[localSaveResults.Count];
            for(int i = 0; i < localJsons.Length; i++)
            {
                string json = JsonMapper.ToJson(localSaveResults[i]);
                localJsons[i] = json;
            }
            LocalSave.SetStringArray(PkResultLocalSaveKey,localJsons);
        }
        #endregion
        #region 红点
        #endregion
System/CrossServerOneVsOne/CrossServerWin.cs
@@ -22,6 +22,7 @@
        [SerializeField] Text honorText;
        [SerializeField] Slider scoreSlider;
        [SerializeField] Text scorePerText;
        [SerializeField] GameObject danLvUpObj;
        [SerializeField] Button scoreRankBtn;
        [SerializeField] Button rankAwardBtn;
        [SerializeField] Button arenaBtn;
@@ -95,6 +96,7 @@
            curScoreText.text = crossServerModel.pkResultInfo.CurScore.ToString();
            int maxScore = 0;
            bool isMaxRank = crossServerModel.TryGetMaxRank(out maxScore);
            danLvUpObj.SetActive(!isMaxRank);
            if (!isMaxRank)
            {
                scorePerText.text = StringUtility.Contact(crossServerModel.pkResultInfo.CurScore, "/", maxScore);