public LineSkillPkStatistic(Character pUser)
        {
            m_pDynaRank = new DbDynamicRankRecord
            {
                PlayerName     = pUser.Name,
                PlayerIdentity = pUser.Identity,
                RankType       = LineSkillPkTournament.MAP_ID_U,
                ObjectIdentity = 0,
                ObjectName     = "NONE"
            };

            Save();
        }
示例#2
0
        /*
         * 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;
        }
示例#3
0
        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++;
            }
        }
示例#4
0
        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;
 }