少年修仙传客户端代码仓库
client_linchunjie
2019-06-11 b448c701476a396165506c76c878dba9ce57696c
3335 仙盟连胜奖励修改
6个文件已添加
11个文件已修改
911 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/FairyLeagueRankAwardConfig.cs 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FairyLeagueRankAwardConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUIKingFairyModelWrap.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueDungeonSettleWin.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueModel.cs 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueRankAwardCell.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueRankAwardCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueRankRewardWin.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueRankRewardWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyLeagueWin.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyModel.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyViewCell.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/KingFairyCtnRewardCell.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/KingFairyModel.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/KingFairyRewardWin.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/WinningStreakWin.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>();