示例#1
0
        public static int ProcessHorseUpgrade(GameClient client, int horseDbID, bool allowAutoBuy)
        {
            HorseData horseData = Global.GetHorseDataByDbID(client, horseDbID);
            int       result;

            if (null == horseData)
            {
                result = -1;
            }
            else
            {
                SystemXmlItem horseUpXmlNode = Global.GetHorseUpXmlNode(horseData.HorseID + 1);
                if (null == horseUpXmlNode)
                {
                    result = -35;
                }
                else
                {
                    int horseUpgradeGoodsID  = 0;
                    int horseUpgradeGoodsNum = 0;
                    Global.ParseHorseJinJieFu(horseData.HorseID, out horseUpgradeGoodsID, out horseUpgradeGoodsNum, horseUpXmlNode);
                    if (horseUpgradeGoodsID <= 0)
                    {
                        result = -20;
                    }
                    else if (horseData.HorseID >= Global.MaxHorseID)
                    {
                        result = -30;
                    }
                    else
                    {
                        int needYinLiang = Global.GMax(horseUpXmlNode.GetIntValue("UseYinLiang", -1), 0);
                        needYinLiang = Global.RecalcNeedYinLiang(needYinLiang);
                        if (client.ClientData.YinLiang < needYinLiang)
                        {
                            result = -60;
                        }
                        else
                        {
                            int needBuyGoodsNum = 0;
                            int needGoodsNum    = Global.GMax(horseUpgradeGoodsNum, 0);
                            int needSubGoodsNum = needGoodsNum;
                            if (Global.GetTotalGoodsCountByID(client, horseUpgradeGoodsID) < needGoodsNum)
                            {
                                if (!allowAutoBuy)
                                {
                                    return(-70);
                                }
                                needSubGoodsNum = Global.GetTotalGoodsCountByID(client, horseUpgradeGoodsID);
                                needBuyGoodsNum = needGoodsNum - needSubGoodsNum;
                            }
                            bool usedBinding     = false;
                            bool usedTimeLimited = false;
                            if (needSubGoodsNum > 0)
                            {
                                if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, horseUpgradeGoodsID, needSubGoodsNum, false, out usedBinding, out usedTimeLimited, false))
                                {
                                    return(-70);
                                }
                            }
                            if (needBuyGoodsNum > 0)
                            {
                                int ret = Global.SubUserMoneyForGoods(client, horseUpgradeGoodsID, needBuyGoodsNum, "坐骑进阶");
                                if (ret <= 0)
                                {
                                    return(ret);
                                }
                            }
                            if (!GameManager.ClientMgr.SubUserYinLiang(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, needYinLiang, "坐骑进阶", false))
                            {
                                result = -60;
                            }
                            else
                            {
                                int    horseOne        = 110000 - horseUpXmlNode.GetIntValue("HorseOne", -1);
                                int    horseTwo        = 110000 - horseUpXmlNode.GetIntValue("HorseTwo", -1);
                                double horseThree      = horseUpXmlNode.GetDoubleValue("HorseThree");
                                int    jinJieFailedNum = Global.GetHorseFailedNum(horseData);
                                if (jinJieFailedNum < horseTwo)
                                {
                                    Global.AddHorseFailedNum(horseData, 1);
                                    Global.UpdateHorseIDDBCommand(Global._TCPManager.TcpOutPacketPool, client, horseData.DbID, horseData.HorseID, horseData.JinJieFailedNum, Global.GetHorseStrTempTime(horseData), horseData.JinJieTempNum, horseData.JinJieFailedDayID);
                                    Global.AddRoleHorseUpgradeEvent(client, horseData.DbID, horseData.HorseID, horseData.JinJieFailedNum, Global.GetHorseStrTempTime(horseData), horseData.JinJieTempNum, horseData.JinJieFailedDayID, "失败");
                                    result = -1000;
                                }
                                else
                                {
                                    if (jinJieFailedNum < horseOne - 1)
                                    {
                                        int successRate = (int)(horseThree * 10000.0);
                                        int randNum     = Global.GetRandomNumber(1, 10001);
                                        if (client.ClientData.TempHorseUpLevelRate != 1)
                                        {
                                            successRate *= client.ClientData.TempHorseUpLevelRate;
                                            successRate  = Global.GMin(10000, successRate);
                                        }
                                        if (randNum > successRate)
                                        {
                                            Global.AddHorseFailedNum(horseData, 1);
                                            Global.UpdateHorseIDDBCommand(Global._TCPManager.TcpOutPacketPool, client, horseData.DbID, horseData.HorseID, horseData.JinJieFailedNum, Global.GetHorseStrTempTime(horseData), horseData.JinJieTempNum, horseData.JinJieFailedDayID);
                                            Global.AddRoleHorseUpgradeEvent(client, horseData.DbID, horseData.HorseID, horseData.JinJieFailedNum, Global.GetHorseStrTempTime(horseData), horseData.JinJieTempNum, horseData.JinJieFailedDayID, "失败");
                                            return(-1000);
                                        }
                                    }
                                    result = ProcessHorse.ProcessHorseUpgradeNow(client, horseDbID, horseData);
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 获取五行奇阵的奖励,一天只能获取一次
        /// </summary>
        /// <param name="client"></param>
        public static void ProcessWuXingAward(GameClient client)
        {
            //已经领取过了,就不能再领取
            if (!CanGetWuXingAward(client))
            {
                return;
            }

            if (null == TheWuXingMapAwardItem)
            {
                return;
            }

            if (null != TheWuXingMapAwardItem.GoodsDataList)
            {
                //判断背包是否空间足够
                if (!Global.CanAddGoodsDataList(client, TheWuXingMapAwardItem.GoodsDataList))
                {
                    GameManager.ClientMgr.NotifyImportantMsg(
                        Global._TCPManager.MySocketListener,
                        Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("背包中空格不足,请清理出足够的空格后,再获取五行奇阵的奖励")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.NoBagGrid);
                    return;
                }
            }

            int blessPoint = 0;

            //判断如果有坐骑的祝福点奖励,则要判断是否在骑乘状态
            if (TheWuXingMapAwardItem.MinBlessPoint >= 0 && TheWuXingMapAwardItem.MaxBlessPoint >= 0)
            {
                blessPoint = Global.GetRandomNumber(TheWuXingMapAwardItem.MinBlessPoint, TheWuXingMapAwardItem.MaxBlessPoint);
                if (blessPoint > 0)
                {
                    if (client.ClientData.HorseDbID <= 0)
                    {
                        GameManager.ClientMgr.NotifyImportantMsg(
                            Global._TCPManager.MySocketListener,
                            Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("获取五行奇阵的奖励的坐骑临时养成点,必须处于骑乘状态")), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.None);

                        return;
                    }
                }
            }

            if (Global.FilterFallGoods(client)) //是否奖励物品
            {
                //奖励用户物品
                if (null != TheWuXingMapAwardItem.GoodsDataList)
                {
                    for (int i = 0; i < TheWuXingMapAwardItem.GoodsDataList.Count; i++)
                    {
                        //想DBServer请求加入某个新的物品到背包中
                        //添加物品
                        Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool,
                                                 client, TheWuXingMapAwardItem.GoodsDataList[i].GoodsID, TheWuXingMapAwardItem.GoodsDataList[i].GCount, TheWuXingMapAwardItem.GoodsDataList[i].Quality, "", TheWuXingMapAwardItem.GoodsDataList[i].Forge_level, TheWuXingMapAwardItem.GoodsDataList[i].Binding, 0, "", true, 1, "五行奇阵奖励物品", Global.ConstGoodsEndTime, TheWuXingMapAwardItem.GoodsDataList[i].AddPropIndex, TheWuXingMapAwardItem.GoodsDataList[i].BornIndex, TheWuXingMapAwardItem.GoodsDataList[i].Lucky, TheWuXingMapAwardItem.GoodsDataList[i].Strong);
                    }
                }
            }

            //添加角色的ID+日期的ID的奖励领取状态
            //更新角色的日常数据_五行奇阵领取奖励数量
            GameManager.ClientMgr.UpdateRoleDailyData_WuXingNum(client, 1);

            //奖励用户经验
            //异步写数据库,写入经验和级别
            double expXiShu   = TheWuXingMapAwardItem.ExpXiShu;
            int    experience = (int)Math.Pow(client.ClientData.Level, expXiShu);

            //处理VIP月卡
            if (DBRoleBufferManager.ProcessMonthVIP(client) > 0.0)
            {
                experience = (int)(experience * 1.50);
            }

            //处理角色经验
            GameManager.ClientMgr.ProcessRoleExperience(client, experience, true, false);

            //五行奇阵通关获取经验通知
            Global.BroadcastWuXingExperience(client, experience);

            //奖励用户金钱
            //异步写数据库,写入金钱
            int money = TheWuXingMapAwardItem.Money1;

            if (-1 != money)
            {
                //过滤金币奖励
                money = Global.FilterValue(client, money);

                //更新用户的铜钱
                GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, "五行奇阵", false);

                GameManager.SystemServerEvents.AddEvent(string.Format("角色获取金钱, roleID={0}({1}), Money={2}, newMoney={3}", client.ClientData.RoleID, client.ClientData.RoleName, client.ClientData.Money1, money), EventLevels.Record);
            }

            //获取当前正在骑乘的坐骑的进阶养成点
            int currentHorseBlessPoint = ProcessHorse.GetCurrentHorseBlessPoint(client);

            if (currentHorseBlessPoint > 0 && blessPoint > 0)
            {
                double blessPointPercent = blessPoint / 100.0;
                blessPoint = (int)(blessPointPercent * currentHorseBlessPoint);

                //过滤养成点奖励
                blessPoint = Global.FilterValue(client, blessPoint);

                //为指定的坐骑增加养成点(临时或者永久)
                ProcessHorse.ProcessAddHorseAwardLucky(client, blessPoint, true, "五行奇阵奖励");
            }

            Global.AddWuXingAwardEvent(client, experience, blessPoint);
        }
示例#3
0
 public static void ProcessWuXingAward(GameClient client)
 {
     if (WuXingMapMgr.CanGetWuXingAward(client))
     {
         if (null != WuXingMapMgr.TheWuXingMapAwardItem)
         {
             if (null != WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList)
             {
                 if (!Global.CanAddGoodsDataList(client, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList))
                 {
                     GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(574, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 1);
                     return;
                 }
             }
             int blessPoint = 0;
             if (WuXingMapMgr.TheWuXingMapAwardItem.MinBlessPoint >= 0 && WuXingMapMgr.TheWuXingMapAwardItem.MaxBlessPoint >= 0)
             {
                 blessPoint = Global.GetRandomNumber(WuXingMapMgr.TheWuXingMapAwardItem.MinBlessPoint, WuXingMapMgr.TheWuXingMapAwardItem.MaxBlessPoint);
                 if (blessPoint > 0)
                 {
                     if (client.ClientData.HorseDbID <= 0)
                     {
                         GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(575, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0);
                         return;
                     }
                 }
             }
             if (Global.FilterFallGoods(client))
             {
                 if (null != WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList)
                 {
                     for (int i = 0; i < WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList.Count; i++)
                     {
                         Global.AddGoodsDBCommand(Global._TCPManager.TcpOutPacketPool, client, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].GoodsID, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].GCount, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].Quality, "", WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].Forge_level, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].Binding, 0, "", true, 1, "五行奇阵奖励物品", "1900-01-01 12:00:00", WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].AddPropIndex, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].BornIndex, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].Lucky, WuXingMapMgr.TheWuXingMapAwardItem.GoodsDataList[i].Strong, 0, 0, 0, null, null, 0, true);
                     }
                 }
             }
             GameManager.ClientMgr.UpdateRoleDailyData_WuXingNum(client, 1);
             double expXiShu   = WuXingMapMgr.TheWuXingMapAwardItem.ExpXiShu;
             int    experience = (int)Math.Pow((double)client.ClientData.Level, expXiShu);
             if (DBRoleBufferManager.ProcessMonthVIP(client) > 0.0)
             {
                 experience = (int)((double)experience * 1.5);
             }
             GameManager.ClientMgr.ProcessRoleExperience(client, (long)experience, true, false, false, "none");
             Global.BroadcastWuXingExperience(client, experience);
             int money = WuXingMapMgr.TheWuXingMapAwardItem.Money1;
             if (-1 != money)
             {
                 money = Global.FilterValue(client, money);
                 GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, "五行奇阵", false);
                 GameManager.SystemServerEvents.AddEvent(string.Format("角色获取金钱, roleID={0}({1}), Money={2}, newMoney={3}", new object[]
                 {
                     client.ClientData.RoleID,
                     client.ClientData.RoleName,
                     client.ClientData.Money1,
                     money
                 }), EventLevels.Record);
             }
             int currentHorseBlessPoint = ProcessHorse.GetCurrentHorseBlessPoint(client);
             if (currentHorseBlessPoint > 0 && blessPoint > 0)
             {
                 double blessPointPercent = (double)blessPoint / 100.0;
                 blessPoint = (int)(blessPointPercent * (double)currentHorseBlessPoint);
                 blessPoint = Global.FilterValue(client, blessPoint);
                 ProcessHorse.ProcessAddHorseAwardLucky(client, blessPoint, true, "五行奇阵奖励");
             }
             Global.AddWuXingAwardEvent(client, experience, blessPoint);
         }
     }
 }