void OnRequestRaidRankingReceived(ClientPeer peer, OperationRequest operationRequest, SendParameters sendParameters) { var workRankingList = MongoHelper.RaidRankingCollection.GetAllSorting( ).GetAwaiter( ); workRankingList.OnCompleted(() => { var rankingDataList = workRankingList.GetResult( ); if (rankingDataList == null || rankingDataList.Count == 0) { RaidRankingData data = CreateRaidRankingData(peer); var workRankingAdd = MongoHelper.RaidRankingCollection.Add(data).GetAwaiter( ); workRankingAdd.OnCompleted(() => { RankingEvent.OnUpdateRaidRanking(peer, data, null, new List <RaidRankingData> { data }); BossEvent.OnUpdateRaidBoss(peer, 16); }); return; } // TODO : 보스 디졌는지 안디졌는지 확인 var myRankingData = rankingDataList.Find(x => x.Key.Equals(peer.Id)); var lastHitData = rankingDataList.Find(x => x.LastHit == true); if (myRankingData == null) { myRankingData = CreateRaidRankingData(peer); var workRankingAdd = MongoHelper.RaidRankingCollection.Add(myRankingData).GetAwaiter( ); workRankingAdd.OnCompleted(() => { rankingDataList.Add(myRankingData); RankingEvent.OnUpdateRaidRanking(peer, myRankingData, lastHitData, rankingDataList); BossEvent.OnUpdateRaidBoss(peer, 16); }); } else { RankingEvent.OnUpdateRaidRanking(peer, myRankingData, lastHitData, rankingDataList); BossEvent.OnUpdateRaidBoss(peer, 16); } }); }
public void SyncRankingList(respond_ranking_list msg) { if (mVersion == msg.version) { return; } mVersion = msg.version; PlayerDataModule dataModule = ModuleManager.Instance.FindModule <PlayerDataModule>(); mSelfGrade = mSelfArena = mSelfLevel = mSelfRank = -1; mGrades = null; mLevels = null; mRanks = null; mArenas = null; if (msg.grade_ranking != null && msg.grade_ranking.Count > 0) { mGrades = new RankingInfo[msg.grade_ranking.Count]; //mGrades. = msg.grade_ranking.Count; for (int i = 0; i < msg.grade_ranking.Count; ++i) { RankingInfo info = new RankingInfo(); info.rank = msg.grade_ranking[i].rank; info.name = msg.grade_ranking[i].name; info.guid = (GUID)(msg.grade_ranking[i].guid); info.level = msg.grade_ranking[i].level; info.grade = (uint)msg.grade_ranking[i].grade; mGrades[info.rank] = info; //mGrades.Add(rank, info); if (info.name == dataModule.GetName()) { mSelfGrade = info.rank; } } } if (msg.level_ranking != null && msg.level_ranking.Count > 0) { mLevels = new RankingInfo[msg.level_ranking.Count]; for (int i = 0; i < msg.level_ranking.Count; ++i) { RankingInfo info = new RankingInfo(); info.rank = msg.level_ranking[i].rank; info.guid = (GUID)(msg.level_ranking[i].guid); info.name = msg.level_ranking[i].name; info.level = msg.level_ranking[i].level; info.grade = (uint)msg.level_ranking[i].grade; mLevels[info.rank] = info; if (info.name == dataModule.GetName()) { mSelfLevel = info.rank; } } } if (msg.arena_ranking != null && msg.arena_ranking.Count > 0) { mArenas = new RankingInfo[msg.arena_ranking.Count]; for (int i = 0; i < msg.arena_ranking.Count; ++i) { RankingInfo info = new RankingInfo(); info.rank = msg.arena_ranking[i].rank; info.name = msg.arena_ranking[i].name; info.guid = (GUID)(msg.arena_ranking[i].guid); info.level = msg.arena_ranking[i].level; info.grade = (uint)msg.arena_ranking[i].grade; info.score = msg.arena_ranking[i].arena_score; mArenas[info.rank] = info; if (info.name == dataModule.GetName()) { mSelfArena = info.rank; } } } if (msg.qualifying_ranking != null && msg.qualifying_ranking.Count > 0) { mRanks = new RankingInfo[msg.qualifying_ranking.Count]; for (int i = 0; i < msg.qualifying_ranking.Count; ++i) { RankingInfo info = new RankingInfo(); info.rank = msg.qualifying_ranking[i].rank; info.name = msg.qualifying_ranking[i].name; info.guid = (GUID)(msg.qualifying_ranking[i].guid); info.level = msg.qualifying_ranking[i].level; info.grade = (uint)msg.qualifying_ranking[i].grade; mRanks[info.rank] = info; if (info.name == dataModule.GetName()) { mSelfRank = info.rank; } } } RankingEvent evt = new RankingEvent(RankingEvent.RANKING_UPDATE); EventSystem.Instance.PushEvent(evt); }
void ResetRaid() { TheLordServer.Log.Info("레이드 보스 리셋 시작"); var bossData = TheLordServer.Instance.bossDataList[0]; var sheet = TheLordTable.Instance.CharacterTable.CharacterInfoSheet; var record = BaseTable.Get(sheet, "index", RaidBossIndex); bossData.HP = (int)(float)record["hp"]; bossData.CreateTime += bossRemainTime; var workRankingList = MongoHelper.RaidRankingCollection.GetAllSorting( ).GetAwaiter( ); workRankingList.OnCompleted(() => { var result = workRankingList.GetResult( ); var lastHitPlayer = result.Find(x => x.LastHit == true); if (lastHitPlayer != null) { lastHitPlayer.Tier = (int)TierType.God; } const int legend = 1; const int Master = 3; const int Diamond = 5; const int Platinum = 10; const int Gold = 20; const int Silver = 40; const int Bronze = 80; const int Iron = 200; for (int i = 0; i < result.Count; ++i) { if (result[i].Score <= 0) { } else if (i < legend) { result[i].Tier = (int)TierType.Lengend > result[i].Tier ? (int)TierType.Lengend : result[i].Tier; } else if (i < Master) { result[i].Tier = (int)TierType.Master > result[i].Tier ? (int)TierType.Master : result[i].Tier; } else if (i < Diamond) { result[i].Tier = (int)TierType.Diamond > result[i].Tier ? (int)TierType.Diamond : result[i].Tier; } else if (i < Platinum) { result[i].Tier = (int)TierType.Platinum > result[i].Tier ? (int)TierType.Platinum : result[i].Tier; } else if (i < Gold) { result[i].Tier = (int)TierType.Gold > result[i].Tier ? (int)TierType.Gold : result[i].Tier; } else if (i < Silver) { result[i].Tier = (int)TierType.Silver > result[i].Tier ? (int)TierType.Silver : result[i].Tier; } else if (i < Bronze) { result[i].Tier = (int)TierType.Bronze > result[i].Tier ? (int)TierType.Bronze : result[i].Tier; } else if (i < Iron) { result[i].Tier = (int)TierType.Iron > result[i].Tier ? (int)TierType.Iron : result[i].Tier; } else { if (result[i].Score > 0) { result[i].Tier = (int)TierType.Challanger > result[i].Tier ? (int)TierType.Challanger : result[i].Tier; } } result[i].Score = 0; result[i].LastHit = false; var workUpdateRankingScore = MongoHelper.RaidRankingCollection.Update(result[i]).GetAwaiter( ); workUpdateRankingScore.OnCompleted(() => { }); } foreach (var client in TheLordServer.Instance.PeerList) { if (client.userAgent.UserData == null) { continue; } var myRanking = result.Find(x => x.Key == client.Id); if (client.userAgent.UserAssetData != null) { client.userAgent.UserAssetData.Tier = myRanking.Tier; } RankingEvent.OnUpdateRaidRanking(client, myRanking, null, result); BossEvent.OnUpdateRaidBoss(client, 16); } }); UpdateBoss( ); }