예제 #1
0
 private static int _ProcessSuperInputFanLi(DBManager dbMgr, DBUserInfo dbUserInfo, SingleChargeData chargeData, int addUserMoney, int ChargeID, string chargeTm)
 {
     try
     {
         string SuperInputFanLiKey = chargeData.SuperInputFanLiKey;
         if (string.IsNullOrEmpty(SuperInputFanLiKey))
         {
             return(0);
         }
         string[] KeyFileds = SuperInputFanLiKey.Split(new char[]
         {
             '_'
         });
         if (KeyFileds.Length != 2)
         {
             return(0);
         }
         DateTime startTime = DateTime.Parse(KeyFileds[0]);
         DateTime endTime   = DateTime.Parse(KeyFileds[1]);
         if (TimeUtil.NowDateTime() < startTime || TimeUtil.NowDateTime() > endTime)
         {
             return(0);
         }
         JieriSuperInputData configData = UserMoneyMgr.GetJieriSuperInputDataByChargeTm(chargeData, chargeTm);
         if (null == configData)
         {
             return(0);
         }
         string beginStr     = configData.BeginTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(':', '$');
         string endStr       = configData.EndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(':', '$');
         string keyStr       = string.Format("res_{0}_{1}_{2}", beginStr, endStr, configData.ID);
         long   reservetimes = 0L;
         string lastgettime  = "";
         int    ret          = DBQuery.GetAwardHistoryForUser(dbMgr, dbUserInfo.UserID, 71, keyStr, out reservetimes, out lastgettime);
         if (reservetimes <= 0L)
         {
             return(0);
         }
         reservetimes -= 1L;
         lastgettime   = chargeTm;
         ret           = DBWriter.UpdateHongDongAwardRecordForUser(dbMgr, dbUserInfo.UserID, 71, keyStr, reservetimes, lastgettime);
         if (ret < 0)
         {
             ret = DBWriter.AddHongDongAwardRecordForUser(dbMgr, dbUserInfo.UserID, 71, keyStr, reservetimes, lastgettime);
         }
         return(configData.ID);
     }
     catch (Exception ex)
     {
         LogManager.WriteException("_ProcessSuperInputFanLi:" + ex.ToString());
     }
     return(0);
 }
예제 #2
0
        public static TCPProcessCmdResults ProcessDelChargeItemData(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 3)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int SerialID                = Convert.ToInt32(fields[0]);
                int ChargeMoney             = Convert.ToInt32(fields[1]);
                int ReturnUserMoney         = Convert.ToInt32(fields[2]);
                SingleChargeData chargeData = CFirstChargeMgr.ChargeData;
                if (chargeData == null)
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                List <TempItemChargeInfo> tempItemInfoList = DBQuery.QueryTempItemChargeInfo(dbMgr, 0, SerialID, 0);
                if (tempItemInfoList.Count == 0)
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                string     userID       = tempItemInfoList[0].userID;
                int        chargeRoleID = tempItemInfoList[0].chargeRoleID;
                int        addUserMoney = tempItemInfoList[0].addUserMoney;
                int        zhigouID     = tempItemInfoList[0].zhigouID;
                DBUserInfo dbUserInfo   = dbMgr.GetDBUserInfo(userID);
                if (dbUserInfo == null)
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                byte DelState = (byte)((ChargeMoney == 1) ? 2 : 1);
                if (!DBWriter.DeleteChargeItemInfo(dbMgr, SerialID, DelState))
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                if (ChargeMoney == 1)
                {
                    UserMoneyMgr._ProcessCharge(dbMgr, dbUserInfo, chargeRoleID, addUserMoney, 0, "", chargeData, true);
                }
                else if (ReturnUserMoney > 0)
                {
                    UserMoneyMgr._ProcessCharge(dbMgr, dbUserInfo, chargeRoleID, ReturnUserMoney, 0, "", chargeData, true);
                }
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception e)
            {
                LogManager.WriteException("ProcessDelChargeItemData:" + e.ToString());
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
예제 #3
0
        private static void _ProcessCharge(DBManager dbMgr, DBUserInfo dbUserInfo, int chargeRoleID, int addUserMoney, int zhigouID, string chargeTm, SingleChargeData chargeData, bool bZhiGouFail = false)
        {
            int currentGiftID  = GameDBManager.GameConfigMgr.GetGameConfigItemInt("big_award_id", 0);
            int moneyToYuanBao = GameDBManager.GameConfigMgr.GetGameConfigItemInt("money-to-yuanbao", 10);
            int moneyToJiFen   = GameDBManager.GameConfigMgr.GetGameConfigItemInt("money-to-jifen", 1);
            int ChargeID       = 0;

            chargeData.MoneyVsChargeIDDict.TryGetValue(addUserMoney, out ChargeID);
            bool bWillGiveZuanShi     = zhigouID == 0 && (chargeData.ChargePlatType == 1 || addUserMoney != chargeData.YueKaMoney);
            bool bSystemProcessCharge = chargeRoleID == -1;
            bool bProcessBuyItem      = zhigouID != 0 && chargeRoleID > 0;

            lock (dbUserInfo)
            {
                if (bWillGiveZuanShi)
                {
                    dbUserInfo.Money += addUserMoney * moneyToYuanBao;
                    if (dbUserInfo.Money < 0)
                    {
                        LogManager.WriteLog(LogTypes.Error, string.Format("充值后玩家元宝变负数修正为0, UserID={0}, Money={1}, AddMoney={2}", dbUserInfo.UserID, dbUserInfo.Money, addUserMoney), null, true);
                        dbUserInfo.Money = 0;
                    }
                }
                if (!bSystemProcessCharge && !bZhiGouFail)
                {
                    dbUserInfo.RealMoney += addUserMoney;
                    if (dbUserInfo.RealMoney < 0)
                    {
                        LogManager.WriteLog(LogTypes.Error, string.Format("充值后玩家realmoney变负数修正为0, UserID={0}, Money={1}, AddMoney={2}", dbUserInfo.UserID, dbUserInfo.RealMoney, addUserMoney), null, true);
                        dbUserInfo.RealMoney = 0;
                    }
                    if (currentGiftID != dbUserInfo.GiftID)
                    {
                        dbUserInfo.GiftJiFen = 0;
                        dbUserInfo.GiftID    = currentGiftID;
                    }
                    if (dbUserInfo.GiftID > 0)
                    {
                        dbUserInfo.GiftJiFen += addUserMoney * moneyToJiFen;
                    }
                }
                int userMoney = dbUserInfo.Money;
                int realMoney = dbUserInfo.RealMoney;
                int giftID    = dbUserInfo.GiftID;
                int giftJiFen = dbUserInfo.GiftJiFen;
                DBWriter.UpdateUserInfo(dbMgr, dbUserInfo);
            }
            DBRoleInfo dbRoleInfo = Global.FindOnlineRoleInfoByUserInfo(dbMgr, dbUserInfo);

            if (dbRoleInfo != null && !bZhiGouFail)
            {
                DBWriter.UpdateCityInfoItem(dbMgr, dbRoleInfo.LastIP, dbRoleInfo.UserID, "inputmoney", addUserMoney * moneyToYuanBao);
            }
            int rid = chargeRoleID;

            if (!bSystemProcessCharge && !bProcessBuyItem)
            {
                rid = DBQuery.LastLoginRole(dbMgr, dbUserInfo.UserID);
            }
            int addUserYuanBao = Global.TransMoneyToYuanBao(addUserMoney);

            if (bProcessBuyItem)
            {
                UserMoneyMgr._ProcessBuyItem(dbMgr, dbUserInfo, chargeRoleID, addUserMoney, zhigouID, chargeTm);
            }
            int superInputFanLi = 0;

            if (!bProcessBuyItem && addUserMoney != chargeData.YueKaMoney && !bZhiGouFail)
            {
                superInputFanLi = UserMoneyMgr._ProcessSuperInputFanLi(dbMgr, dbUserInfo, chargeData, addUserMoney, ChargeID, chargeTm);
            }
            if (!bSystemProcessCharge && bWillGiveZuanShi)
            {
                CFirstChargeMgr.SendToRolebindgold(dbMgr, dbUserInfo.UserID, rid, addUserMoney, chargeData);
            }
            if (!bSystemProcessCharge && !bZhiGouFail)
            {
                SingletonTemplate <FundManager> .Instance().FundAddMoney(dbUserInfo.UserID, addUserYuanBao, rid, 0);

                GameDBManager.RankCacheMgr.OnUserDoSomething(rid, RankType.Charge, addUserYuanBao);
            }
            string gmCmdData = string.Format("-updateyb {0} {1} {2} {3} {4}", new object[]
            {
                dbUserInfo.UserID,
                rid,
                addUserMoney,
                superInputFanLi,
                zhigouID
            });

            ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
            LogManager.WriteLog(LogTypes.Error, string.Format("处理充值成功 UID={0},money={1},itemid={2}", dbUserInfo.UserID, addUserMoney, zhigouID), null, true);
        }
예제 #4
0
        public static void UpdateUsersMoney(DBManager dbMgr)
        {
            long nowTicks = DateTime.Now.Ticks / 10000L;

            if (nowTicks - UserMoneyMgr.LastUpdateUserMoneyTicks >= 2000L)
            {
                UserMoneyMgr.LastUpdateUserMoneyTicks = nowTicks;
                SingleChargeData chargeData = CFirstChargeMgr.ChargeData;
                if (chargeData == null)
                {
                    if (!UserMoneyMgr.ChargeDataLogState)
                    {
                        UserMoneyMgr.ChargeDataLogState = true;
                        LogManager.WriteLog(LogTypes.Error, "处理充值时找不到ChargeData, " + DateTime.Now.ToString(), null, true);
                    }
                }
                else
                {
                    if (UserMoneyMgr.ChargeDataLogState)
                    {
                        UserMoneyMgr.ChargeDataLogState = false;
                        LogManager.WriteLog(LogTypes.Error, "处理充值时已经获取到了ChargeData, " + DateTime.Now.ToString(), null, true);
                    }
                    List <TempMoneyInfo> tempMoneyInfoList = new List <TempMoneyInfo>();
                    DBQuery.QueryTempMoney(dbMgr, tempMoneyInfoList);
                    if (tempMoneyInfoList.Count > 0)
                    {
                        for (int i = 0; i < tempMoneyInfoList.Count; i++)
                        {
                            string userID       = tempMoneyInfoList[i].userID;
                            int    chargeRoleID = tempMoneyInfoList[i].chargeRoleID;
                            int    addUserMoney = tempMoneyInfoList[i].addUserMoney;
                            int    zhigouID     = tempMoneyInfoList[i].addUserItem;
                            string chargeTm     = tempMoneyInfoList[i].chargeTm;
                            LogManager.WriteLog(LogTypes.Error, string.Format("正在处理充值 UID={0},money={1},itemid={2}", userID, addUserMoney, zhigouID), null, true);
                            DBUserInfo dbUserInfo = dbMgr.GetDBUserInfo(userID);
                            if (dbUserInfo == null)
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("处理充值时找不到user, UID={0},money={1},itemid={2}", userID, addUserMoney, zhigouID), null, true);
                            }
                            else if (zhigouID != 0 && !dbUserInfo.ListRoleIDs.Contains(chargeRoleID))
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("处理充值直购时user内找不到rid, UID={0},rid={1},money={2},itemid={3}", new object[]
                                {
                                    userID,
                                    chargeRoleID,
                                    addUserMoney,
                                    zhigouID
                                }), null, true);
                            }
                            else
                            {
                                UserMoneyMgr._ProcessCharge(dbMgr, dbUserInfo, chargeRoleID, addUserMoney, zhigouID, chargeTm, chargeData, false);
                                if (zhigouID == 0 && addUserMoney == chargeData.YueKaMoney && chargeData.YueKaMoney > 0)
                                {
                                    UserMoneyMgr._ProcessBuyYueKa(dbMgr, dbUserInfo);
                                }
                            }
                        }
                    }
                }
            }
        }