少年修仙传客户端代码仓库
client_linchunjie
2019-01-29 04e0d2d733f6ceb35456deeb3e14bbf51e90124d
6086 【前端】【1.5.200】春节红包雨活动
3个文件已修改
121 ■■■■ 已修改文件
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/FestivalRedpackModel.cs 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Monday, January 28, 2019
//    [  Date ]:           Tuesday, January 29, 2019
//--------------------------------------------------------
using UnityEngine;
@@ -13,7 +13,9 @@
        public int ID { get ; private set ; }
        public int FeastDay { get ; private set ; }
        public int achievementId { get ; private set ; }
        public int[] achievements;
        public string typeName { get ; private set; }
        public string Icon { get ; private set; }
        public override string getKey()
        {
@@ -27,7 +29,16 @@
            
                FeastDay=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
            
                achievementId=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
                string[] achievementsStringArray = rawContents[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                achievements = new int[achievementsStringArray.Length];
                for (int i=0;i<achievementsStringArray.Length;i++)
                {
                     int.TryParse(achievementsStringArray[i],out achievements[i]);
                }
                typeName = rawContents[3].Trim();
                Icon = rawContents[4].Trim();
            }
            catch (Exception ex)
            {
Core/GameEngine/Model/Config/FestivalRedpackTaskConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 92740fe211606b3409ddae7876e3b8d0
timeCreated: 1548680690
timeCreated: 1548726145
licenseType: Pro
MonoImporter:
  serializedVersion: 2
System/OpenServerActivity/FestivalRedpackModel.cs
@@ -8,7 +8,7 @@
    public class FestivalRedpackModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        Dictionary<int, FestivalRedpack> festivalRedpacks = new Dictionary<int, FestivalRedpack>();
        Dictionary<int, List<int>> achievements = new Dictionary<int, List<int>>();
        Dictionary<int, List<FestivalRedpackAchievement>> achievements = new Dictionary<int, List<FestivalRedpackAchievement>>();
        List<int> taskRedpacks = new List<int>();
        bool serverInited = false;
@@ -148,13 +148,17 @@
                var configs = Config.Instance.GetAllValues<FestivalRedpackTaskConfig>();
                foreach (var config in configs)
                {
                    List<int> list;
                    List<FestivalRedpackAchievement> list;
                    if (!achievements.TryGetValue(config.FeastDay, out list))
                    {
                        list = new List<int>();
                        list = new List<FestivalRedpackAchievement>();
                        achievements.Add(config.FeastDay, list);
                    }
                    list.Add(config.achievementId);
                    list.Add(new FestivalRedpackAchievement()
                    {
                        id = config.ID,
                        achievements = config.achievements,
                    });
                }
            }
@@ -239,12 +243,24 @@
            return false;
        }
        public bool IsContainsAchievement(List<FestivalRedpackAchievement> list, int achievementId)
        {
            foreach (var festivalRedpackAchievement in list)
            {
                if (festivalRedpackAchievement.Contains(achievementId))
                {
                    return true;
                }
            }
            return false;
        }
        public bool TryGetRedpack(int id, out FestivalRedpack redpack)
        {
            return festivalRedpacks.TryGetValue(id, out redpack);
        }
        public bool TryGetAchievements(out List<int> list)
        public bool TryGetAchievements(out List<FestivalRedpackAchievement> list)
        {
            return achievements.TryGetValue(festivalDay + 1, out list);
        }
@@ -257,6 +273,27 @@
                return festivalRedpacks[lhs].openTime.CompareTo(festivalRedpacks[rhs].openTime);
            }
            return 0;
        }
        public int AchievementSort(FestivalRedpackAchievement lhs, FestivalRedpackAchievement rhs)
        {
            Achievement lhsAchievement;
            Achievement rhsAchievement;
            if (achievementModel.TryGetAchievement(lhs.CurrentAchieve, out lhsAchievement)
                && achievementModel.TryGetAchievement(rhs.CurrentAchieve, out rhsAchievement))
            {
                if (lhsAchievement.completed.CompareTo(rhsAchievement.completed) != 0)
                {
                    return lhsAchievement.completed.CompareTo(rhsAchievement.completed);
                }
                bool xReach = Achievement.IsReach(lhsAchievement.id, lhsAchievement.progress);
                bool yReach = Achievement.IsReach(rhsAchievement.id, rhsAchievement.progress);
                if (xReach.CompareTo(yReach) != 0)
                {
                    return -xReach.CompareTo(yReach);
                }
            }
            return lhs.id.CompareTo(rhs.id);
        }
        public void OnReceivePackage(HAB25_tagMCFeastRedPackInfo package)
@@ -323,8 +360,8 @@
        private void AchievementCompletedEvent(int _achieve)
        {
            List<int> list;
            if (TryGetAchievements(out list) && list.Contains(_achieve))
            List<FestivalRedpackAchievement> list;
            if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve))
            {
                if (achievementRefresh != null)
                {
@@ -336,8 +373,8 @@
        private void AchievementProgressUpdateEvent(int _achieve)
        {
            List<int> list;
            if (TryGetAchievements(out list) && list.Contains(_achieve))
            List<FestivalRedpackAchievement> list;
            if (TryGetAchievements(out list) && IsContainsAchievement(list, _achieve))
            {
                if (achievementRefresh != null)
                {
@@ -382,15 +419,15 @@
                    }
                }
                List<int> list;
                List<FestivalRedpackAchievement> list;
                if (TryGetAchievements(out list))
                {
                    foreach (var achievementId in list)
                    foreach (var festivalRedpackAchievement in list)
                    {
                        Achievement achievement;
                        if (achievementModel.TryGetAchievement(achievementId, out achievement))
                        if (achievementModel.TryGetAchievement(festivalRedpackAchievement.CurrentAchieve, out achievement))
                        {
                            if (Achievement.IsReach(achievementId, achievement.progress) && !achievement.completed)
                            if (Achievement.IsReach(festivalRedpackAchievement.CurrentAchieve, achievement.progress) && !achievement.completed)
                            {
                                existFinishTask = true;
                                break;
@@ -430,6 +467,45 @@
        }
    }
    public class FestivalRedpackAchievement
    {
        public int id;
        public int[] achievements;
        public AchievementModel model { get { return ModelCenter.Instance.GetModel<AchievementModel>(); } }
        public int CurrentAchieve
        {
            get
            {
                for (int i = 0; i < achievements.Length; i++)
                {
                    Achievement achievement;
                    if (model.TryGetAchievement(achievements[i], out achievement))
                    {
                        if (!achievement.completed)
                        {
                            return achievements[i];
                        }
                    }
                }
                return achievements[achievements.Length - 1];
            }
        }
        public bool Contains(int _achieve)
        {
            for (int i = 0; i < achievements.Length; i++)
            {
                if (achievements[i] == _achieve)
                {
                    return true;
                }
            }
            return false;
        }
    }
    public struct FestivalRedpack
    {
        public int id;