public LineSkillPkStatistic(Character pUser) { m_pDynaRank = new DbDynamicRankRecord { PlayerName = pUser.Name, PlayerIdentity = pUser.Identity, RankType = LineSkillPkTournament.MAP_ID_U, ObjectIdentity = 0, ObjectName = "NONE" }; Save(); }
/* * Value1 = Syn Actual Points or Player Actual Points */ public void AwardPoints(Character pSender, uint dwPoints) { if (pSender.Syndicate == null || dwPoints == 0) { return; } DbDynamicRankRecord pDyna; if (!m_pSynPoints.TryGetValue(pSender.SyndicateIdentity, out pDyna)) { pDyna = new DbDynamicRankRecord { ObjectIdentity = pSender.SyndicateIdentity, ObjectName = pSender.SyndicateName, PlayerIdentity = 0, PlayerName = "", RankType = _RANK_TYPE_U }; m_pRepo.SaveOrUpdate(pDyna); m_pSynPoints.TryAdd(pDyna.ObjectIdentity, pDyna); } pDyna.Value1 += dwPoints; if (!m_pUserPoints.TryGetValue(pSender.Identity, out pDyna)) { pDyna = new DbDynamicRankRecord { ObjectIdentity = pSender.SyndicateIdentity, ObjectName = pSender.SyndicateName, PlayerIdentity = pSender.Identity, PlayerName = pSender.Name, RankType = _RANK_TYPE_U }; m_pRepo.SaveOrUpdate(pDyna); m_pUserPoints.TryAdd(pDyna.PlayerIdentity, pDyna); } else if (pDyna.ObjectIdentity != pSender.SyndicateIdentity) { pDyna.ObjectIdentity = pSender.SyndicateIdentity; pDyna.ObjectName = pSender.SyndicateName; pDyna.Value1 = 0; } pDyna.Value1 += dwPoints; }
public void DeliveRewards() { //var allRecords = new List<DbDynamicRankRecord>(); // value 1 -> syndicate players inside or user flag num (delivered) // value 2 -> syndicate total players or user lifetime flag num (delivered) // value 3 -> syndicate points or user points // value 4 -> syndicate lifetime points or user lifetime points // value 5 -> syndicate silver reward or user awarded silver // value 6 -> syndicate emoney reward or user awarded emoney foreach (var syn in m_pRanking.Values) { Syndicate pSyn; if (ServerKernel.Syndicates.TryGetValue(syn.ObjectIdentity, out pSyn)) { syn.Value5 = pSyn.MoneyPrize; syn.Value6 = pSyn.EmoneyPrize; pSyn.MoneyPrize = 0; pSyn.EmoneyPrize = 0; } } foreach (var syn in m_pRanking.Values.Where(x => x.Value3 > 0 && (x.Value5 > 0 || x.Value6 > 0))) { //var pDelivered = new Dictionary<uint, Point>(); uint synId = syn.ObjectIdentity; int deliverMoney = 0; int deliverEmoney = 0; foreach (var plr in m_pUserRank.Values.Where(x => x.ObjectIdentity == synId)) { float nPercent = (plr.Value3 / (float)syn.Value3); int money = (int)(syn.Value5 * nPercent); int emoney = (int)(syn.Value6 * nPercent); deliverMoney += money; deliverEmoney += emoney; Client pClient; if (ServerKernel.Players.TryGetValue(plr.PlayerIdentity, out pClient)) { pClient.Character.AwardMoney(money); pClient.Character.AwardEmoney(emoney); //pDelivered.Add(plr.PlayerIdentity, new Point(money, emoney)); pClient.SendMessage(string.Format(ServerString.STR_CTF_AWARDED_PRIZE, plr.Value3, money, emoney), ChatTone.GUILD); } else { DbUser pUser = Database.Characters.SearchByIdentity(plr.PlayerIdentity); if (pUser != null) { pUser.Money = (uint)Math.Min(int.MaxValue, pUser.Money + money); pUser.Emoney = (uint)Math.Min(int.MaxValue, pUser.Emoney + emoney); Database.Characters.SaveOrUpdate(pUser); } } plr.Value5 = money; plr.Value6 = emoney; ServerKernel.Log.GmLog("ctfreward", string.Format("{0}({1}),awarded(money:{2},emoney:{3}),for({4})points", plr.PlayerIdentity, plr.PlayerName, money, emoney, plr.Value3)); } syn.Value5 = 0; syn.Value6 = 0; Syndicate pSyn; if (ServerKernel.Syndicates.TryGetValue(syn.ObjectIdentity, out pSyn)) { //if (pDelivered.Count <= 0) // continue; DbDynamicRankRecord pDyna = m_pUserRank.Values.OrderByDescending(x => x.Value3) .FirstOrDefault(x => x.ObjectIdentity == syn.Identity && x.PlayerIdentity > 0); if (pDyna != null) { pSyn.Send(string.Format(ServerString.STR_CTF_HIGHEST_REWARD, pDyna.PlayerName, pDyna.Value5, pDyna.Value6)); } } m_pRepo.SaveOrUpdate(syn); ServerKernel.Log.GmLog("ctfsynreward", string.Format("syn(id:{0},name{1}),paid({2},{3}),totalprize({4},{5})", syn.ObjectIdentity, syn.ObjectName, deliverMoney, deliverEmoney, syn.Value5, syn.Value6)); } int nCount = 0; foreach (var syn in m_pRanking.Values.OrderByDescending(x => x.Value3).ThenByDescending(x => x.Value1)) { if (nCount >= 8) { break; } Syndicate updateSyn; if (!ServerKernel.Syndicates.TryGetValue(syn.ObjectIdentity, out updateSyn)) { continue; } updateSyn.ChangeFunds(ServerKernel.CTF_MONEY_REWARD[nCount]); updateSyn.ChangeEmoneyFunds((int)ServerKernel.CTF_EMONEY_REWARD[nCount]); nCount++; } }
public void AddPoints(Character pUser, int nAmount, bool bFlag = false) { if (pUser.Syndicate == null) { return; } int nCount = m_pMap.Players.Values.Count(x => x.SyndicateIdentity == pUser.SyndicateIdentity); DbDynamicRankRecord pRec, pUserRec; if (!m_pRanking.TryGetValue(pUser.SyndicateIdentity, out pRec)) { pRec = new DbDynamicRankRecord { ObjectIdentity = pUser.SyndicateIdentity, ObjectName = pUser.SyndicateName, RankType = _RANK_TYPE_U, PlayerIdentity = 0, PlayerName = "" }; m_pRepo.SaveOrUpdate(pRec); m_pRanking.Add(pRec.ObjectIdentity, pRec); } pRec.Value1 = nCount; // now player num if (nCount > pRec.Value2) { pRec.Value2 = nCount; // total player num } pRec.Value3 += nAmount; // points pRec.Value4 += nAmount; // lifetime points m_pRepo.SaveOrUpdate(pRec); if (!m_pUserRank.TryGetValue(pUser.Identity, out pUserRec)) { pUserRec = new DbDynamicRankRecord { ObjectIdentity = pUser.SyndicateIdentity, ObjectName = pUser.SyndicateName, PlayerIdentity = pUser.Identity, PlayerName = pUser.Name, RankType = _RANK_TYPE_U }; m_pRepo.SaveOrUpdate(pUserRec); m_pUserRank.Add(pUserRec.PlayerIdentity, pUserRec); } else if (pUserRec.ObjectIdentity != pUser.SyndicateIdentity) { pUserRec.ObjectIdentity = pUser.SyndicateIdentity; pUserRec.ObjectName = pUser.Syndicate.Name; pUserRec.Value3 = 0; pUserRec.Value4 = 0; } if (bFlag) { pUserRec.Value1 += 1; // now flag num pUserRec.Value2 += 1; // total flag num } pUserRec.Value3 += nAmount; // now ctf points pUserRec.Value4 += nAmount; // total ctf points m_pRepo.SaveOrUpdate(pUserRec); }
public LineSkillPkStatistic(DbDynamicRankRecord pRank) { m_pDynaRank = pRank; }