Core/GameEngine/Model/Config/CrossServerArenaConfig.cs
New file @@ -0,0 +1,50 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, December 12, 2018 //-------------------------------------------------------- using UnityEngine; using System; namespace TableConfig { public partial class CrossServerArenaConfig : ConfigBase { public int DanLV { get ; private set ; } public string Name { get ; private set; } public int LVUpScore { get ; private set ; } public string DayAwardList { get ; private set; } public string SeasonAwardList { get ; private set; } public override string getKey() { return DanLV.ToString(); } public override void Parse() { try { DanLV=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; Name = rawContents[1].Trim(); LVUpScore=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; DayAwardList = rawContents[3].Trim(); SeasonAwardList = rawContents[4].Trim(); } catch (Exception ex) { DebugEx.Log(ex); } } } } Core/GameEngine/Model/Config/CrossServerArenaConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: f10a2faba8659904ab5c13d1a770a7e2 timeCreated: 1544607874 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/GameEngine/Model/ConfigManager.cs
@@ -213,6 +213,7 @@ AddAsyncTask<DungeonHelpBattleConfig>(); AddAsyncTask<FuncSwitchConfig>(); AddAsyncTask<AncientRobotNameConfig>(); AddAsyncTask<CrossServerArenaConfig>(); while (!AllCompleted()) { System/CrossServerOneVsOne/CrossServerDayAwardsWin.cs
@@ -13,11 +13,10 @@ [SerializeField] ScrollerController achieveCtrl; [SerializeField] Button closeBtn; HeavenBattleModel battleModel { get { return ModelCenter.Instance.GetModel<HeavenBattleModel>(); } } List<XMZZAchievementConfig> achievelist; CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } } protected override void BindController() { achieveCtrl.OnRefreshCell += RefreshAchieveCell; achieveCtrl.lockType = EnhanceLockType.KeepVertical; } @@ -28,7 +27,6 @@ protected override void OnPreOpen() { battleModel.AchieveModel.achievementCompletedEvent += RefreshComplete; CreateCell(); } @@ -40,7 +38,7 @@ protected override void OnPreClose() { battleModel.AchieveModel.achievementCompletedEvent -= RefreshComplete; } protected override void OnAfterClose() @@ -48,56 +46,15 @@ } private void RefreshComplete(int id) { if (achievelist != null) { for (int i = 0; i < achievelist.Count; i++) { if (achievelist[i].AchieveID.Contains(id)) { achievelist = battleModel.GetAchievelist(); CreateCell(); } } } } private void CreateCell() { achievelist = battleModel.GetAchievelist(); achieveCtrl.Refresh(); int i = 0; for (i = 0; i < achievelist.Count; i++) var dayAwards = crossServerModel.dayAwardTypelist; for(int i = 0; i < dayAwards.Count; i++) { Achievement achieve = null; battleModel.SetAchievement(achievelist[i].AchieveID, out achieve); if(achieve != null) { if(!achieve.completed) { achieveCtrl.AddCell(ScrollerDataType.Header,achieve.id); } else { achieveCtrl.AddCell(ScrollerDataType.Normal,achieve.id); } } achieveCtrl.AddCell(ScrollerDataType.Header,i); } achieveCtrl.Restart(); } private void RefreshAchieveCell(ScrollerDataType type, CellView cell) { switch (type) { case ScrollerDataType.Header: XMZZAchieveCell achieveCell = cell.GetComponent<XMZZAchieveCell>(); achieveCell.Init(cell.index); break; } } } } System/CrossServerOneVsOne/CrossServerModel.cs
@@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; using TableConfig; using LitJson; namespace Snxxz.UI { @@ -11,7 +13,7 @@ { public override void Init() { ParseFuncConfig(); } public void OnBeforePlayerDataInitialize() @@ -34,14 +36,106 @@ } public int GetMaxUpgradeScore() public bool TryGetMaxRank(out int upScore) { return 0; var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(curRank); upScore = arenaConfig.LVUpScore; return upScore == 0; } #region 表数据 public int dayMaxMatchNum { get; private set; } //匹配次数上限 public int dayMaxScore { get; private set; } //今日积分上限 public List<AwardType> dayAwardTypelist { get; private set; } private void ParseFuncConfig() { var CrossRealmPKAward = Config.Instance.Get<FuncConfigConfig>("CrossRealmPKAward"); var dayMatchAwardData = JsonMapper.ToObject(CrossRealmPKAward.Numerical1); var dayWinAwardData = JsonMapper.ToObject(CrossRealmPKAward.Numerical2); dayAwardTypelist = new List<AwardType>(); foreach (var num in dayWinAwardData.Keys) { int times = int.Parse(num); var items = dayWinAwardData[num]; var awardType = new AwardType(times,1); dayAwardTypelist.Add(awardType); if (items.IsArray) { for(int i = 0; i < items.Count; i++) { var itemInfo = items[i]; if(itemInfo.IsArray && itemInfo.Count >= 3) { int id = 0; int.TryParse(itemInfo[0].ToString(), out id); int count = 0; int.TryParse(itemInfo[1].ToString(), out count); int isBind = 0; int.TryParse(itemInfo[2].ToString(), out isBind); AwardItem awardItem = new AwardItem(id, count, isBind); awardType.SetAwardItems(awardItem); } } } } foreach (var num in dayMatchAwardData.Keys) { int times = int.Parse(num); var items = dayMatchAwardData[num]; var awardType = new AwardType(times,2); dayAwardTypelist.Add(awardType); if (items.IsArray) { for(int i = 0;i < items.Count; i++) { var itemInfo = items[i]; if (itemInfo.IsArray && itemInfo.Count >= 3) { int id = 0; int.TryParse(itemInfo[0].ToString(), out id); int count = 0; int.TryParse(itemInfo[1].ToString(), out count); int isBind = 0; int.TryParse(itemInfo[2].ToString(), out isBind); AwardItem awardItem = new AwardItem(id, count, isBind); awardType.SetAwardItems(awardItem); } } } } } public class AwardType { public int type; //1 胜利奖励 2 匹配奖励 public int num { get; private set;} public List<AwardItem> awardItems = new List<AwardItem>(); public AwardType(int _num,int _type) { type = _type; num = _num; awardItems.Clear(); } public void SetAwardItems(AwardItem awardItem) { awardItems.Add(awardItem); } } public struct AwardItem { public int itemId; public int itemCount; public int isBind; public AwardItem(int _id,int _count,int _isBind) { itemId = _id; itemCount = _count; isBind = _isBind; } } #endregion #region 协议 @@ -54,7 +148,6 @@ public int dayMatchNum { get; private set; } //今日匹配次数 public int dayGetScore { get; private set; } //今日获取积分 #endregion } } System/CrossServerOneVsOne/CrossServerRewardModel.cs
New file @@ -0,0 +1,79 @@ //-------------------------------------------------------- // [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<Item_Class> ItemList; } public class CrossServerRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public Dictionary<int, SeasonAwardClass> SegmentRewardDic = new Dictionary<int, SeasonAwardClass>(); public override void Init() { GetSeasonAward(); } public void OnBeforePlayerDataInitialize() { } public void OnPlayerLoginOk() { } public override void UnInit() { } private void GetSeasonAward() { var config = Config.Instance.GetAllValues<CrossServerArenaConfig>(); 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<Item_Class> itemClassList = new List<Item_Class>(); 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); } } } } System/CrossServerOneVsOne/CrossServerRewardModel.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: aec18b1416fdc814c8a431de7f644a16 timeCreated: 1544602152 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/CrossServerOneVsOne/CrossServerWin.cs
@@ -1,6 +1,7 @@ using System; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { @@ -82,14 +83,22 @@ scoreSlider.minValue = 0; scoreSlider.maxValue = 1; UpdateScore(); var arenaConfig = Config.Instance.Get<CrossServerArenaConfig>(crossServerModel.curRank); rankText.text = arenaConfig.Name; } private void UpdateScore() { curScoreText.text = crossServerModel.curScore.ToString(); int maxScore = crossServerModel.GetMaxUpgradeScore(); scorePerText.text = StringUtility.Contact(crossServerModel.curScore, "/", maxScore); scoreSlider.value = (float)crossServerModel.curScore/maxScore; int maxScore = 0; bool isMaxRank = crossServerModel.TryGetMaxRank(out maxScore); if(!isMaxRank) { scorePerText.text = StringUtility.Contact(crossServerModel.curScore, "/", maxScore); scoreSlider.value = (float)crossServerModel.curScore / maxScore; } } #region 点击事件 System/CrossServerOneVsOne/CrossSeverDayAwardCell.cs
New file @@ -0,0 +1,58 @@ using UnityEngine; using UnityEngine.UI; using EnhancedUI.EnhancedScroller; using System.Collections.Generic; using System; namespace Snxxz.UI { public class CrossSeverDayAwardCell : ScrollerUI { [SerializeField] Text taskNameText; [SerializeField] Slider progressSlider; [SerializeField] Text progressText; [SerializeField] Button recieveBtn; [SerializeField] Image stateImg; [SerializeField] List<CommonItemBaisc> itemBaiscs = new List<CommonItemBaisc>(); CrossServerModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerModel>(); } } ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } } CrossServerModel.AwardType awardType; private void Awake() { recieveBtn.AddListener(ClickRecieve); } public override void Refresh(CellView cell) { awardType = null; if (cell.index >= crossServerModel.dayAwardTypelist.Count) return; awardType = crossServerModel.dayAwardTypelist[cell.index]; var awardItems = awardType.awardItems; for(int i = 0; i < itemBaiscs.Count; i++) { var itemBasic = itemBaiscs[i]; itemBasic.gameObject.SetActive(i < awardItems.Count); if(i < awardItems.Count) { var awardItem = awardItems[i]; ItemCellModel cellModel = new ItemCellModel(awardItem.itemId,true,(ulong)awardItem.itemCount,awardItem.isBind); itemBasic.Init(cellModel); itemBasic.cellBtn.RemoveAllListeners(); itemBasic.cellBtn.AddListener(()=> { ItemAttrData attrData = new ItemAttrData(awardItem.itemId,true,(ulong)awardItem.itemCount,-1,awardItem.isBind); tipsModel.SetItemTipsModel(attrData); }); } } } private void ClickRecieve() { if (awardType == null) return; } } } System/CrossServerOneVsOne/CrossSeverDayAwardCell.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 743cd652c9d18fe4d804d8b81724dbbf timeCreated: 1544597776 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/CrossServerOneVsOne/SegmentRewardCell.cs
@@ -19,7 +19,9 @@ [SerializeField] GameObject m_IsReachImage;//未达成 [SerializeField] GameObject m_IsMissImage;//已错过 ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel<ItemTipsModel>()); } } ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel<ItemTipsModel>()); } } CrossServerRewardModel m_CrossServerRewardModel; CrossServerRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel<CrossServerRewardModel>()); } } public Button ReceiveBtn { get { return m_ReceiveBtn; } @@ -28,24 +30,32 @@ } public void SetReceive(int id) { ReceiveItem(id); if (crossServerRewardModel.SegmentRewardDic.ContainsKey(id)) { var dic = crossServerRewardModel.SegmentRewardDic[id]; m_Text_Segment.text = dic.Name; m_Text_Number.text = dic.Score.ToString(); ReceiveItem(id); } } private void ReceiveItem(int Id) { int type = 3; var dic = crossServerRewardModel.SegmentRewardDic[Id]; for (int i = 0; i < m_Itemlist.childCount; i++) { GameObject ObjChild = m_Itemlist.GetChild(i).gameObject; if (i < type) if (i < dic.ItemList.Count) { ObjChild.SetActive(true); Item_Class itemClass = dic.ItemList[i]; ItemCell _ItemCell = ObjChild.GetComponent<ItemCell>(); ItemCellModel cellModel = new ItemCellModel(191, true, (ulong)1); ItemCellModel cellModel = new ItemCellModel(itemClass.ItemId, true, (ulong)itemClass.ItemNumber, itemClass.Isbind); _ItemCell.Init(cellModel); _ItemCell.cellBtn.SetListener(() => { ItemAttrData attrData = new ItemAttrData(191, false, (ulong)1); ItemAttrData attrData = new ItemAttrData(itemClass.ItemId, false, (ulong)itemClass.ItemNumber,-1, itemClass.Isbind); itemTipsModel.SetItemTipsModel(attrData); }); } System/CrossServerOneVsOne/SegmentRewardWin.cs
@@ -16,7 +16,9 @@ [XLua.Hotfix] public class SegmentRewardWin : Window { [SerializeField] ScrollerController m_ScrollerController; [SerializeField] ScrollerController m_ScrollerController; CrossServerRewardModel m_CrossServerRewardModel; CrossServerRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel<CrossServerRewardModel>()); } } #region Built-in protected override void BindController() { @@ -47,9 +49,9 @@ void OnCreateGridLineCell(ScrollerController gridCtrl) { gridCtrl.Refresh(); for (int i = 0; i < 10; i++) foreach (var key in crossServerRewardModel.SegmentRewardDic.Keys) { gridCtrl.AddCell(ScrollerDataType.Header, i); gridCtrl.AddCell(ScrollerDataType.Header, key); } gridCtrl.Restart(); } System/WindowBase/ModelCenter.cs
@@ -211,6 +211,8 @@ RegisterModel<DungeonAssistModel>(); RegisterModel<MysticalPurchaseModel>(); RegisterModel<FuncSwitchModel>(); RegisterModel<CrossServerModel>(); RegisterModel<CrossServerRewardModel>(); inited = true; }