예제 #1
0
 public static void ProcessPaiHang(DBManager dbMgr, bool force = false)
 {
     if (force)
     {
         PaiHangManager.LoadPaiHangLists(dbMgr);
     }
     else
     {
         DateTime dateTime = DateTime.Now;
         long     nowTicks = dateTime.Ticks / 10000L;
         if (nowTicks - PaiHangManager.LastUpdatePaiHangTickTimer >= 1800000L)
         {
             PaiHangManager.LastUpdatePaiHangTickTimer = nowTicks;
             PaiHangManager.LoadPaiHangLists(dbMgr);
         }
         else
         {
             int dayID = dateTime.DayOfYear;
             if (dayID != PaiHangManager.LastCheckPaiHangDayID)
             {
                 PaiHangManager.LastCheckPaiHangDayID = dayID;
                 string gmCmdData = string.Format("-updatepaihangbang", new object[0]);
                 ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
             }
         }
     }
 }
예제 #2
0
        public static void DoDestroyBangHui(DBManager dbMgr, int bhid)
        {
            lock (Global.BangHuiMutex)
            {
                DBWriter.DeleteBangHui(dbMgr, bhid);
                GameDBManager.BangHuiJunQiMgr.RemoveBangHuiJunQi(bhid);
                DBWriter.ClearAllRoleBangHuiInfo(dbMgr, bhid);
                List <DBRoleInfo> dbRoleInfoList = dbMgr.DBRoleMgr.GetCachingDBRoleInfoListByFaction(bhid);
                if (null != dbRoleInfoList)
                {
                    for (int i = 0; i < dbRoleInfoList.Count; i++)
                    {
                        dbRoleInfoList[i].Faction = 0;
                        dbRoleInfoList[i].BHName  = "";
                        dbRoleInfoList[i].BHZhiWu = 0;
                    }
                }
            }
            DBWriter.ClearBHLingDiByID(dbMgr, bhid);
            GameDBManager.BangHuiLingDiMgr.ClearBangHuiLingDi(bhid);
            ZhanMengShiJianManager.getInstance().onZhanMengJieSan(bhid);
            string gmCmdData = string.Format("-synclingdi", new object[0]);

            ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
        }
예제 #3
0
        private static void _ProcessBuyYueKa(DBManager dbMgr, DBUserInfo dbUserInfo)
        {
            int    rid       = DBQuery.LastLoginRole(dbMgr, dbUserInfo.UserID);
            string gmCmdData = string.Format("-buyyueka {0} {1}", dbUserInfo.UserID, rid);

            LogManager.WriteLog(LogTypes.Error, string.Format("处理玩家购买月卡,userid={0}, roleid={1}", dbUserInfo.UserID, rid), null, true);
            ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
        }
예제 #4
0
        public static void ClearBangHuiLingDi(DBManager dbMgr, int bhid)
        {
            lock (Global.BangHuiMutex)
            {
                GameDBManager.BangHuiJunQiMgr.RemoveBangHuiJunQi(bhid);
            }
            DBWriter.ClearBHLingDiByID(dbMgr, bhid);
            GameDBManager.BangHuiLingDiMgr.ClearBangHuiLingDi(bhid);
            string gmCmdData = string.Format("-synclingdi", new object[0]);

            ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
        }
예제 #5
0
        public static void ScanLastMails(DBManager dbMgr)
        {
            long nowTicks = DateTime.Now.Ticks / 10000L;

            if (nowTicks - UserMailManager.LastScanMailTicks >= 30000L)
            {
                UserMailManager.LastScanMailTicks = nowTicks;
                Dictionary <int, int> lastMailDict = DBQuery.ScanLastMailIDListFromTable(dbMgr);
                if (lastMailDict != null && lastMailDict.Count > 0)
                {
                    string gmCmd        = "";
                    string mailIDsToDel = "";
                    foreach (KeyValuePair <int, int> item in lastMailDict)
                    {
                        int        roleID     = item.Key;
                        DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref roleID);
                        if (null != dbRoleInfo)
                        {
                            if (gmCmd.Length > 0)
                            {
                                gmCmd += "_";
                            }
                            dbRoleInfo.LastMailID = item.Value;
                            gmCmd += string.Format("{0}|{1}", dbRoleInfo.RoleID, item.Value);
                        }
                        else
                        {
                            DBWriter.UpdateRoleLastMail(dbMgr, item.Key, item.Value);
                        }
                        if (mailIDsToDel.Length > 0)
                        {
                            mailIDsToDel += ",";
                        }
                        mailIDsToDel += item.Value;
                    }
                    if (gmCmd.Length > 0)
                    {
                        string gmCmdData = string.Format("-notifymail {0}", gmCmd);
                        ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                    }
                    if (mailIDsToDel.Length >= 0)
                    {
                        DBWriter.DeleteLastScanMailIDs(dbMgr, lastMailDict);
                    }
                }
            }
        }
예제 #6
0
        /// <summary>
        /// 发送给gameserver 增加角色绑钻
        /// </summary>
        /// <param name="dbMgr"></param>
        /// <param name="uid"></param>
        /// <param name="rid"></param>
        /// <param name="addMoney"></param>
        public static void SendToRolebindgold(DBManager dbMgr, string uid, int rid, int addMoney)
        {
            string data = GetFirstChargeInfo(dbMgr, uid);

            if (_FirstChargeConfig == null)
            {
                LogManager.WriteException("送绑钻失败,配置表信息为空 uid=" + uid + " money=" + addMoney);
                return;
            }
            if (!_FirstChargeConfig.ContainsKey(addMoney))
            {
                return;
            }
            if (!string.IsNullOrEmpty(data))
            {
                string[] datalist = data.Split(',');

                foreach (string item in datalist)
                {
                    //已经充过了
                    if (item == addMoney.ToString())
                    {
                        return;
                    }
                }
                data += "," + addMoney;
            }
            else
            {
                data = "" + addMoney;
            }
            int bindMoney = _FirstChargeConfig[addMoney];
            //更新数据库首次记录
            bool svResoult = UpdateFirstCharge(dbMgr, uid, data);

            if (!svResoult)
            {
                LogManager.WriteException("送绑钻失败,保存数据库失败 uid=" + uid + " money=" + addMoney);
                return;
            }

            //添加GM命令消息
            string gmCmdData = string.Format("-updateBindgold {0} {1} {2} {3}", uid, rid, bindMoney, data);

            ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
        }
예제 #7
0
        /// <summary>
        /// 扫描GM命令流水发送到客户端
        /// </summary>
        public static void ScanGMMsgToGameServer(DBManager dbMgr)
        {
            try
            {
                long nowTicks = DateTime.Now.Ticks / 10000;
                if (nowTicks - LastScanInputGMMsgTicks < (10 * 1000))
                {
                    return;
                }

                LastScanInputGMMsgTicks = nowTicks;

                List <string> msgList = new List <string>();

                /// 查询GM命令的,并且写入日志中
                DBQuery.ScanGMMsgFromTable(dbMgr, msgList);

                // 如果是-config -- 更新缓存  [9/22/2013 LiaoWei]
                bool reloadConfig = false;
                for (int i = 0; i < msgList.Count; i++)
                {
                    string msg = msgList[i].Replace(":", ":");
                    ChatMsgManager.AddGMCmdChatMsg(-1, msg);

                    if (msg.IndexOf("-config ") >= 0)
                    {
                        reloadConfig = true;
                    }
                }

                if (reloadConfig)
                {
                    // 注意!! [9/22/2013 LiaoWei]
                    GameDBManager.GameConfigMgr.LoadGameConfigFromDB(dbMgr);
                }
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("扫描GM命令表时发生了错误"));
            }
        }
예제 #8
0
 public void UpdatePreDeleteRole()
 {
     lock (this._PreDeleteRoleDict)
     {
         DBManager dbMgr = DBManager.getInstance();
         List <PreDeleteRoleInfo> DeleteRoleInfoList = new List <PreDeleteRoleInfo>();
         foreach (KeyValuePair <int, DateTime> kvp in this._PreDeleteRoleDict)
         {
             if ((TimeUtil.NowDateTime() - kvp.Value).TotalSeconds >= (double)GameDBManager.PreDeleteRoleDelaySeconds)
             {
                 int roleID = kvp.Key;
                 PreDeleteRoleInfo DelInfo = new PreDeleteRoleInfo();
                 DelInfo.RoleID = roleID;
                 DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref roleID);
                 if (null != dbRoleInfo)
                 {
                     DelInfo.UserID = dbRoleInfo.UserID;
                     DelInfo.ZoneID = dbRoleInfo.ZoneID;
                     bool ret     = false;
                     bool hasrole = DBQuery.GetUserRole(dbMgr, dbRoleInfo.UserID, roleID);
                     if (hasrole)
                     {
                         ret = DBWriter.RemoveRole(dbMgr, roleID);
                     }
                     DBUserInfo dbUserInfo = dbMgr.GetDBUserInfo(dbRoleInfo.UserID);
                     if (ret && null != dbUserInfo)
                     {
                         DeleteRoleInfoList.Add(DelInfo);
                         this.HandleDeleteRole(dbUserInfo, dbRoleInfo);
                     }
                 }
             }
         }
         foreach (PreDeleteRoleInfo data in DeleteRoleInfoList)
         {
             string gmCmdData = string.Format("-deleterole {0} {1} {2}", data.UserID, data.RoleID, data.ZoneID);
             ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
             this._PreDeleteRoleDict.Remove(data.RoleID);
         }
     }
 }
예제 #9
0
        public static void ScanLastGroupMails(DBManager dbMgr)
        {
            long nowTicks = DateTime.Now.Ticks / 10000L;

            if (nowTicks - GroupMailManager.LastScanGroupMailTicks >= 30000L)
            {
                GroupMailManager.LastScanGroupMailTicks = nowTicks;
                List <GroupMailData> GroupMailList = DBQuery.ScanNewGroupMailFromTable(dbMgr, GroupMailManager.LastMaxGroupMailID);
                if (GroupMailList != null && GroupMailList.Count > 0)
                {
                    foreach (GroupMailData item in GroupMailList)
                    {
                        GroupMailManager.AddGroupMailData(item);
                        if (item.GMailID > GroupMailManager.LastMaxGroupMailID)
                        {
                            GroupMailManager.LastMaxGroupMailID = item.GMailID;
                        }
                    }
                    string gmCmdData = string.Format("-notifygmail ", new object[0]);
                    ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                }
            }
        }
예제 #10
0
        private static void HandleDestroyBangHuis(DBManager dbMgr)
        {
            int moneyPerLevel = GameDBManager.GameConfigMgr.GetGameConfigItemInt("money-per-qilevel", 10000);

            if (moneyPerLevel > 0)
            {
                DBWriter.SubBangHuiTongQianByQiLevel(dbMgr, moneyPerLevel);
                int        maxLevel           = GameDBManager.GameConfigMgr.GetGameConfigItemInt("juntuanbanghuimax", 8);
                string     goldjoin           = GameDBManager.GameConfigMgr.GetGameConfigItemStr("bhmatch_goldjoin", "");
                List <int> goldjoinList       = ConfigHelper.String2IntList(goldjoin, '|');
                List <int> noMoneyBangHuiList = DBQuery.GetNoMoneyBangHuiList(dbMgr, maxLevel);
                for (int i = 0; i < noMoneyBangHuiList.Count; i++)
                {
                    int bhid = noMoneyBangHuiList[i];
                    if (!goldjoinList.Exists((int x) => x == bhid))
                    {
                        BangHuiDestroyMgr.DoDestroyBangHui(dbMgr, bhid);
                        string gmCmdData = string.Format("-autodestroybh {0}", bhid);
                        ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                    }
                }
            }
        }
예제 #11
0
        /// <summary>
        /// 处理解散帮会
        /// </summary>
        /// <param name="dbMgr"></param>
        private static void HandleDestroyBangHuis(DBManager dbMgr)
        {
            // 临时注释掉战盟解散代码 [5/11/2014 LiaoWei]
            int moneyPerLevel = GameDBManager.GameConfigMgr.GetGameConfigItemInt("money-per-qilevel", 10000);

            //执行扣除战盟维护资金
            DBWriter.SubBangHuiTongQianByQiLevel(dbMgr, moneyPerLevel);

            //获取帮会列表数据
            List <int> noMoneyBangHuiList = DBQuery.GetNoMoneyBangHuiList(dbMgr);

            for (int i = 0; i < noMoneyBangHuiList.Count; i++)
            {
                int bhid = noMoneyBangHuiList[i];

                //执行删除帮会的操作
                BangHuiDestroyMgr.DoDestroyBangHui(dbMgr, bhid);

                //添加GM命令消息
                string gmCmdData = string.Format("-autodestroybh {0}", bhid);
                ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
            }
        }
예제 #12
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);
        }
예제 #13
0
        /// <summary>
        /// 更新用户充值的元宝数据
        /// </summary>
        public static void UpdateUsersMoney(DBManager dbMgr)
        {
            long nowTicks = DateTime.Now.Ticks / 10000;

            if (nowTicks - LastUpdateUserMoneyTicks < (3 * 1000))
            {
                return;
            }

            LastUpdateUserMoneyTicks = nowTicks;

            List <string> userIDList       = new List <string>();
            List <int>    addUserMoneyList = new List <int>();

            DBQuery.QueryTempMoney(dbMgr, userIDList, addUserMoneyList);
            if (userIDList.Count <= 0)
            {
                return;
            }

            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);

            for (int i = 0; i < userIDList.Count; i++)
            {
                string userID       = userIDList[i];
                int    addUserMoney = addUserMoneyList[i];

                DBUserInfo dbUserInfo = dbMgr.GetDBUserInfo(userID);
                if (null != dbUserInfo)
                {
                    int userMoney = 0;
                    int realMoney = 0;
                    int giftID    = 0;
                    int giftJiFen = 0;

                    lock (dbUserInfo)
                    {
                        dbUserInfo.Money += (addUserMoney * moneyToYuanBao); //一分钱??元宝
                        userMoney         = dbUserInfo.Money;

                        dbUserInfo.RealMoney += addUserMoney;
                        realMoney             = dbUserInfo.RealMoney;

                        if (currentGiftID != dbUserInfo.GiftID)
                        {
                            dbUserInfo.GiftJiFen = 0;
                            dbUserInfo.GiftID    = currentGiftID;
                        }

                        giftID = dbUserInfo.GiftID;

                        if (dbUserInfo.GiftID > 0)
                        {
                            dbUserInfo.GiftJiFen += (addUserMoney * moneyToJiFen); //一分钱??积分
                        }

                        giftJiFen = dbUserInfo.GiftJiFen;
                    }

                    //更新用户元宝表
                    DBWriter.UpdateUserMoney2(dbMgr, dbUserInfo.UserID, userMoney, realMoney, giftID, giftJiFen);
                    string resoult = "1";
                    int    rid     = DBQuery.LastLoginRole(dbMgr, dbUserInfo.UserID);
                    //送绑钻
                    CFirstChargeMgr.SendToRolebindgold(dbMgr, dbUserInfo.UserID, rid, addUserMoney);
                    //添加GM命令消息
                    string gmCmdData = string.Format("-updateyb {0} {1} {2} {3}", dbUserInfo.UserID, rid, addUserMoney, resoult);
                    ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                }
            }
        }
예제 #14
0
 public static void SendToRolebindgold(DBManager dbMgr, string uid, int rid, int addMoney, SingleChargeData chargeData)
 {
     if (chargeData == null)
     {
         LogManager.WriteException(string.Concat(new object[]
         {
             "送绑钻失败,配置表信息为空 uid=",
             uid,
             " money=",
             addMoney
         }));
     }
     else
     {
         string data        = CFirstChargeMgr.GetFirstChargeInfo(dbMgr, uid);
         string strPlat     = (uid.Length >= 4) ? uid.Substring(0, 4) : "";
         int    nPlatformID = 1;
         if (strPlat == "APPS")
         {
             nPlatformID = 2;
         }
         CFirstChargeMgr.ChargeType type = CFirstChargeMgr.ChargeType.Normal;
         string strYYB = (uid.Length >= 3) ? uid.Substring(0, 3) : "";
         if (strYYB == "YYB")
         {
             type = CFirstChargeMgr.ChargeType.YingYongBao;
         }
         else if (strYYB == "GAT" || strYYB == "430")
         {
             type = CFirstChargeMgr.ChargeType.GangAoTai;
         }
         string[] datalist = null;
         if (!string.IsNullOrEmpty(data))
         {
             datalist = data.Split(new char[]
             {
                 ','
             });
         }
         List <int> listAddMoney = CFirstChargeMgr.MuiltchargeGetBindmoney(addMoney, nPlatformID, datalist, type, chargeData);
         if (listAddMoney != null)
         {
             for (int i = 0; i < listAddMoney.Count; i++)
             {
                 if (!string.IsNullOrEmpty(data))
                 {
                     data = data + "," + listAddMoney[i];
                 }
                 else
                 {
                     data = string.Concat(listAddMoney[i]);
                 }
             }
             if (!CFirstChargeMgr.UpdateFirstCharge(dbMgr, uid, data, 0))
             {
                 LogManager.WriteException(string.Concat(new object[]
                 {
                     "送绑钻失败,保存数据库失败 uid=",
                     uid,
                     " money=",
                     addMoney
                 }));
             }
             else
             {
                 for (int i = 0; i < listAddMoney.Count; i++)
                 {
                     int    bindMoney = chargeData.singleData[listAddMoney[i]];
                     string gmCmdData = string.Format("-updateBindgold {0} {1} {2} {3}", new object[]
                     {
                         uid,
                         rid,
                         bindMoney,
                         data
                     });
                     ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                 }
             }
         }
     }
 }
예제 #15
0
        /// <summary>
        /// 扫描新邮件
        /// </summary>
        public static void ScanLastMails(DBManager dbMgr)
        {
            long nowTicks = DateTime.Now.Ticks / 10000;

            if (nowTicks - LastScanMailTicks < (30 * 1000))
            {
                return;
            }

            LastScanMailTicks = nowTicks;

            //扫描新邮件
            Dictionary <int, int> lastMailDict = DBQuery.ScanLastMailIDListFromTable(dbMgr);

            if (null != lastMailDict && lastMailDict.Count > 0)
            {
                String gmCmd = "", mailIDsToDel = "";

                foreach (var item in lastMailDict)
                {
                    DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(item.Key);
                    if (null != dbRoleInfo)
                    {
                        //理论上新扫描到的肯定是最新的,如果同一个客户端同时有多封新邮件,lastMailDict中只有mailID值最大的那一封
                        if (gmCmd.Length > 0)
                        {
                            gmCmd += "_";
                        }

                        //如果本次提示用户没有打开邮件列表,下次还能继续提示
                        dbRoleInfo.LastMailID = item.Value;
                        gmCmd += String.Format("{0}|{1}", dbRoleInfo.RoleID, item.Value);
                    }
                    else
                    {
                        //缓存中没有的用户更新其数据库字段
                        DBWriter.UpdateRoleLastMail(dbMgr, item.Key, item.Value);
                    }

                    if (mailIDsToDel.Length > 0)
                    {
                        mailIDsToDel += ",";
                    }

                    mailIDsToDel += item.Value;
                }

                //通知客户端
                if (gmCmd.Length > 0)
                {
                    //添加GM命令消息
                    string gmCmdData = string.Format("-notifymail {0}", gmCmd);
                    ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                }

                //清空邮件临时表中本次扫描到的信息,不能全部删除,因为处理过程中可能又有新邮件信息
                if (mailIDsToDel.Length >= 0)
                {
                    DBWriter.DeleteLastScanMailIDs(dbMgr, lastMailDict);
                }
            }
        }
예제 #16
0
        public static int SendAward(DBManager dbMgr, int roleID, int awardID)
        {
            FacebookAwardData awardData = FacebookManager.getFacebookAward(awardID);
            int result;

            if (awardData == null)
            {
                result = -6;
            }
            else
            {
                if (awardData.OnlyNum > 0)
                {
                    int totalNum = DBQuery.FacebookOnlyNum(dbMgr, roleID, awardID);
                    if (totalNum > 0)
                    {
                        return(-5);
                    }
                }
                if (awardData.DayMaxNum > 0)
                {
                    int totalNum = DBQuery.FacebookDayNum(dbMgr, roleID, awardID);
                    if (totalNum >= awardData.DayMaxNum)
                    {
                        return(-5);
                    }
                }
                string mailGoodsString = "";
                if (null != awardData.AwardGoods)
                {
                    foreach (GoodsData goods in awardData.AwardGoods)
                    {
                        int useCount = goods.GCount;
                        mailGoodsString += string.Format("{0}_{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}_{9}_{10}_{11}_{12}_{13}_{14}_{15}", new object[]
                        {
                            goods.GoodsID,
                            goods.Forge_level,
                            goods.Quality,
                            goods.Props,
                            useCount,
                            0,
                            0,
                            goods.Jewellist,
                            goods.AddPropIndex,
                            goods.Binding,
                            goods.BornIndex,
                            goods.Lucky,
                            goods.Strong,
                            goods.ExcellenceInfo,
                            goods.AppendPropLev,
                            goods.ChangeLifeLevForEquip
                        });
                        if (mailGoodsString.Length > 0)
                        {
                            mailGoodsString += "|";
                        }
                    }
                }
                string[] fields = new string[]
                {
                    "-1",
                    awardData.MailUser,
                    roleID.ToString(),
                    "",
                    awardData.MailTitle.ToString(),
                    awardData.MailContent.ToString(),
                    "0",
                    "0",
                    "0",
                    mailGoodsString
                };
                int addGoodsCount = 0;
                int mailID        = Global.AddMail(dbMgr, fields, out addGoodsCount);
                if (mailID > 0)
                {
                    string gmCmd     = string.Format("{0}|{1}", roleID.ToString(), mailID);
                    string gmCmdData = string.Format("-notifymail {0}", gmCmd);
                    ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                    result = mailID;
                }
                else
                {
                    result = -8;
                }
            }
            return(result);
        }
예제 #17
0
 public static void ScanGMMsgToGameServer(DBManager dbMgr)
 {
     try
     {
         long nowTicks = DateTime.Now.Ticks / 10000L;
         if (nowTicks - ChatMsgManager.LastScanInputGMMsgTicks >= 10000L)
         {
             ChatMsgManager.LastScanInputGMMsgTicks = nowTicks;
             List <string> msgList = new List <string>();
             DBQuery.ScanGMMsgFromTable(dbMgr, msgList);
             bool reloadConfig             = false;
             bool reloadGameserverLineList = false;
             bool reloadGMail = false;
             for (int i = 0; i < msgList.Count; i++)
             {
                 string msg = msgList[i].Replace(":", ":");
                 if (msg.IndexOf("-config ") >= 0)
                 {
                     reloadConfig = true;
                     string[] fields = msg.Trim().Split(new char[]
                     {
                         ' '
                     });
                     if (fields.Count <string>() == 3)
                     {
                         string paramName  = fields[1];
                         string paramValue = fields[2];
                         DBWriter.UpdateGameConfig(dbMgr, paramName, paramValue);
                     }
                 }
                 else if (msg == "-reload kuafu")
                 {
                     reloadGameserverLineList = true;
                 }
                 else if (msg == "-reloadall")
                 {
                     try
                     {
                         AssemblyPatchManager.getInstance().InitConfig();
                     }
                     catch (Exception ex)
                     {
                         LogManager.WriteException(ex.ToString());
                     }
                 }
                 if (msg.IndexOf("-resetgmail") >= 0)
                 {
                     reloadGMail = true;
                 }
                 if (msg.IndexOf("-outrank") >= 0)
                 {
                     GameDBManager.RankCacheMgr.PrintfRankData();
                 }
                 ChatMsgManager.AddGMCmdChatMsg(-1, msg);
             }
             if (reloadConfig)
             {
                 GameDBManager.GameConfigMgr.LoadGameConfigFromDB(dbMgr);
             }
             if (reloadGameserverLineList)
             {
                 LineManager.LoadConfig();
             }
             if (reloadGMail)
             {
                 GroupMailManager.ResetData();
             }
         }
     }
     catch (Exception)
     {
         LogManager.WriteLog(LogTypes.Error, string.Format("扫描GM命令表时发生了错误", new object[0]), null, true);
     }
 }