From 04e0d2d733f6ceb35456deeb3e14bbf51e90124d Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 29 一月 2019 10:00:13 +0800
Subject: [PATCH] 6086 【前端】【1.5.200】春节红包雨活动
---
System/OpenServerActivity/FestivalRedpackModel.cs | 102 ++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 89 insertions(+), 13 deletions(-)
diff --git a/System/OpenServerActivity/FestivalRedpackModel.cs b/System/OpenServerActivity/FestivalRedpackModel.cs
index fbfbd56..4481cd5 100644
--- a/System/OpenServerActivity/FestivalRedpackModel.cs
+++ b/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;
--
Gitblit v1.8.0