Core/GameEngine/Model/Config/FairyLeagueRankAwardConfig.cs
New file @@ -0,0 +1,209 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Tuesday, June 11, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class FairyLeagueRankAwardConfig { public readonly int ID; public readonly int WorldLV; public readonly int Rank; public readonly string RankAuctionItem; public FairyLeagueRankAwardConfig() { } public FairyLeagueRankAwardConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out ID); int.TryParse(tables[1],out WorldLV); int.TryParse(tables[2],out Rank); RankAuctionItem = tables[3]; } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, FairyLeagueRankAwardConfig> configs = new Dictionary<string, FairyLeagueRankAwardConfig>(); public static FairyLeagueRankAwardConfig Get(string id) { if (!inited) { Debug.Log("FairyLeagueRankAwardConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } FairyLeagueRankAwardConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new FairyLeagueRankAwardConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static FairyLeagueRankAwardConfig Get(int id) { return Get(id.ToString()); } public static List<string> GetKeys() { var keys = new List<string>(); keys.AddRange(configs.Keys); keys.AddRange(rawDatas.Keys); return keys; } public static List<FairyLeagueRankAwardConfig> GetValues() { var values = new List<FairyLeagueRankAwardConfig>(); values.AddRange(configs.Values); var keys = new List<string>(rawDatas.Keys); foreach (var key in keys) { values.Add(Get(key)); } return values; } public static bool Has(string id) { return configs.ContainsKey(id) || rawDatas.ContainsKey(id); } public static bool Has(int id) { return Has(id.ToString()); } public static bool inited { get; private set; } protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>(); public static void Init(bool sync=false) { inited = false; var path = string.Empty; if (AssetSource.refdataFromEditor) { path = ResourcesPath.CONFIG_FODLER +"/FairyLeagueRankAward.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/FairyLeagueRankAward.txt"); } configs.Clear(); var tempConfig = new FairyLeagueRankAwardConfig(); var preParse = tempConfig is IConfigPostProcess; if (sync) { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new FairyLeagueRankAwardConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; } else { ThreadPool.QueueUserWorkItem((object _object) => { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new FairyLeagueRankAwardConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } Core/GameEngine/Model/Config/FairyLeagueRankAwardConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 335b333a8860fe549ab2d38e0c451117 timeCreated: 1560231762 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Lua/Gen/SnxxzUIKingFairyModelWrap.cs
@@ -41,7 +41,6 @@ Utils.RegisterFunc(L, Utils.GETTER_IDX, "salaryAwardItems", _g_get_salaryAwardItems); Utils.RegisterFunc(L, Utils.GETTER_IDX, "privilegeItemId", _g_get_privilegeItemId); Utils.RegisterFunc(L, Utils.GETTER_IDX, "multipleWinAwardItems", _g_get_multipleWinAwardItems); Utils.RegisterFunc(L, Utils.GETTER_IDX, "multipleWinStartGet", _g_get_multipleWinStartGet); Utils.RegisterFunc(L, Utils.GETTER_IDX, "multipleWinIntervalGet", _g_get_multipleWinIntervalGet); Utils.RegisterFunc(L, Utils.GETTER_IDX, "multipleWinLimitCnt", _g_get_multipleWinLimitCnt); @@ -462,19 +461,6 @@ return 1; } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_multipleWinAwardItems(RealStatePtr L) { try { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); Snxxz.UI.KingFairyModel gen_to_be_invoked = (Snxxz.UI.KingFairyModel)translator.FastGetCSObj(L, 1); translator.Push(L, gen_to_be_invoked.multipleWinAwardItems); } catch(System.Exception gen_e) { return LuaAPI.luaL_error(L, "c# exception:" + gen_e); } return 1; } [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int _g_get_multipleWinStartGet(RealStatePtr L) System/FairyAu/FairyLeagueDungeonSettleWin.cs
@@ -22,14 +22,22 @@ [SerializeField, Header("联赛第一名Cell大小")] float m_FirstRankCellSize = 70; [SerializeField, Header("联赛其他名次Cell大小")] float m_NormalRankCellSize = 58; FairyLeagueModel m_FairyLeagueModel; FairyLeagueModel fairyLeagueModel [SerializeField] Transform m_ContainerFairyAward; [SerializeField] Transform m_ContainerRankAward; [SerializeField] ItemCell[] m_RankItems; [SerializeField] Transform m_ContainerWinStreakAward; [SerializeField] Text m_WinStreakType; [SerializeField] ItemCell[] m_WinStreakItems; FairyLeagueModel model { get { return m_FairyLeagueModel ?? (m_FairyLeagueModel = ModelCenter.Instance.GetModel<FairyLeagueModel>()); return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } } KingFairyModel kingFairyModel { get { return ModelCenter.Instance.GetModel<KingFairyModel>(); } } #region Built-in protected override void BindController() { } @@ -44,6 +52,7 @@ { base.OnPreOpen(); RefreshData(); DisplayFairyAwards(); } protected override void OnAfterOpen() @@ -65,11 +74,139 @@ base.OnActived(); } #endregion void DisplayFairyAwards() { var afterBattleRank = 0; var battleDatas = model.GetFairyLeague(model.fairyLeagueSession, model.fairyLeagueGroupId); var isWin = model.fairyLeagueWinFaction == PlayerDatas.Instance.baseData.faction; var isWinGroup = false; if (battleDatas.Count == 1) { isWinGroup = true; } else if (model.fairyLeagueSession == 1 && model.IsSessionOneWinGroup()) { isWinGroup = true; } if (battleDatas.Count == 1 || model.fairyLeagueSession == 1) { var start = (5 - model.fairyLeagueGroupId) % 5 * 4; switch (model.fairyLeagueGroupId) { case 5: if (isWinGroup) { afterBattleRank = isWin ? start + 1 : start + 2; } else { afterBattleRank = isWin ? start + 3 : start + 5; } break; case 4: case 3: case 2: case 1: if (isWinGroup) { afterBattleRank = isWin ? start : start + 2; } else { afterBattleRank = isWin ? start + 3 : start + 5; } break; } } m_ContainerRankAward.gameObject.SetActive(afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank); if (afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank) { var rankAwards = model.GetFairyLeagueRankReward(model.afterGroupWorldLevel, afterBattleRank); for (int i = 0; i < m_RankItems.Length; i++) { m_RankItems[i].gameObject.SetActive(i < rankAwards.Count); if (i < rankAwards.Count) { var item = rankAwards[i]; var itemData = new ItemCellModel(item.id, true, (ulong)item.count); m_RankItems[i].Init(itemData); m_RankItems[i].button.SetListener(() => { ItemTipUtility.Show(item.id); }); } } } var rewardIndex = -1; var isWinStreak = false; var winStreakTimes = 0; if (isWin && model.fairyLeagueGroupId == 5 && (battleDatas.Count == 1 || (model.fairyLeagueSession == 1 && model.fairyLeagueHelp.fairyWarEnter.IsFinalMatch == 1))) { var winStreakTimesArray = model.fairyLeagueHelp.fairyWarEnter.WinCount; winStreakTimes = winStreakTimesArray[0] > 0 ? winStreakTimesArray[0] : winStreakTimesArray[1]; if (winStreakTimes == 0) { isWinStreak = true; } else { var faction = Array.IndexOf(winStreakTimesArray, winStreakTimes) + 1; isWinStreak = PlayerDatas.Instance.baseData.faction == faction; } if (winStreakTimes + 1 == kingFairyModel.multipleWinStartGet) { var winStreakIndex = 0; rewardIndex = winStreakIndex % kingFairyModel.multipleWinRewards.Count; } else if (winStreakTimes + 1 > kingFairyModel.multipleWinStartGet && (winStreakTimes + 1 - kingFairyModel.multipleWinStartGet) % kingFairyModel.multipleWinIntervalGet == 0) { var winStreakIndex = (winStreakTimes + 1 - kingFairyModel.multipleWinStartGet) / kingFairyModel.multipleWinIntervalGet; rewardIndex = winStreakIndex % kingFairyModel.multipleWinRewards.Count; } } m_ContainerRankAward.gameObject.SetActive(rewardIndex != -1); if (rewardIndex != -1) { var awards = kingFairyModel.multipleWinRewards[rewardIndex]; for (int i = 0; i < m_WinStreakItems.Length; i++) { m_WinStreakItems[i].gameObject.SetActive(i < awards.Count); if (i < awards.Count) { var item = awards[i]; var itemData = new ItemCellModel(item.id, true, (ulong)item.count); m_WinStreakItems[i].Init(itemData); m_WinStreakItems[i].button.SetListener(() => { ItemTipUtility.Show(item.id); }); } } m_WinStreakType.text = isWinStreak ? string.Format("连胜{0}次奖励", winStreakTimes) : string.Format("终结{0}次奖励", winStreakTimes); } var hasFairyAward = (afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank) || rewardIndex != -1; m_ContainerFairyAward.gameObject.SetActive(hasFairyAward); } private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { if (fairyLeagueModel.fairyLeagueGroupId == 5 && (index == fairyLeagueModel.GetBattleWinFirstPlayer() || index == fairyLeagueModel.GetBattleDefeatFirstPlayer())) if (model.fairyLeagueGroupId == 5 && (index == model.GetBattleWinFirstPlayer() || index == model.GetBattleDefeatFirstPlayer())) { height = m_FirstRankCellSize; } @@ -82,12 +219,12 @@ private void RefreshData() { m_IntegralTxt.text = Language.Get("UnionMatchIntergralAdd", fairyLeagueModel.integralAddition); m_FightTimeTxt.text = TimeUtility.SecondsToHMS(fairyLeagueModel.fairyLeagueTotalTime); m_ContainerWin.gameObject.SetActive(fairyLeagueModel.fairyLeagueWinFaction == PlayerDatas.Instance.baseData.faction); m_ContainerDefeat.gameObject.SetActive(fairyLeagueModel.fairyLeagueWinFaction != PlayerDatas.Instance.baseData.faction); m_IntegralTxt.text = Language.Get("UnionMatchIntergralAdd", model.integralAddition); m_FightTimeTxt.text = TimeUtility.SecondsToHMS(model.fairyLeagueTotalTime); m_ContainerWin.gameObject.SetActive(model.fairyLeagueWinFaction == PlayerDatas.Instance.baseData.faction); m_ContainerDefeat.gameObject.SetActive(model.fairyLeagueWinFaction != PlayerDatas.Instance.baseData.faction); scrollerController.Refresh(); var _list = fairyLeagueModel.fairyLeagueResults; var _list = model.fairyLeagueResults; for (int i = 0; i < _list.Count; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); System/FairyAu/FairyLeagueModel.cs
@@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using LitJson; @@ -10,7 +11,7 @@ namespace Snxxz.UI { [XLua.LuaCallCSharp] public class FairyLeagueModel : Model, IAfterPlayerDataInitialize, IBeforePlayerDataInitialize, IPlayerLoginOk,IOpenServerActivity public class FairyLeagueModel : Model, IAfterPlayerDataInitialize, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { public event Action OnRefreshFairyLeagueEvent; @@ -287,13 +288,13 @@ FairyLeagueWeekTime fairyLeagueWeekTime = new FairyLeagueWeekTime(); Dictionary<int, Dictionary<int, FairyLeagueWeekTime>> specialLeagueTimes = new Dictionary<int, Dictionary<int, FairyLeagueWeekTime>>(); Dictionary<int, FairyLeagueWeekTime> mixServerWeekTimes = new Dictionary<int, FairyLeagueWeekTime>(); public Dictionary<int,int> leagueNoticeWeapons { get; private set; } public Dictionary<int, int> leagueNoticeWeapons { get; private set; } private void ParseConfig() { FuncConfigConfig cfg = FuncConfigConfig.Get("FamilyMatchGuide"); if (cfg != null) var funcConfig = FuncConfigConfig.Get("FamilyMatchGuide"); if (funcConfig != null) { guideImgKeys = ConfigParse.GetMultipleStr(cfg.Numerical1); guideImgKeys = ConfigParse.GetMultipleStr(funcConfig.Numerical1); } var configs = DungeonStateTimeConfig.GetValues(); for (int i = 0; i < configs.Count; i++) @@ -334,24 +335,24 @@ leagueTime.Sort(); } } cfg = FuncConfigConfig.Get("FamilyMatchResourcePoint"); if (cfg != null) funcConfig = FuncConfigConfig.Get("FamilyMatchResourcePoint"); if (funcConfig != null) { crystalSortDict = new Dictionary<int, int[]>(); var _sortArray = JsonMapper.ToObject<int[][]>(cfg.Numerical3); var _sortArray = JsonMapper.ToObject<int[][]>(funcConfig.Numerical3); for (int i = 0; i < _sortArray.Length; i++) { crystalSortDict.Add(i + 1, _sortArray[i]); } fairyLeagueCrystals = JsonMapper.ToObject<int[]>(cfg.Numerical2); fairyWarResUpperLimit = int.Parse(cfg.Numerical5); fairyLeagueCrystals = JsonMapper.ToObject<int[]>(funcConfig.Numerical2); fairyWarResUpperLimit = int.Parse(funcConfig.Numerical5); } cfg = FuncConfigConfig.Get("FamilyMatchRandomBuff"); if (cfg != null) funcConfig = FuncConfigConfig.Get("FamilyMatchRandomBuff"); if (funcConfig != null) { if (RandomBuffPos_Regex.IsMatch(cfg.Numerical1)) if (RandomBuffPos_Regex.IsMatch(funcConfig.Numerical1)) { foreach (Match match in RandomBuffPos_Regex.Matches(cfg.Numerical1)) foreach (Match match in RandomBuffPos_Regex.Matches(funcConfig.Numerical1)) { crystalPosList.Add(new Vector2(float.Parse(match.Groups[1].Value) / 2, float.Parse(match.Groups[2].Value) / 2)); @@ -359,62 +360,93 @@ } } Regex _regex = new Regex(@"([0-9]+):\[(.*?\])\]"); cfg = FuncConfigConfig.Get("FamilyMatchRankReward"); if (_regex.IsMatch(cfg.Numerical1)) funcConfig = FuncConfigConfig.Get("FamilyMatchRankReward"); if (_regex.IsMatch(funcConfig.Numerical1)) { foreach (Match match in _regex.Matches(cfg.Numerical1)) foreach (Match match in _regex.Matches(funcConfig.Numerical1)) { var _rank = int.Parse(match.Groups[1].Value); var _value = StringUtility.Contact('[', match.Groups[2].Value, ']'); List<IntegralRankItem> _list = ParseAward(LitJson.JsonMapper.ToObject<int[][]>(_value)); integralRankAwardDict.Add(_rank, _list); } integralRankAwardPer = JsonMapper.ToObject<int[]>(cfg.Numerical2); integralRankAwardPer = JsonMapper.ToObject<int[]>(funcConfig.Numerical2); } cfg = FuncConfigConfig.Get("FamilyMatchRankOneReward"); if (_regex.IsMatch(cfg.Numerical1)) funcConfig = FuncConfigConfig.Get("FamilyMatchRankOneReward"); if (_regex.IsMatch(funcConfig.Numerical1)) { foreach (Match match in _regex.Matches(cfg.Numerical1)) foreach (Match match in _regex.Matches(funcConfig.Numerical1)) { var _worldLv = int.Parse(match.Groups[1].Value); List<Item> _list = ParseAward(StringUtility.Contact('[', match.Groups[2].Value, ']')); finalWarWinAwardDict.Add(_worldLv, _list); } } if (_regex.IsMatch(cfg.Numerical2)) if (_regex.IsMatch(funcConfig.Numerical2)) { foreach (Match match in _regex.Matches(cfg.Numerical2)) foreach (Match match in _regex.Matches(funcConfig.Numerical2)) { var _worldLv = int.Parse(match.Groups[1].Value); List<Item> _list = ParseAward(StringUtility.Contact('[', match.Groups[2].Value, ']')); finalWarDefeatAwardDict.Add(_worldLv, _list); } } cfg = FuncConfigConfig.Get("FamilyMatchSRankOneReward"); if (_regex.IsMatch(cfg.Numerical1)) funcConfig = FuncConfigConfig.Get("FamilyMatchSRankOneReward"); if (_regex.IsMatch(funcConfig.Numerical1)) { foreach (Match match in _regex.Matches(cfg.Numerical1)) foreach (Match match in _regex.Matches(funcConfig.Numerical1)) { var _worldLv = int.Parse(match.Groups[1].Value); List<Item> _list = ParseAward(StringUtility.Contact('[', match.Groups[2].Value, ']')); finalWarChampionWinAwardDict.Add(_worldLv, _list); } } if (_regex.IsMatch(cfg.Numerical2)) if (_regex.IsMatch(funcConfig.Numerical2)) { foreach (Match match in _regex.Matches(cfg.Numerical2)) foreach (Match match in _regex.Matches(funcConfig.Numerical2)) { var _worldLv = int.Parse(match.Groups[1].Value); List<Item> _list = ParseAward(StringUtility.Contact('[', match.Groups[2].Value, ']')); finalWarChampionDefeatAwardDict.Add(_worldLv, _list); } } cfg = FuncConfigConfig.Get("FamilyMatchPersonalScore"); integralAddition = int.Parse(cfg.Numerical5); cfg = FuncConfigConfig.Get("FamilyMatchResourcePoint1"); crystalRateDict = ConfigParse.GetDic<int, float>(cfg.Numerical1); cfg = FuncConfigConfig.Get("FamilyForcast"); leagueNoticeWeapons = ConfigParse.GetDic<int, int>(cfg.Numerical1); funcConfig = FuncConfigConfig.Get("FamilyMatchPersonalScore"); integralAddition = int.Parse(funcConfig.Numerical5); funcConfig = FuncConfigConfig.Get("FamilyMatchResourcePoint1"); crystalRateDict = ConfigParse.GetDic<int, float>(funcConfig.Numerical1); funcConfig = FuncConfigConfig.Get("FamilyForcast"); leagueNoticeWeapons = ConfigParse.GetDic<int, int>(funcConfig.Numerical1); var leagueRankAwards = FairyLeagueRankAwardConfig.GetValues(); foreach (var rankAwardConfig in leagueRankAwards) { Dictionary<int, List<Item>> rankAwards; if (!m_FairyLeagueRankRewards.TryGetValue(rankAwardConfig.WorldLV, out rankAwards)) { rankAwards = new Dictionary<int, List<Item>>(); m_FairyLeagueRankRewards.Add(rankAwardConfig.WorldLV, rankAwards); } List<Item> awardItems; if (!rankAwards.TryGetValue(rankAwardConfig.Rank, out awardItems)) { awardItems = new List<Item>(); rankAwards.Add(rankAwardConfig.Rank, awardItems); } var itemArray = LitJson.JsonMapper.ToObject<int[][]>(rankAwardConfig.RankAuctionItem); for (int i = 0; i < itemArray.Length; i++) { awardItems.Add(new Item() { id = itemArray[i][0], count = itemArray[i][1], }); } if (rankAwardConfig.Rank > fairyLeagueRankAwardMaxRank) { fairyLeagueRankAwardMaxRank = rankAwardConfig.Rank; } } } int GetIndexOfWeek(int _openWeekDay, int _openDays, out int dayOfWeek) @@ -926,6 +958,22 @@ return null; } public bool IsSessionOneWinGroup() { var _fairyId = PlayerDatas.Instance.baseData.FamilyId; var battleDatas = GetFairyLeague(0, fairyLeagueGroupId); for (int i = 0; i < battleDatas.Count; i++) { if (battleDatas[i].fairyId1 == _fairyId || battleDatas[i].fairyId2 == _fairyId) { return battleDatas[i].winFairyId == _fairyId; } } return false; } public bool StepSession(int _grade = 5) { if (fairyLeagueSession == 1) @@ -1178,6 +1226,46 @@ } } #endregion #region 仙盟联赛排名奖励 Dictionary<int, Dictionary<int, List<Item>>> m_FairyLeagueRankRewards = new Dictionary<int, Dictionary<int, List<Item>>>(); public int afterGroupWorldLevel { get; private set; } public int fairyLeagueRankAwardMaxRank { get; private set; } public List<Item> GetFairyLeagueRankReward(int worldLevel, int rank) { List<Item> items = null; var maxWorldLevel = m_FairyLeagueRankRewards.Keys.Last(); if (worldLevel >= maxWorldLevel) { foreach (var _rank in m_FairyLeagueRankRewards[maxWorldLevel].Keys) { if (rank <= _rank) { items = m_FairyLeagueRankRewards[maxWorldLevel][_rank]; return items; } } } foreach (var _worldLevel in m_FairyLeagueRankRewards.Keys) { if (worldLevel <= _worldLevel) { foreach (var _rank in m_FairyLeagueRankRewards[_worldLevel].Keys) { if (rank <= _rank) { items = m_FairyLeagueRankRewards[_worldLevel][_rank]; return items; } } } } return items; } #endregion } public class FairyLeagueWeekTime System/FairyAu/FairyLeagueRankAwardCell.cs
New file @@ -0,0 +1,41 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FairyLeagueRankAwardCell : CellView { [SerializeField] Image m_RankIcon; [SerializeField] Text m_Rank; [SerializeField] ItemCell[] m_Items; FairyLeagueModel model { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } } public void Display(int worldLevel, int rank) { var gradeRank = rank % 4 == 0 ? 4 : rank % 4; m_Rank.text = string.Format("{0}级联赛第{1}名", FairyModel.GetFairyGradeLabel(rank), gradeRank); var items = model.GetFairyLeagueRankReward(worldLevel, rank); for (int i = 0; i < m_Items.Length; i++) { m_Items[i].gameObject.SetActive(i < items.Count); if (i < items.Count) { var item = items[i]; var itemData = new ItemCellModel(item.id, true, (ulong)item.count); m_Items[i].Init(itemData); m_Items[i].button.SetListener(() => { ItemTipUtility.Show(item.id); }); } } } } } System/FairyAu/FairyLeagueRankAwardCell.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 9830ba7b0cc2b00438a7d5eebc9d625f timeCreated: 1560234023 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/FairyAu/FairyLeagueRankRewardWin.cs
New file @@ -0,0 +1,94 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, June 11, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FairyLeagueRankRewardWin : Window { [SerializeField] ScrollerController m_ScrollerControl; [SerializeField] Button m_Close; int worldLevel = 0; FairyLeagueModel model { get { return ModelCenter.Instance.GetModel<FairyLeagueModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.AddListener(CloseClick); m_ScrollerControl.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion void Display() { if (model.fairyLeagueStage == FairyLeagueStage.Prepare) { worldLevel = (int)PlayerDatas.Instance.worldLv; } else { worldLevel = model.afterGroupWorldLevel; } if (m_ScrollerControl.GetNumberOfCells(m_ScrollerControl.m_Scorller) == 0) { m_ScrollerControl.Refresh(); for (int i = 1; i <= model.fairyLeagueRankAwardMaxRank; i++) { m_ScrollerControl.AddCell(ScrollerDataType.Header, i); } m_ScrollerControl.Restart(); } else { m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); m_ScrollerControl.JumpIndex(0); } } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var awardCell = cell as FairyLeagueRankAwardCell; awardCell.Display(worldLevel, cell.index); } } } System/FairyAu/FairyLeagueRankRewardWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 2a9bf1556fad01f4dbb0dfb354e8ca73 timeCreated: 1560231517 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/FairyAu/FairyLeagueWin.cs
@@ -35,6 +35,7 @@ [SerializeField] List<FairyClash> m_FairyClashList; [SerializeField] RectTransform m_ContainerBattleTime; [SerializeField] Button m_ViewRankAward; [SerializeField] Button m_BattleGroundBtn; [SerializeField] Text m_BattleGroundBtnTxt; [SerializeField] Button m_RuleBtn; @@ -84,6 +85,7 @@ m_FairyStoreBtn.onClick.AddListener(OnFairyStoreBtn); m_BattleGroundBtn.onClick.AddListener(OnBattleGoundBtn); m_RuleBtn.onClick.AddListener(OnRuneBtn); m_ViewRankAward.AddListener(ViewRankAward); } protected override void OnPreOpen() @@ -477,6 +479,11 @@ FuncRules.OpenFuncRule("FamilyMatch_HowToPlay"); } private void ViewRankAward() { WindowCenter.Instance.Open<FairyLeagueRankRewardWin>(); } [Serializable] public class FairyLeagueName { System/FairyAu/FairyModel.cs
@@ -211,6 +211,24 @@ config = FuncConfigConfig.Get("FamilyMatchSet"); fairyLeagueLimit = int.Parse(config.Numerical1); } public static string GetFairyGradeLabel(int rank) { rank = Mathf.CeilToInt((float)rank / 4); switch (rank) { case 1: return Language.Get("Fairy_S"); case 2: return Language.Get("Fairy_A"); case 3: return Language.Get("Fairy_B"); case 4: return Language.Get("Fairy_C"); default: return Language.Get("Fairy_D"); } } #endregion public List<PlayerFairyData.FairyData> fairyList = new List<PlayerFairyData.FairyData>(); System/FairyAu/FairyViewCell.cs
@@ -74,7 +74,7 @@ { if (fairy.WarRank != 0) { m_FairyGradeTxt.text = GetGrade((int)fairy.WarRank); m_FairyGradeTxt.text = FairyModel.GetFairyGradeLabel((int)fairy.WarRank); } else { @@ -106,24 +106,6 @@ else { m_RankTxt.text = (_index + 1).ToString(); } } public string GetGrade(int _rank) { _rank = Mathf.CeilToInt((float)_rank / 4); switch (_rank) { case 1: return Language.Get("Fairy_S"); case 2: return Language.Get("Fairy_A"); case 3: return Language.Get("Fairy_B"); case 4: return Language.Get("Fairy_C"); default: return Language.Get("Fairy_D"); } } System/FairyAu/KingFairyCtnRewardCell.cs
@@ -4,59 +4,50 @@ using UnityEngine; using UnityEngine.UI; namespace EnhancedUI.EnhancedScroller namespace Snxxz.UI { public class KingFairyCtnRewardCell : ScrollerUI public class KingFairyCtnRewardCell : CellView { KingFairyModel m_Model; [SerializeField] Text m_WinStreakTimes; [SerializeField] List<ItemCell> m_Items; KingFairyModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<KingFairyModel>()); return ModelCenter.Instance.GetModel<KingFairyModel>(); } } [SerializeField] Text ctnWinTxt; [SerializeField] List<ItemCell> itemList; [SerializeField] Button allotBtn; [SerializeField] Text allotBtnTxt; public override void Refresh(CellView cell) public void Display(int _index) { var _index = cell.index; bool _final = _index < 0; for (int i = 0; i < itemList.Count; i++) var times = Mathf.Abs(_index); var winStreakIndex = (times - model.multipleWinStartGet) / model.multipleWinIntervalGet; var rewardIndex = winStreakIndex % model.multipleWinRewards.Count; var rewardItems = model.multipleWinRewards[rewardIndex]; for (int i = 0; i < m_Items.Count; i++) { if (i < model.multipleWinAwardItems.Length) if (i < rewardItems.Count) { var _itemArray = model.multipleWinAwardItems[i]; itemList[i].gameObject.SetActive(true); ItemCellModel cellModel = new ItemCellModel(_itemArray[0], false, (ulong)_itemArray[1]); itemList[i].Init(cellModel); itemList[i].button.onClick.RemoveAllListeners(); itemList[i].button.onClick.AddListener(() => var item = rewardItems[i]; m_Items[i].gameObject.SetActive(true); var itemData = new ItemCellModel(item.id, false, (ulong)item.count); m_Items[i].Init(itemData); m_Items[i].button.onClick.RemoveAllListeners(); m_Items[i].button.onClick.AddListener(() => { model.ViewKingFairyChest(_itemArray[0], _itemArray[1]); ItemTipUtility.Show(item.id); }); } else { itemList[i].gameObject.SetActive(false); m_Items[i].gameObject.SetActive(false); } } ctnWinTxt.text = _final ? Language.Get("FamilyMatchFinisLianWin") : Language.Get("FamilyMatchLianWinReward", _index); allotBtn.gameObject.SetActive(_final || (model.kingFairyData.multipleWinCnt >= _index && model.IsSelfInKingFairy())); allotBtn.interactable = model.kingFairyData.leaderId == PlayerDatas.Instance.PlayerId && (_final || model.kingFairyData.allotCnt < _index); allotBtnTxt.text = (_final || model.kingFairyData.allotCnt < _index) ? Language.Get("FamilyMatchUnAssign") : Language.Get("FamilyMatchAssigned"); allotBtn.RemoveAllListeners(); allotBtn.onClick.AddListener(OnAllotClick); } private void OnAllotClick() { WindowCenter.Instance.Open<KingFairyAllotWin>(); m_WinStreakTimes.text = _final ? Language.Get("FamilyMatchFinisLianWin") : Language.Get("FamilyMatchLianWinReward", _index); } } } System/FairyAu/KingFairyModel.cs
@@ -59,22 +59,42 @@ public const int KING_FAIRY_INFO = 69; public int[][] salaryAwardItems { get; private set; } public int privilegeItemId { get; private set; } public int[][] multipleWinAwardItems { get; private set; } public int multipleWinStartGet { get; private set; } public int multipleWinIntervalGet { get; private set; } public int multipleWinLimitCnt { get; private set; } public List<List<Item>> multipleWinRewards { get; private set; } public readonly int multipleWinBuffTypeId = 22101; private void ParseConfig() { multipleWinLimitCnt = 99; FuncConfigConfig cfg = FuncConfigConfig.Get("FamilyMatchDayReward"); salaryAwardItems = JsonMapper.ToObject<int[][]>(cfg.Numerical1); privilegeItemId = int.Parse(cfg.Numerical3); cfg = FuncConfigConfig.Get("FamilyMatchLianWinReward"); multipleWinAwardItems = JsonMapper.ToObject<int[][]>(cfg.Numerical1); multipleWinStartGet = int.Parse(cfg.Numerical2); multipleWinIntervalGet = int.Parse(cfg.Numerical3); FuncConfigConfig funcConfig = FuncConfigConfig.Get("FamilyMatchDayReward"); salaryAwardItems = JsonMapper.ToObject<int[][]>(funcConfig.Numerical1); privilegeItemId = int.Parse(funcConfig.Numerical3); funcConfig = FuncConfigConfig.Get("FamilyMatchLianWinReward"); multipleWinStartGet = int.Parse(funcConfig.Numerical2); multipleWinIntervalGet = int.Parse(funcConfig.Numerical3); var itemArray = LitJson.JsonMapper.ToObject<int[][][]>(funcConfig.Numerical4); if (itemArray != null) { multipleWinRewards = new List<List<Item>>(); for (int i = 0; i < itemArray.Length; i++) { var items = new List<Item>(); foreach (var _items in itemArray[i]) { items.Add(new Item() { id = _items[0], count = _items[1], }); } multipleWinRewards.Add(items); } } } public int GetWinStreakBuffLv(int _lv) { SkillConfig _skillCfg = SkillConfig.Get(multipleWinBuffTypeId); System/FairyAu/KingFairyRewardWin.cs
@@ -12,19 +12,12 @@ namespace Snxxz.UI { public class KingFairyRewardWin : Window ,SecondWindowInterface public class KingFairyRewardWin : Window, SecondWindowInterface { [SerializeField] Text presentCtnWinCntTxt; [SerializeField] ScrollerController scrollerController; [SerializeField] Text m_WinStreakCount; [SerializeField] ScrollerController m_ScrollerControl; KingFairyModel m_Model; KingFairyModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<KingFairyModel>()); } } KingFairyModel model { get { return ModelCenter.Instance.GetModel<KingFairyModel>(); } } public Button close { get; set; } #region Built-in @@ -42,8 +35,9 @@ protected override void AddListeners() { close.onClick.AddListener(CloseClick); } m_ScrollerControl.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { model.UpdateKingFairyEvent += UpdateKingFairyEvent; @@ -66,20 +60,26 @@ public void UpdateKingFairyEvent() { scrollerController.Refresh(); m_ScrollerControl.Refresh(); var _limitCnt = (model.kingFairyData.multipleWinCnt < model.multipleWinLimitCnt ? model.multipleWinLimitCnt : (model.multipleWinLimitCnt + model.multipleWinIntervalGet)); if (model.kingFairyData != null && model.kingFairyData.finalCnt != 0) { scrollerController.AddCell(ScrollerDataType.Header, -model.kingFairyData.finalCnt); m_ScrollerControl.AddCell(ScrollerDataType.Header, -model.kingFairyData.finalCnt); } for (int i = model.multipleWinStartGet; i <= _limitCnt; i += model.multipleWinIntervalGet) { scrollerController.AddCell(ScrollerDataType.Header, i); m_ScrollerControl.AddCell(ScrollerDataType.Header, i); } scrollerController.Restart(); presentCtnWinCntTxt.text = StringUtility.Contact(Language.Get("FamilyMatchLianWinTimes"), model.hasKingFairy ? StringUtility.Contact(model.kingFairyData.multipleWinCnt, Language.Get("FamilyMatchTime")) : "-"); m_ScrollerControl.Restart(); m_WinStreakCount.text = StringUtility.Contact(Language.Get("FamilyMatchLianWinTimes"), model.hasKingFairy ? StringUtility.Contact(model.kingFairyData.multipleWinCnt, Language.Get("FamilyMatchTime")) : "-"); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var rewardCell = cell as KingFairyCtnRewardCell; rewardCell.Display(cell.index); } } } System/FairyAu/WinningStreakWin.cs
@@ -17,7 +17,8 @@ public class WinningStreakWin : Window { [SerializeField] Button m_CloseBtn; [SerializeField] ItemCell m_RewardItem; [SerializeField] Transform m_ContainerRewards; [SerializeField] ItemCell[] m_RewardItems; [SerializeField] Text m_DescTxt; [SerializeField] Text m_NoneAwardTxt; @@ -48,13 +49,27 @@ m_DescTxt.text = Language.Get("FamilyMatch_WinWinBUFF", _skillCfg.BuffDescription); } bool _nextAward = model.NextMultipleWinAward(); m_RewardItem.gameObject.SetActive(_nextAward); m_ContainerRewards.gameObject.SetActive(_nextAward); m_NoneAwardTxt.gameObject.SetActive(!_nextAward); if (_nextAward) { var _itemArray = model.multipleWinAwardItems[0]; ItemCellModel cellModel = new ItemCellModel(_itemArray[0],false, (ulong)_itemArray[1]); m_RewardItem.Init(cellModel); var winStreakIndex = (model.kingFairyData.multipleWinCnt + 1 - model.multipleWinStartGet) / model.multipleWinIntervalGet; var rewardIndex = winStreakIndex % model.multipleWinRewards.Count; var items = model.multipleWinRewards[rewardIndex]; for (int i = 0; i < m_RewardItems.Length; i++) { m_RewardItems[i].gameObject.SetActive(i < items.Count); if (i < items.Count) { var item = items[i]; var itemData = new ItemCellModel(item.id, false, (ulong)item.count); m_RewardItems[i].Init(itemData); m_RewardItems[i].button.SetListener(() => { ItemTipUtility.Show(item.id); }); } } } } Utility/ConfigInitiator.cs
@@ -294,7 +294,8 @@ normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; })); normalTasks.Add(new ConfigInitTask("VipPrivilegeInfoConfig", () => { VipPrivilegeInfoConfig.Init(); }, () => { return VipPrivilegeInfoConfig.inited; })); normalTasks.Add(new ConfigInitTask("VipPrivilegeInfoConfig", () => { VipPrivilegeInfoConfig.Init(); }, () => { return VipPrivilegeInfoConfig.inited; })); normalTasks.Add(new ConfigInitTask("FairyLeagueRankAwardConfig", () => { FairyLeagueRankAwardConfig.Init(); }, () => { return FairyLeagueRankAwardConfig.inited; })); } static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();