示例#1
0
        // 检测是否有未领取的奖励
        public bool CanGetAnyAward(GameClient client)
        {
            if (client == null)
            {
                return(false);
            }
            if (!InAwardTime())
            {
                return(false);
            }

            RoleGiveRecvInfo info = GetRoleGiveRecvInfo(client.ClientData.RoleID);

            foreach (var kvp in allAwardDict)
            {
                int       awardid = kvp.Key;
                AwardItem item    = kvp.Value;
                if (IsReachConition(info, item.MinAwardCondionValue) && (info.AwardFlag & (1 << awardid)) == 0)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        public bool GiveAward(GameClient client, AwardItem item, ESevenDayActType type)
        {
            bool result;

            if (client == null || null == item)
            {
                result = false;
            }
            else
            {
                if (item.GoodsDataList != null)
                {
                    for (int i = 0; i < item.GoodsDataList.Count; i++)
                    {
                        int nGoodsID = item.GoodsDataList[i].GoodsID;
                        if (Global.IsCanGiveRewardByOccupation(client, nGoodsID))
                        {
                            Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, item.GoodsDataList[i].GoodsID, item.GoodsDataList[i].GCount, item.GoodsDataList[i].Quality, "", item.GoodsDataList[i].Forge_level, item.GoodsDataList[i].Binding, 0, "", true, 1, this.GetActivityChineseName(type), "1900-01-01 12:00:00", item.GoodsDataList[i].AddPropIndex, item.GoodsDataList[i].BornIndex, item.GoodsDataList[i].Lucky, item.GoodsDataList[i].Strong, item.GoodsDataList[i].ExcellenceInfo, item.GoodsDataList[i].AppendPropLev, item.GoodsDataList[i].ChangeLifeLevForEquip, null, null, 0, true);
                        }
                    }
                }
                result = true;
            }
            return(result);
        }
示例#3
0
        public override bool GiveAward(GameClient client, int _params)
        {
            bool result2;

            if (null == client)
            {
                result2 = false;
            }
            else
            {
                bool result = true;
                if (null != this.MyAwardItem)
                {
                    result = base.GiveAward(client, this.MyAwardItem);
                }
                if (result)
                {
                    int       occupation = client.ClientData.Occupation;
                    AwardItem myOccAward = this.GetOccAward(occupation);
                    if (null != myOccAward)
                    {
                        result = base.GiveAward(client, myOccAward);
                    }
                }
                if (client._IconStateMgr.CheckThemeDaLiBao(client))
                {
                    client._IconStateMgr.SendIconStateToClient(client);
                }
                result2 = result;
            }
            return(result2);
        }
示例#4
0
        public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, int _params)
        {
            JieriPlatChargeKingEveryDay.ChargeItem ci = null;
            bool result;

            if (!this.IdVsChargeItemDict.TryGetValue(_params, out ci))
            {
                result = false;
            }
            else
            {
                AwardItem           allItem  = ci.allAwardGoodsOne;
                AwardItem           occItem  = ci.occAwardGoodsTwo;
                AwardEffectTimeItem timeItem = ci.timeAwardGoodsThr;
                int awardCnt = 0;
                if (allItem != null && allItem.GoodsDataList != null)
                {
                    awardCnt += allItem.GoodsDataList.Count;
                }
                if (occItem != null && occItem.GoodsDataList != null)
                {
                    awardCnt += occItem.GoodsDataList.Count((GoodsData goods) => Global.IsRoleOccupationMatchGoods(client, goods.GoodsID));
                }
                if (timeItem != null)
                {
                    awardCnt += timeItem.GoodsCnt();
                }
                result = Global.CanAddGoodsNum(client, awardCnt);
            }
            return(result);
        }
示例#5
0
        public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, int id)
        {
            JieriVIPYouHuiActivityConfig configData = null;
            bool result;

            if (!this.VIPYouHuiCofigDict.TryGetValue(id, out configData))
            {
                result = false;
            }
            else
            {
                int nOccu = Global.CalcOriginalOccupationID(client);
                List <GoodsData> lData = new List <GoodsData>();
                foreach (GoodsData item in configData.GoodsDataListOne)
                {
                    lData.Add(item);
                }
                int count = configData.GoodsDataListTwo.Count;
                for (int i = 0; i < count; i++)
                {
                    GoodsData data = configData.GoodsDataListTwo[i];
                    if (Global.IsCanGiveRewardByOccupation(client, data.GoodsID))
                    {
                        lData.Add(data);
                    }
                }
                AwardItem tmpAwardItem = configData.GoodsDataListThr.ToAwardItem();
                foreach (GoodsData item in tmpAwardItem.GoodsDataList)
                {
                    lData.Add(item);
                }
                result = Global.CanAddGoodsDataList(client, lData);
            }
            return(result);
        }
        public bool CanGetAnyAward(GameClient client)
        {
            bool result;

            if (client == null)
            {
                result = false;
            }
            else if (!this.InAwardTime())
            {
                result = false;
            }
            else
            {
                RoleGiveRecvInfo info = this.GetRoleGiveRecvInfo(client.ClientData.RoleID);
                foreach (KeyValuePair <int, AwardItem> kvp in this.allAwardDict)
                {
                    int       awardid = kvp.Key;
                    AwardItem item    = kvp.Value;
                    if (this.IsReachConition(info, item.MinAwardCondionValue) && (info.AwardFlag & 1 << awardid) == 0)
                    {
                        return(true);
                    }
                }
                result = false;
            }
            return(result);
        }
示例#7
0
    public static AwardItem AddAward(string awardType, int awardValue)
    {
        AwardItem awardItem = new AwardItem(awardType, awardValue);

        if (PlayerDataPack.IsMoney(awardType))
        {
            PlayerDataPack.Instance.AddMoney(awardType, awardValue);
        }

        //gem
        if (awardType.Equals("20001"))
        {
            GemDataPack.Instance.AddRandomGem(1);
        }
        else if (awardType.Equals("20002"))
        {
            GemDataPack.Instance.AddRandomGem(2);
        }
        else if (awardType.Equals("20003"))
        {
            GemDataPack.Instance.AddRandomGem(3);
        }
        else if (awardType.Equals("20004"))
        {
            GemDataPack.Instance.AddRandomGem(4);
        }

        return(awardItem);
    }
示例#8
0
        /// <summary>
        /// 发放时限性物品
        /// </summary>
        /// <param name="client"></param>
        /// <param name="item"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public bool GiveEffectiveTimeAward(GameClient client, AwardItem item, ESevenDayActType type)
        {
            if (null == client || null == item)
            {
                return(false);
            }

            if (item.GoodsDataList != null)
            {
                for (int i = 0; i < item.GoodsDataList.Count; i++)
                {
                    int nGoodsID = item.GoodsDataList[i].GoodsID; // 物品id

                    if (Global.IsCanGiveRewardByOccupation(client, nGoodsID))
                    {
                        //添加限时物品
                        Global.AddEffectiveTimeGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client,
                                                              item.GoodsDataList[i].GoodsID, item.GoodsDataList[i].GCount,
                                                              item.GoodsDataList[i].Quality, "", item.GoodsDataList[i].Forge_level,
                                                              item.GoodsDataList[i].Binding, 0, "", false, 1,
                                                              GetActivityChineseName((ESevenDayActType)type), item.GoodsDataList[i].Starttime, item.GoodsDataList[i].Endtime,
                                                              item.GoodsDataList[i].AddPropIndex, item.GoodsDataList[i].BornIndex,
                                                              item.GoodsDataList[i].Lucky, item.GoodsDataList[i].Strong,
                                                              item.GoodsDataList[i].ExcellenceInfo, item.GoodsDataList[i].AppendPropLev, item.GoodsDataList[i].ChangeLifeLevForEquip);
                    }
                }
            }

            return(true);
        }
示例#9
0
        /// <summary>
        /// 背包中是否有足够的位置
        /// </summary>
        /// <returns></returns>
        public override bool HasEnoughBagSpaceForAwardGoods(GameClient client, Int32 id)
        {
            AwardItem           allItem = null, occItem = null;
            AwardEffectTimeItem timeItem = null;

            allAwardDict.TryGetValue(id, out allItem);
            occAwardDict.TryGetValue(id, out allItem);
            timeAwardDict.TryGetValue(id, out timeItem);

            int awardCnt = 0;

            if (allItem != null && allItem.GoodsDataList != null)
            {
                awardCnt += allItem.GoodsDataList.Count;
            }
            if (occItem != null && occItem.GoodsDataList != null)
            {
                awardCnt += occItem.GoodsDataList.Count(((goods) => { return(Global.IsRoleOccupationMatchGoods(client, goods.GoodsID)); }));
            }
            if (timeItem != null)
            {
                awardCnt += timeItem.GoodsCnt();
            }

            return(Global.CanAddGoodsNum(client, awardCnt));
        }
示例#10
0
        public void RetrieveTest_withValidID_AdditionalInfo(string value)
        {
            // Arrange
            AwardItem item = new AwardItem("_xx1", "Award");

            item.BaseTableName = value;

            // Act
            int count = item.Retrieve(false);

            // Assert
            Assert.AreEqual(1, count);

            Assert.AreEqual("_xx1", item.ID);
            Assert.AreEqual("_xxx", item.Award.ID);
            Assert.AreEqual($"{value} Award Category X1", item.Category);
            Assert.AreEqual($"{value} Award Date X1", item.Date);
            Assert.AreEqual($"1", item.Winner);
            Assert.AreEqual($"{value} Award Details X1", item.Details);
            Assert.AreEqual("_xxx", item.Status.ID);
            Assert.AreEqual($"{value} Award LastUpdated X1", item.LastUpdated);

            Assert.AreEqual(3, item.Persons.Count);
            Assert.AreEqual("_x11", item.Persons[0].ID);
            Assert.AreEqual("_x12", item.Persons[1].ID);
            Assert.AreEqual("_x13", item.Persons[2].ID);
        }
示例#11
0
 public static AwardItem instance()
 {
     if (_instance == null)
     {
         _instance = new AwardItem();
     }
     return(_instance);
 }
        public string ProcRoleGetAward(GameClient client, int awardid)
        {
            JieriGiveErrorCode ec = JieriGiveErrorCode.Success;

            if (!this.InAwardTime())
            {
                ec = JieriGiveErrorCode.NotAwardTime;
            }
            else if (!this.HasEnoughBagSpaceForAwardGoods(client, awardid))
            {
                ec = JieriGiveErrorCode.NoBagSpace;
            }
            else
            {
                AwardItem           allItem  = null;
                AwardItem           occItem  = null;
                AwardEffectTimeItem timeItem = null;
                if (!this.allAwardDict.TryGetValue(awardid, out allItem) || !this.occAwardDict.TryGetValue(awardid, out occItem) || !this.timeAwardDict.TryGetValue(awardid, out timeItem))
                {
                    ec = JieriGiveErrorCode.ConfigError;
                }
                else
                {
                    lock (this._allMemberMutex)
                    {
                        JieriGiveKingItemData myData = this.GetClientGiveKingInfo(client);
                        if (myData == null || myData.TotalGive < allItem.MinAwardCondionValue || myData.GetAwardTimes > 0 || myData.Rank != awardid)
                        {
                            ec = JieriGiveErrorCode.NotMeetAwardCond;
                            goto IL_1CB;
                        }
                        string   dbReq = string.Format("{0}:{1}:{2}", client.ClientData.RoleID, this.FromDate.Replace(':', '$'), this.ToDate.Replace(':', '$'));
                        string[] dbRsp = Global.ExecuteDBCmd(13205, dbReq, client.ServerId);
                        if (dbRsp == null || dbRsp.Length != 1 || Convert.ToInt32(dbRsp[0]) <= 0)
                        {
                            ec = JieriGiveErrorCode.DBFailed;
                            goto IL_1CB;
                        }
                        myData.GetAwardTimes = 1;
                    }
                    if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem()))
                    {
                        LogManager.WriteLog(LogTypes.Error, string.Format("发送节日赠送王奖励的时候,发送失败,但是设置领奖成功,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid), null, true);
                    }
                    ec = JieriGiveErrorCode.Success;
                }
            }
IL_1CB:
            if (ec == JieriGiveErrorCode.Success)
            {
                if (client._IconStateMgr.CheckJieriGiveKing(client))
                {
                    client._IconStateMgr.AddFlushIconState(14000, client._IconStateMgr.IsAnyJieRiTipActived());
                    client._IconStateMgr.SendIconStateToClient(client);
                }
            }
            return(string.Format("{0}:{1}", (int)ec, awardid));
        }
示例#13
0
        public override bool GiveAward(GameClient client)
        {
            AwardItem myAwardItem = new AwardItem();

            myAwardItem.GoodsDataList = this.OneDollarChongZhiData.GoodsDataListOne;
            base.GiveAward(client, myAwardItem);
            myAwardItem.GoodsDataList = this.OneDollarChongZhiData.GoodsDataListTwo;
            base.GiveAward(client, myAwardItem);
            return(true);
        }
示例#14
0
        public AwardItem GetOccAward(int _params)
        {
            AwardItem myOccAward = null;

            if (this.OccAwardItemDict.ContainsKey(_params))
            {
                myOccAward = this.OccAwardItemDict[_params];
            }
            return(myOccAward);
        }
示例#15
0
        public static AwardItem GenerateItem(Transform layout)
        {
            if (layout == null)
            {
                return(null);
            }
            AwardItem _item = new AwardItem();

            _item.m_Cell = UniversalItemCell.GenerateItem(layout);
            return(_item);
        }
示例#16
0
        public void RetrieveAdditionalInformationTest_withInvalidID(string value)
        {
            // Arrange
            AwardItem item = new AwardItem("_aa1", "Award");

            item.BaseTableName = value;

            // Act
            int count = item.RetrieveAdditionalInformation();

            // Assert
            Assert.AreEqual(0, count);
        }
示例#17
0
        public override bool HasEnoughBagSpaceForAwardGoods(GameClient client)
        {
            bool result;

            if (null == client)
            {
                result = false;
            }
            else
            {
                int       occupation = client.ClientData.Occupation;
                AwardItem myOccAward = this.GetOccAward(occupation);
                result = ((this.MyAwardItem.GoodsDataList.Count <= 0 && (myOccAward == null || myOccAward.GoodsDataList.Count <= 0)) || Global.CanAddGoodsDataList(client, this.MyAwardItem.GoodsDataList));
            }
            return(result);
        }
        private void buildRankingList(List <JieriGiveKingItemData> rankingList)
        {
            rankingList.Sort(delegate(JieriGiveKingItemData left, JieriGiveKingItemData right)
            {
                int result;
                if (left.TotalGive > right.TotalGive)
                {
                    result = -1;
                }
                else if (left.TotalGive == right.TotalGive)
                {
                    result = left.RoleID - right.RoleID;
                }
                else
                {
                    result = 1;
                }
                return(result);
            });
            int procListIdx = 0;
            int i           = 1;

            while (i <= this.RANK_LVL_CNT && procListIdx < rankingList.Count)
            {
                AwardItem award = null;
                if (this.allAwardDict.TryGetValue(i, out award))
                {
                    JieriGiveKingItemData kingItem = rankingList[procListIdx];
                    if (kingItem.TotalGive >= award.MinAwardCondionValue)
                    {
                        kingItem.Rank = i;
                        procListIdx++;
                    }
                }
                i++;
            }
            this.RoleCountInList = procListIdx;
            for (i = rankingList.Count - 1; i >= procListIdx; i--)
            {
                rankingList[i].Rank = -1;
                if (i >= this.RANK_LVL_CNT)
                {
                    rankingList.RemoveAt(i);
                }
            }
        }
示例#19
0
        private List <AwardItem> AwardItems()
        {
            List <AwardItem> awardItems = new List <AwardItem>();

            int maxTries = 50;

            do
            {
                AwardItem awardItem = _config.AwardItems.GetRandom();

                if (!awardItems.Contains(awardItem))
                {
                    awardItems.Add(awardItem);
                }
            } while (awardItems.Count < _config.AwardItemsMax && maxTries-- > 0);

            return(awardItems);
        }
示例#20
0
    private void LoadAwardItem()
    {
        var _itemMap = m_WorldBossManager.m_DropItemMap;

        foreach (var data in _itemMap)
        {
            if (data.Value == 0)
            {
                continue;
            }

            AwardItem _item = AwardItem.GenerateItem(m_AwardListLayout);
            if (_item != null)
            {
                _item.SetItemInfo(data.Key, data.Value);
            }
        }
    }
示例#21
0
        public void RetrieveAdditionalInformationTest_withValidID(string value)
        {
            // Arrange
            AwardItem item = new AwardItem("_xx1", "Award");

            item.BaseTableName = value;

            // Act
            int count = item.RetrieveAdditionalInformation();

            // Assert
            Assert.AreEqual(3, count);

            Assert.AreEqual(3, item.Persons.Count);
            Assert.AreEqual("_x11", item.Persons[0].ID);
            Assert.AreEqual("_x12", item.Persons[1].ID);
            Assert.AreEqual("_x13", item.Persons[2].ID);
        }
示例#22
0
        public IHttpActionResult CreateAwardForUserProfile(Guid userProfileId, [FromBody] AwardItem award)
        {
            try
            {
                var newAward = DataRepository.Instance.CreateAwardForUserProfile(userProfileId, award.AwardName, award.EarnedValue);

                if (newAward == null)
                {
                    return(NotFound());
                }

                return(Ok(newAward));
            }
            catch
            {
                return(InternalServerError());
            }
        }
示例#23
0
        // 构建排行榜数据,分两步
        // 1: 排序
        // 2: 根据每个档次的赠送数量限制,进行剔除
        private void buildRankingList(List <JieriGiveKingItemData> rankingList)
        {
            rankingList.Sort((left, right) =>
            {
                if (left.TotalGive > right.TotalGive)
                {
                    return(-1);
                }
                else if (left.TotalGive == right.TotalGive)
                {
                    // 赠送数量一样,按角色id从小到大排序
                    return(left.RoleID - right.RoleID);
                }
                else
                {
                    return(1);
                }
            });

            int procListIdx = 0;

            for (int i = 1; i <= RANK_LVL_CNT && procListIdx < rankingList.Count; ++i)
            {
                AwardItem award = null;
                if (!allAwardDict.TryGetValue(i, out award))
                {
                    continue;
                }

                JieriGiveKingItemData kingItem = rankingList[procListIdx];
                if (kingItem.TotalGive >= award.MinAwardCondionValue)
                {
                    kingItem.Rank = i;
                    ++procListIdx;
                }
            }

            // 虽然进入了前N名,但是最小赠送次数不满足,剔除数据
            for (int i = rankingList.Count - 1; i >= procListIdx; --i)
            {
                rankingList[i].Rank = -1;
                rankingList.RemoveAt(i);
            }
        }
示例#24
0
        public override bool GiveAward(GameClient client, int _params)
        {
            DateTime startTime = DateTime.Parse(this.FromDate);
            DateTime endTime   = DateTime.Parse(this.ToDate);

            JieriPlatChargeKingEveryDay.ChargeItem ci = null;
            bool result;

            if (!this.IdVsChargeItemDict.TryGetValue(_params, out ci))
            {
                result = false;
            }
            else
            {
                string huoDongKeyStr = Global.GetHuoDongKeyString(this.FromDate, this.ToDate);
                int    ret           = KFCopyRpcClient.getInstance().UpdateHuodongAwardUserHist(77, huoDongKeyStr, client.strUserID, ci.Day);
                if (ret < 0)
                {
                    result = false;
                }
                else
                {
                    AwardItem           allItem  = ci.allAwardGoodsOne;
                    AwardItem           occItem  = ci.occAwardGoodsTwo;
                    AwardEffectTimeItem timeItem = ci.timeAwardGoodsThr;
                    if (!base.GiveAward(client, allItem) || !base.GiveAward(client, occItem) || !base.GiveEffectiveTimeAward(client, timeItem.ToAwardItem()))
                    {
                        string errLogMsg = string.Format("发送节日每日平台充值王奖励的时候,发送失败,但是已经设置为领取成功, roleid={0}, rolename={1}, id={3}", client.ClientData.RoleID, client.ClientData.RoleName, _params);
                        LogManager.WriteLog(LogTypes.Error, errLogMsg, null, true);
                        result = false;
                    }
                    else
                    {
                        if (client._IconStateMgr.CheckJieRiPCKingEveryDay(client))
                        {
                            client._IconStateMgr.SendIconStateToClient(client);
                        }
                        result = true;
                    }
                }
            }
            return(result);
        }
示例#25
0
        public override bool GiveAward(GameClient client, int _params)
        {
            bool result;

            if (!this.InAwardTime())
            {
                result = false;
            }
            else
            {
                JieriVIPYouHuiActivityConfig configData = null;
                if (!this.VIPYouHuiCofigDict.TryGetValue(_params, out configData))
                {
                    result = false;
                }
                else
                {
                    if (configData.Price > 0)
                    {
                        if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, configData.Price, "节日活动VIP优惠", true, true, false, DaiBiSySType.None))
                        {
                            return(false);
                        }
                    }
                    AwardItem myAwardItem = new AwardItem();
                    myAwardItem.GoodsDataList = configData.GoodsDataListOne;
                    base.GiveAward(client, myAwardItem);
                    myAwardItem.GoodsDataList = configData.GoodsDataListTwo;
                    base.GiveAward(client, myAwardItem);
                    myAwardItem = configData.GoodsDataListThr.ToAwardItem();
                    base.GiveEffectiveTimeAward(client, myAwardItem);
                    this.UpdateSinglePurchase(client, _params);
                    this.UpdateFullPurchase(client, _params);
                    result = true;
                }
            }
            return(result);
        }
示例#26
0
        public void AwardItemTest_withID()
        {
            // Arrange
            AwardItem item = new AwardItem("_xx1", "Award");

            // Act
            // Assert
            Assert.IsNotNull(item);
            Assert.IsNotNull(item.Reader);
            Assert.AreEqual("", item.BaseTableName);
            Assert.AreEqual("Award", item.TargetTableName);

            Assert.AreEqual("_xx1", item.ID);
            Assert.IsNull(item.Award);
            Assert.IsNull(item.Category);
            Assert.IsNull(item.Date);
            Assert.IsNull(item.Winner);
            Assert.IsNull(item.Details);
            Assert.IsNull(item.Status);
            Assert.IsNull(item.LastUpdated);

            Assert.IsNull(item.Persons);
        }
示例#27
0
        public void RetrieveTest_withInvalidID_AdditionalInfo(string value)
        {
            // Arrange
            AwardItem item = new AwardItem("_aa1", "Award");

            item.BaseTableName = value;

            // Act
            int count = item.Retrieve(false);

            // Assert
            Assert.AreEqual(0, count);

            Assert.AreEqual("_aa1", item.ID);
            Assert.IsNull(item.Award);
            Assert.IsNull(item.Category);
            Assert.IsNull(item.Date);
            Assert.IsNull(item.Winner);
            Assert.IsNull(item.Details);
            Assert.IsNull(item.Status);
            Assert.IsNull(item.LastUpdated);

            Assert.AreEqual(0, item.Persons.Count);
        }
示例#28
0
        public void RetrieveBasicInformationTest_withValidID_BasicInfoOnly(string value)
        {
            // Arrange
            AwardItem item = new AwardItem("_xx1", "Award");

            item.BaseTableName = value;

            // Act
            int count = item.RetrieveBasicInformation(true);

            // Assert
            Assert.AreEqual(1, count);

            Assert.AreEqual("_xx1", item.ID);
            Assert.AreEqual("_xxx", item.Award.ID);
            Assert.AreEqual($"{value} Award Category X1", item.Category);
            Assert.AreEqual($"{value} Award Date X1", item.Date);
            Assert.AreEqual($"1", item.Winner);
            Assert.AreEqual($"{value} Award Details X1", item.Details);
            Assert.AreEqual("_xxx", item.Status.ID);
            Assert.AreEqual($"{value} Award LastUpdated X1", item.LastUpdated);

            Assert.IsNull(item.Persons);
        }
        private static List<AwardItem> CalculateAwards(ZkDataContext db)
        {
            var monthStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            var validAwards =
                db.SpringBattles.Where(
                        x =>
                            (x.StartTime >= monthStart) && (x.HasBots == false) &&
                            (x.ResourceByMapResourceID.MapSupportLevel >= MapSupportLevel.Supported) && (x.ResourceByMapResourceID.MapIsSpecial == false))
                    .SelectMany(x => x.AccountBattleAwards)
                    .GroupBy(x => x.AwardKey);

            var awardItems = new List<AwardItem>();

            foreach (var awardsByType in validAwards)
            {
                var awardType = awardsByType.Key;

                var awardCounts =
                    awardsByType.GroupBy(x => x.Account).Select(x => new { Account = x.Key, Count = x.Count() }).OrderByDescending(x => x.Count);

                var topCountM = awardCounts.First().Count;
                var topCollectorsM = new List<Account>();
                foreach (var award in awardCounts)
                    if (award.Count == topCountM) topCollectorsM.Add(award.Account);
                    else break;

                var topScore = 0;
                string titleName = null;

                topScore = 0;
                var fullTitleM = "";
                var topActID = 0;
                var topBattleID = 0;
                foreach (var award in awardsByType)
                {
                    if (titleName == null) titleName = award.AwardDescription.Split(',').First();
                    int score;
                    if (int.TryParse(Regex.Replace(award.AwardDescription, @"\D", string.Empty), out score))
                        if (score > topScore)
                        {
                            topActID = award.AccountID;
                            topBattleID = award.SpringBattleID;
                            topScore = score;
                            fullTitleM = string.Join(" ", award.AwardDescription.Split(',').Skip(1));
                        }
                }

                var awardItem = new AwardItem
                {
                    AwardType = awardType,
                    AwardTitle = titleName,
                    TopScoreHolderM = db.Accounts.SingleOrDefault(x => x.AccountID == topActID),
                    TopScoreDescM = fullTitleM,
                    TopScoreBattlePlayerM =
                        db.SpringBattlePlayers.Include(x => x.SpringBattle)
                            .Include(x => x.SpringBattle.ResourceByMapResourceID)
                            .SingleOrDefault(x => (x.AccountID == topActID) && (x.SpringBattleID == topBattleID)),
                    TopCollectorsM = topCollectorsM,
                    TopCollectorCountM = topCountM
                };
                awardItems.Add(awardItem);
            }
            return awardItems;
        }
示例#30
0
        public bool Init()
        {
            try
            {
                GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(CfgFile));
                XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(CfgFile));
                if (null == xml)
                {
                    return(false);
                }

                XElement args = xml.Element("Activities");
                if (null != args)
                {
                    FromDate     = Global.GetSafeAttributeStr(args, "FromDate");
                    ToDate       = Global.GetSafeAttributeStr(args, "ToDate");
                    ActivityType = (int)Global.GetSafeAttributeLong(args, "ActivityType");

                    AwardStartDate = Global.GetSafeAttributeStr(args, "AwardStartDate");
                    AwardEndDate   = Global.GetSafeAttributeStr(args, "AwardEndDate");
                }

                args = xml.Element("GiftList");
                if (null != args)
                {
                    IEnumerable <XElement> xmlItems = args.Elements();
                    foreach (var xmlItem in xmlItems)
                    {
                        if (null != xmlItem)
                        {
                            AwardItem           myAwardItem   = new AwardItem();
                            AwardItem           myAwardItem2  = new AwardItem();
                            AwardEffectTimeItem timeAwardItem = new AwardEffectTimeItem();

                            myAwardItem.MinAwardCondionValue = Global.GMax(0, (int)Global.GetSafeAttributeLong(xmlItem, "MinYuanBao"));
                            myAwardItem.AwardYuanBao         = 0;

                            string goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsOne");
                            if (string.IsNullOrEmpty(goodsIDs))
                            {
                                LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile));
                            }
                            else
                            {
                                string[] fields = goodsIDs.Split('|');
                                if (fields.Length <= 0)
                                {
                                    LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile));
                                }
                                else
                                {
                                    myAwardItem.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置");
                                }
                            }

                            goodsIDs = Global.GetSafeAttributeStr(xmlItem, "GoodsTwo");
                            if (string.IsNullOrEmpty(goodsIDs))
                            {
                                //LogManager.WriteLog(LogTypes.Warning, string.Format("读取大型节日消费王活动配置文件中的物品配置项1失败"));
                            }
                            else
                            {
                                string[] fields = goodsIDs.Split('|');
                                if (fields.Length <= 0)
                                {
                                    LogManager.WriteLog(LogTypes.Warning, string.Format("读取{0}配置文件中的物品配置项失败", CfgFile));
                                }
                                else
                                {
                                    //将物品字符串列表解析成物品数据列表
                                    myAwardItem2.GoodsDataList = HuodongCachingMgr.ParseGoodsDataList(fields, "大型节日赠送王活动配置");
                                }
                            }

                            string timeGoods = Global.GetSafeAttributeStr(xmlItem, "GoodsThr");
                            string timeList  = Global.GetSafeAttributeStr(xmlItem, "EffectiveTime");
                            timeAwardItem.Init(timeGoods, timeList, "大型节日赠送王时效性物品活动配置");

                            string   rankings = Global.GetSafeAttributeStr(xmlItem, "Ranking");
                            string[] paiHangs = rankings.Split('-');

                            if (paiHangs.Length <= 0)
                            {
                                continue;
                            }

                            int min = Global.SafeConvertToInt32(paiHangs[0]);
                            int max = Global.SafeConvertToInt32(paiHangs[paiHangs.Length - 1]);

                            //设置排行奖励
                            for (int paiHang = min; paiHang <= max; paiHang++)
                            {
                                allAwardDict.Add(paiHang, myAwardItem);
                                occAwardDict.Add(paiHang, myAwardItem2);
                                timeAwardDict.Add(paiHang, timeAwardItem);
                            }
                        }
                    }
                }

                PredealDateTime();
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", CfgFile, ex.Message));

                return(false);
            }
            return(true);
        }
示例#31
0
        // 客户端请求领取奖励 return `ec:awardid`
        public string ProcRoleGetAward(GameClient client, int awardid)
        {
            JieriGiveErrorCode ec = JieriGiveErrorCode.Success;

            do
            {
                if (!InAwardTime())
                {
                    ec = JieriGiveErrorCode.NotAwardTime;
                    break;
                }

                if (!HasEnoughBagSpaceForAwardGoods(client, awardid))
                {
                    ec = JieriGiveErrorCode.NoBagSpace;
                    break;
                }

                AwardItem           allItem = null, occItem = null;
                AwardEffectTimeItem timeItem = null;
                if (!allAwardDict.TryGetValue(awardid, out allItem) || !occAwardDict.TryGetValue(awardid, out occItem) ||
                    !timeAwardDict.TryGetValue(awardid, out timeItem))
                {
                    ec = JieriGiveErrorCode.ConfigError;
                    break;
                }

                lock (_allMemberMutex)
                {
                    JieriGiveKingItemData myData = GetClientGiveKingInfo(client);
                    if (myData == null || myData.TotalGive < allItem.MinAwardCondionValue || myData.GetAwardTimes > 0 || myData.Rank != awardid)
                    {
                        ec = JieriGiveErrorCode.NotMeetAwardCond;
                        break;
                    }
                    string   dbReq = string.Format("{0}:{1}:{2}", client.ClientData.RoleID, FromDate.Replace(':', '$'), ToDate.Replace(':', '$'));
                    string[] dbRsp = Global.ExecuteDBCmd((int)TCPGameServerCmds.CMD_DB_GET_JIERI_GIVE_KING_AWARD, dbReq, client.ServerId);
                    if (dbRsp == null || dbRsp.Length != 1 || Convert.ToInt32(dbRsp[0]) <= 0)
                    {
                        ec = JieriGiveErrorCode.DBFailed;
                        break;
                    }

                    myData.GetAwardTimes = 1;
                }

                if (!GiveAward(client, allItem) || !GiveAward(client, occItem) || !GiveEffectiveTimeAward(client, timeItem.ToAwardItem()))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("发送节日赠送王奖励的时候,发送失败,但是设置领奖成功,roleid={0}, rolename={1}, awardid={3}", client.ClientData.RoleID, client.ClientData.RoleName, awardid));
                }
                ec = JieriGiveErrorCode.Success;
            } while (false);

            if (ec == JieriGiveErrorCode.Success)
            {
                if (client._IconStateMgr.CheckJieriGiveKing(client))
                {
                    client._IconStateMgr.AddFlushIconState((ushort)ActivityTipTypes.JieRiActivity, client._IconStateMgr.IsAnyJieRiTipActived());
                    client._IconStateMgr.SendIconStateToClient(client);
                }
            }

            return(string.Format("{0}:{1}", (int)ec, awardid));
        }
        /// <summary>
        /// Returns information for ladder, awards hall of fame page
        /// </summary>
        /// <returns></returns>
        private LadderModel GetLadder() {
            var db = new ZkDataContext();
            db.Database.CommandTimeout = 600;

            var monthStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            var validAwards =
                db.SpringBattles.Where(x => x.StartTime >= monthStart && !x.ResourceByMapResourceID.InternalName.Contains("SpeedMetal"))
                    .SelectMany(x => x.AccountBattleAwards)
                    .GroupBy(x => x.AwardKey);

            var awardItems = new List<AwardItem>();

            foreach (var awardsByType in validAwards)
            {
                var awardType = awardsByType.Key;

                var awardCounts =
                    awardsByType.GroupBy(x => x.Account).Select(x => new { Account = x.Key, Count = x.Count() }).OrderByDescending(x => x.Count);

                var topCountM = awardCounts.First().Count;
                var topCollectorsM = new List<Account>();
                foreach (var award in awardCounts)
                {
                    if (award.Count == topCountM) topCollectorsM.Add(award.Account);
                    else break;
                }

                var topScore = 0;
                string titleName = null;

                topScore = 0;
                var fullTitleM = "";
                var topActID = 0;
                var topBattleID = 0;
                foreach (var award in awardsByType)
                {
                    if (titleName == null) titleName = award.AwardDescription.Split(',').First();
                    int score;
                    if (int.TryParse(Regex.Replace(award.AwardDescription, @"\D", string.Empty), out score))
                    {
                        if (score > topScore)
                        {
                            topActID = award.AccountID;
                            topBattleID = award.SpringBattleID;
                            topScore = score;
                            fullTitleM = string.Join(" ", award.AwardDescription.Split(',').Skip(1));
                        }
                    }
                }

                var awardItem = new AwardItem
                {
                    AwardType = awardType,
                    AwardTitle = titleName,
                    TopScoreHolderM = db.Accounts.SingleOrDefault(x => x.AccountID == topActID),
                    TopScoreDescM = fullTitleM,
                    TopScoreBattlePlayerM = db.SpringBattlePlayers.SingleOrDefault(x => x.AccountID == topActID && x.SpringBattleID == topBattleID),
                    TopCollectorsM = topCollectorsM,
                    TopCollectorCountM = topCountM
                };
                awardItems.Add(awardItem);
            }

            var ladderTimeout = DateTime.UtcNow.AddDays(-GlobalConst.LadderActivityDays);
            var top50Accounts =
                db.Accounts.Where(x => x.SpringBattlePlayers.Any(y => y.SpringBattle.StartTime > ladderTimeout))
                    .Include(x => x.Clan)
                    .Include(x => x.Faction)
                    .OrderByDescending(x => x.Effective1v1Elo)
                    .WithTranslations()
                    .Take(50)
                    .ToList();

            var top50Teams =
                db.Accounts.Where(x => x.SpringBattlePlayers.Any(y => y.SpringBattle.StartTime > ladderTimeout))
                    .Include(x => x.Clan)
                    .Include(x => x.Faction)
                    .OrderByDescending(x => x.EffectiveElo)
                    .WithTranslations()
                    .Take(50)
                    .ToList();

            return new LadderModel { AwardItems = awardItems, Top50Accounts = top50Accounts, Top50Teams = top50Teams };
        }