Ejemplo n.º 1
0
        /// <summary>
        /// 发信息给DBServer
        /// </summary>
        /// <param name="nQueryID"></param>
        /// <param name="sMsg"></param>
        public unsafe static void SendDBSockMsg(int nQueryID, string sMsg)
        {
            string sSENDMSG;
            int    nCheckCode;
            string sCheckStr = string.Empty;

            if (!DBSocketConnected())
            {
                return;
            }
            HUtil32.EnterCriticalSection(M2Share.UserDBSection);
            try
            {
                M2Share.g_Config.sDBSocketRecvText = "";
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.UserDBSection);
            }
            nCheckCode = HUtil32.MakeLong(nQueryID ^ 170, sMsg.Length + 6);
            byte[] by = new byte[sizeof(int)];
            fixed(byte *pb = by)
            {
                *(int *)pb = nCheckCode;
            }

            sCheckStr = EncryptUnit.EncodeBuffer(by, by.Length);
            sSENDMSG  = "#" + nQueryID + "/" + sMsg + sCheckStr + "!";
            M2Share.g_Config.boDBSocketWorking = true;
            byte[] data = System.Text.Encoding.Default.GetBytes(sSENDMSG);
            TFrmMain.DBSocket.Send(HUtil32.StrToByte(sSENDMSG));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 添加到加载角色队列里面
        /// </summary>
        /// <param name="sAccount"></param>
        /// <param name="sChrName"></param>
        /// <param name="sIPaddr"></param>
        /// <param name="boFlag"></param>
        /// <param name="nSessionID"></param>
        /// <param name="nPayMent"></param>
        /// <param name="nPayMode"></param>
        /// <param name="nSoftVersionDate"></param>
        /// <param name="nSocket"></param>
        /// <param name="nGSocketIdx"></param>
        /// <param name="nGateIdx"></param>
        public void AddToLoadRcdList(string sAccount, string sChrName, string sIPaddr, bool boFlag, int nSessionID, int nPayMent, int nPayMode, int nSoftVersionDate, int nSocket, int nGSocketIdx, int nGateIdx)
        {
            TLoadDBInfo LoadRcdInfo = new TLoadDBInfo();

            LoadRcdInfo.sAccount         = sAccount;
            LoadRcdInfo.sCharName        = sChrName;
            LoadRcdInfo.sIPaddr          = sIPaddr;
            LoadRcdInfo.boClinetFlag     = boFlag;
            LoadRcdInfo.nSessionID       = nSessionID;
            LoadRcdInfo.nSoftVersionDate = nSoftVersionDate;
            LoadRcdInfo.nPayMent         = nPayMent;
            LoadRcdInfo.nPayMode         = nPayMode;
            LoadRcdInfo.nSocket          = nSocket;
            LoadRcdInfo.nGSocketIdx      = nGSocketIdx;
            LoadRcdInfo.nGateIdx         = nGateIdx;
            LoadRcdInfo.dwNewUserTick    = HUtil32.GetTickCount();
            LoadRcdInfo.PlayObject       = null;
            LoadRcdInfo.nReLoadCount     = 0;
            LoadRcdInfo.boIsHero         = false;
            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                m_LoadRcdList.Add(LoadRcdInfo);
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// btLoadType 0-召唤 1-新建 2-删除 3-查询数据 4-召唤副将英雄 5-新建副将英雄 6-删除副将英雄
        /// </summary>
        /// <param name="sCharName"></param>
        /// <param name="sMsg"></param>
        /// <param name="PlayObject"></param>
        /// <param name="btLoadType"></param>
        public void AddToLoadHeroRcdList(string sCharName, string sMsg, TPlayObject PlayObject, byte btLoadType)
        {
            TLoadDBInfo LoadRcdInfo = new TLoadDBInfo();

            PlayObject.m_boWaitHeroDate  = true;
            LoadRcdInfo.sAccount         = PlayObject.m_sUserID;
            LoadRcdInfo.sCharName        = sCharName;
            LoadRcdInfo.sIPaddr          = PlayObject.m_sIPaddr;
            LoadRcdInfo.boClinetFlag     = PlayObject.m_boClientFlag;
            LoadRcdInfo.nSessionID       = PlayObject.m_nSessionID;
            LoadRcdInfo.nSoftVersionDate = PlayObject.m_nSoftVersionDate;
            LoadRcdInfo.nPayMent         = PlayObject.m_nPayMent;
            LoadRcdInfo.nPayMode         = PlayObject.m_nPayMode;
            LoadRcdInfo.nSocket          = PlayObject.m_nSocket;
            LoadRcdInfo.nGSocketIdx      = PlayObject.m_nGSocketIdx;
            LoadRcdInfo.nGateIdx         = PlayObject.m_nGateIdx;
            LoadRcdInfo.dwNewUserTick    = HUtil32.GetTickCount();
            LoadRcdInfo.PlayObject       = PlayObject;
            LoadRcdInfo.nReLoadCount     = 0;
            LoadRcdInfo.boIsHero         = true;
            LoadRcdInfo.btLoadDBType     = btLoadType;
            LoadRcdInfo.sMsg             = sMsg;
            LoadRcdInfo.btJob            = PlayObject.m_btDeputyHeroJob;
            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                m_LoadRcdList.Add(LoadRcdInfo);
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
        }
Ejemplo n.º 4
0
        public TSaveRcd GetSaveRcd(string sAccount, string sCharName)
        {
            TSaveRcd result = null;
            TSaveRcd SaveRcd;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                if (m_SaveRcdList.Count > 0)
                {
                    for (int I = 0; I < m_SaveRcdList.Count; I++)
                    {
                        SaveRcd = m_SaveRcdList[I];
                        if (SaveRcd.sAccount == sAccount && SaveRcd.sChrName == sCharName)
                        {
                            result = SaveRcd;
                            break;
                        }
                    }
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 检查是否存在列表里,如不存在,则增加,存在则退出
        /// </summary>
        /// <param name="sAccount"></param>
        /// <param name="sChrName"></param>
        /// <returns></returns>
        public bool InSaveRcdList(string sAccount, string sChrName)
        {
            bool     result = false;
            TSaveRcd SaveRcd;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                if (m_SaveRcdList.Count > 0)
                {
                    for (int I = 0; I < m_SaveRcdList.Count; I++)
                    {
                        SaveRcd = m_SaveRcdList[I];
                        if (string.Compare(SaveRcd.sAccount, sAccount, true) == 0 && string.Compare(SaveRcd.sChrName, sChrName, true) == 0)
                        {
                            result = true;
                            break;
                        }
                    }
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 更新角色是否存在列表里
        /// </summary>
        /// <param name="SaveRcd"></param>
        /// <returns></returns>
        public bool UpDataSaveRcdList(TSaveRcd SaveRcd)
        {
            bool     result = false;
            TSaveRcd HumanRcd;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                for (int I = m_SaveRcdList.Count - 1; I >= 0; I--)
                {
                    if (m_SaveRcdList.Count <= 0)
                    {
                        break;
                    }
                    HumanRcd = m_SaveRcdList[I];
                    if (HumanRcd != null)
                    {
                        if (HumanRcd.sAccount == SaveRcd.sAccount && HumanRcd.sChrName == SaveRcd.sChrName)
                        {
                            HumanRcd.HumanRcd = SaveRcd.HumanRcd;
                            result            = true;
                            return(result);
                        }
                    }
                }
                m_SaveRcdList.Add(SaveRcd);
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 7
0
        public void DeleteHuman(int nGateIndex, int nSocket)
        {
            TLoadDBInfo LoadRcdInfo = null;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                for (int I = m_LoadRcdList.Count - 1; I >= 0; I--)
                {
                    if (m_LoadRcdList.Count <= 0)
                    {
                        break;
                    }
                    LoadRcdInfo = m_LoadRcdList[I];
                    if ((LoadRcdInfo.nGateIdx == nGateIndex) && (LoadRcdInfo.nSocket == nSocket))
                    {
                        m_LoadRcdList.RemoveAt(I);
                        Dispose(LoadRcdInfo);
                        break;
                    }
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
        }
Ejemplo n.º 8
0
        /****************************************************************
        ** 函 数 名:Button1_Click
        ** 功能描述:踢出离线挂机按钮
        ** 输入参数:无
        ** 输出参数:无
        ** 返 回 值:无
        ** 创 建 人:陶志强
        ** 日    期:2013-4-21
        ** 修 改 人:
        ** 日    期:
        ****************************************************************/
        private void Button1_Click(object sender, EventArgs e)
        {
            int I;

            try
            {
                HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
                for (I = 0; I < M2Share.UserEngine.m_PlayObjectList.Count; I++)
                {
                    if (M2Share.UserEngine.m_PlayObjectList[I].m_boNotOnlineAddExp)
                    {
                        M2Share.UserEngine.m_PlayObjectList[I].m_boNotOnlineAddExp = false;
                        M2Share.UserEngine.m_PlayObjectList[I].m_boPlayOffLine     = false;
                        M2Share.UserEngine.m_PlayObjectList[I].m_boKickFlag        = true;
                    }
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
            }
            dwTimeOutTick = HUtil32.GetTickCount();
            GetOnlineList();
            RefGridSession();
        }
Ejemplo n.º 9
0
 public void IDSocketRead(object sender, DSCClientDataInEventArgs e)
 {
     HUtil32.EnterCriticalSection(M2Share.g_Config.UserIDSection);
     try
     {
         M2Share.g_Config.sIDSocketRecvText = M2Share.g_Config.sIDSocketRecvText + e.Data.ToString(e.Data.Length);
     }
     finally
     {
         HUtil32.LeaveCriticalSection(M2Share.g_Config.UserIDSection);
     }
 }
Ejemplo n.º 10
0
        public int SaveListCount()
        {
            int result = 0;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                result = m_SaveRcdList.Count;
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 服务器是否满员
        /// </summary>
        /// <returns></returns>
        public bool IsFull()
        {
            bool result = false;

            HUtil32.EnterCriticalSection(m_UserCriticalSection);
            try
            {
                if (m_SaveRcdList.Count >= 2000)
                {
                    result = true;
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 12
0
        public void Shutup(TPlayObject PlayObject, string[] @Params)
        {
            if (@Params == null)
            {
                return;
            }
            string sHumanName = @Params.Length > 0 ? @Params[0] : "";
            string sTime      = @Params.Length > 1 ? @Params[1] : "";

            if ((sTime == "") || (sHumanName == "") || ((sHumanName != "") && (sHumanName[1] == '?')))
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandShutupHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            uint dwTime = (uint)HUtil32.Str_ToInt(sTime.ToString(), 5);

            HUtil32.EnterCriticalSection(M2Share.g_DenySayMsgList);
            try
            {
                //if (M2Share.g_DenySayMsgList.ContainsKey(sHumanName))
                //{
                //    M2Share.g_DenySayMsgList[sHumanName] = HUtil32.GetTickCount() + dwTime * 60 * 1000;
                //}
                //else
                //{
                //    M2Share.g_DenySayMsgList.Add(sHumanName, HUtil32.GetTickCount() + dwTime * 60 * 1000);
                //}

                //nIndex = M2Share.g_DenySayMsgList.GetIndex(sHumanName);
                //if (nIndex >= 0)
                //{
                //    M2Share.g_DenySayMsgList[nIndex] = ((HUtil32.GetTickCount() + dwTime * 60 * 1000) as Object);
                //}
                //else
                //{
                //    M2Share.g_DenySayMsgList.AddRecord(sHumanName, HUtil32.GetTickCount() + dwTime * 60 * 1000);
                //}
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.g_DenySayMsgList);
            }
            PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandShutupHumanMsg, sHumanName, dwTime), TMsgColor.c_Red, TMsgType.t_Hint);
        }
Ejemplo n.º 13
0
 /****************************************************************
 ** 函 数 名:GetOnlineList
 ** 功能描述:取在线人物列表
 ** 输入参数:无
 ** 输出参数:无
 ** 返 回 值:无
 ** 创 建 人:陶志强
 ** 日    期:2013-4-21
 ** 修 改 人:
 ** 日    期:
 ****************************************************************/
 private void GetOnlineList()
 {
     ViewList.Clear();
     //测试数据
     //ViewList.Add(new TPlayObject() { m_sCharName ="john1"});
     //ViewList.Add(new TPlayObject() { m_sCharName = "john" });
     try {
         HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
         if (M2Share.UserEngine != null)
         {
             for (int I = 0; I < M2Share.UserEngine.m_PlayObjectList.Count; I++)
             {
                 ViewList.Add(M2Share.UserEngine.m_PlayObjectList[I]);
             }
         }
     } finally {
         HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
     }
 }
Ejemplo n.º 14
0
        public void ShutupList(TPlayObject PlayObject, string[] @Params)
        {
            string sParam1 = @Params.Length > 0 ? @Params[0] : "";

            if (((sParam1 != "") && (sParam1[1] == '?')))
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, ""), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            if ((PlayObject.m_btPermission < 6))
            {
                return;
            }
            HUtil32.EnterCriticalSection(M2Share.g_DenySayMsgList);
            try
            {
                int nCount = M2Share.g_DenySayMsgList.Count;
                if (M2Share.g_DenySayMsgList.Count <= 0)
                {
                    PlayObject.SysMsg(GameMsgDef.g_sGameCommandShutupListIsNullMsg, TMsgColor.c_Green, TMsgType.t_Hint);
                }
                if (nCount > 0)
                {
                    //foreach (var item in M2Share.g_DenySayMsgList)
                    //{
                    //    PlayObject.SysMsg(M2Share.g_DenySayMsgList[item.Key] + ' ' + (((M2Share.g_DenySayMsgList[item.Key]) - HUtil32.GetTickCount()) / 60000).ToString()
                    //        , TMsgColor.c_Green, TMsgType.t_Hint);
                    //}

                    //for (int I = 0; I < M2Share.g_DenySayMsgList.Count; I++)
                    //{
                    //this.SysMsg(M2Share.g_DenySayMsgList[I] + ' ' + ((((uint)M2Share.g_DenySayMsgList[I]) - HUtil32.GetTickCount()) / 60000).ToString(), TMsgColor.c_Green, TMsgType.t_Hint);
                    //}
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.g_DenySayMsgList);
            }
        }
Ejemplo n.º 15
0
        public void ShutupRelease(string[] @params, TPlayObject PlayObject)
        {
            string sHumanName = @params.Length > 0 ? @params[0] : "";
            bool   boAll      = @params.Length > 1 ? bool.Parse(@params[1]) : false;

            if ((sHumanName == "") || ((sHumanName != "") && (sHumanName[1] == '?')))
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandShutupReleaseHelpMsg),
                                  TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            HUtil32.EnterCriticalSection(M2Share.g_DenySayMsgList);
            try
            {
                //if (M2Share.g_DenySayMsgList.ContainsKey(sHumanName))
                //{
                //    M2Share.g_DenySayMsgList.Remove(sHumanName);
                //    TPlayObject m_PlayObject = UserEngine.GetPlayObject(sHumanName);
                //    //PlayObject = UserEngine.GetPlayObject(sHumanName);
                //    if (m_PlayObject != null)
                //    {
                //        m_PlayObject.SysMsg(GameMsgDef.g_sGameCommandShutupReleaseCanSendMsg, TMsgColor.c_Red, TMsgType.t_Hint);
                //    }
                //    if (boAll)
                //    {
                //        //UserEngine.SendServerGroupMsg(SS_210, nServerIndex, sHumanName);
                //    }
                //    PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandShutupReleaseHumanCanSendMsg, sHumanName),
                //        TMsgColor.c_Green, TMsgType.t_Hint);
                //}
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.g_DenySayMsgList);
            }
        }
Ejemplo n.º 16
0
        public unsafe void BindUseItem(string[] @Params, TPlayObject PlayObject)
        {
            string sHumanName = @Params.Length > 0 ? @Params[0] : "";
            string sItem      = @Params.Length > 1 ? @Params[1] : "";
            string sType      = @Params.Length > 2 ? @Params[2] : "";
            string sLight     = @Params.Length > 3 ? @Params[3] : "";

            TUserItem *UserItem = null;
            int        nBind    = -1;
            TItemBind  ItemBind;
            int        nItemIdx;
            int        nMakeIdex;
            string     sBindName;
            bool       boFind;
            bool       boLight;
            int        nItem = M2Share.GetUseItemIdx(sItem);

            if ((sType).ToLower().CompareTo(("帐号").ToLower()) == 0)
            {
                nBind = 0;
            }
            if ((sType).ToLower().CompareTo(("人物").ToLower()) == 0)
            {
                nBind = 1;
            }
            if ((sType).ToLower().CompareTo(("IP").ToLower()) == 0)
            {
                nBind = 2;
            }
            boLight = sLight == "1";
            if ((nItem < 0) || (nBind < 0) || (sHumanName == "") || ((sHumanName != "") && (sHumanName[1] == '?')))
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandBindUseItemHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            TPlayObject m_PlayObject = UserEngine.GetPlayObject(sHumanName);

            if (m_PlayObject == null)
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sNowNotOnLineOrOnOtherServer, sHumanName), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            UserItem = m_PlayObject.m_UseItems[nItem];
            if (UserItem->wIndex == 0)
            {
                PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandBindUseItemNoItemMsg, sHumanName, sItem), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            nItemIdx  = UserItem->wIndex;
            nMakeIdex = UserItem->MakeIndex;
            switch (nBind)
            {
            case 0:
                boFind    = false;
                sBindName = m_PlayObject.m_sUserID;
                HUtil32.EnterCriticalSection(M2Share.g_ItemBindAccount);
                try
                {
                    for (int I = 0; I < M2Share.g_ItemBindAccount.Count; I++)
                    {
                        ItemBind = M2Share.g_ItemBindAccount[I];
                        if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                        {
                            PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandBindUseItemAlreadBindMsg, sHumanName, sItem), TMsgColor.c_Red, TMsgType.t_Hint);
                            boFind = true;
                            break;
                        }
                    }
                    if (!boFind)
                    {
                        ItemBind           = new TItemBind();
                        ItemBind.nItemIdx  = nItemIdx;
                        ItemBind.nMakeIdex = nMakeIdex;
                        ItemBind.sBindName = sBindName;
                        M2Share.g_ItemBindAccount.Insert(0, ItemBind);
                    }
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_ItemBindAccount);
                }
                if (boFind)
                {
                    return;
                }
                M2Share.SaveItemBindAccount();
                PlayObject.SysMsg(String.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", M2Share.GetUseItemName(nItem),
                                                UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                m_PlayObject.SysMsg(String.Format("你的%s[%s]已经绑定到%s[%s]上了。", M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex),
                                                  sType, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                m_PlayObject.SendMsg(m_PlayObject, Grobal2.RM_SENDUSEITEMS, 0, 0, 0, 0, "");
                break;

            case 1:
                sBindName = m_PlayObject.m_sCharName;
                boFind    = false;
                HUtil32.EnterCriticalSection(M2Share.g_ItemBindCharName);
                try
                {
                    for (int I = 0; I < M2Share.g_ItemBindCharName.Count; I++)
                    {
                        ItemBind = M2Share.g_ItemBindCharName[I];
                        if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                        {
                            PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandBindUseItemAlreadBindMsg, sHumanName, sItem), TMsgColor.c_Red, TMsgType.t_Hint);
                            boFind = true;
                            break;
                        }
                    }
                    if (!boFind)
                    {
                        ItemBind           = new TItemBind();
                        ItemBind.nItemIdx  = nItemIdx;
                        ItemBind.nMakeIdex = nMakeIdex;
                        ItemBind.sBindName = sBindName;
                        M2Share.g_ItemBindCharName.Insert(0, ItemBind);
                    }
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_ItemBindCharName);
                }
                if (boFind)
                {
                    return;
                }
                M2Share.SaveItemBindCharName();
                PlayObject.SysMsg(String.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", M2Share.GetUseItemName(nItem),
                                                UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                m_PlayObject.SysMsg(String.Format("你的%s[%s]已经绑定到%s[%s]上了。", M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex),
                                                  sType, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);

                // PlayObject.SendUpdateItem(UserItem);
                m_PlayObject.SendMsg(m_PlayObject, Grobal2.RM_SENDUSEITEMS, 0, 0, 0, 0, "");
                break;

            case 2:
                boFind    = false;
                sBindName = m_PlayObject.m_sIPaddr;
                HUtil32.EnterCriticalSection(M2Share.g_ItemBindIPaddr);
                try
                {
                    for (int I = 0; I < M2Share.g_ItemBindIPaddr.Count; I++)
                    {
                        ItemBind = M2Share.g_ItemBindIPaddr[I];
                        if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                        {
                            PlayObject.SysMsg(String.Format(GameMsgDef.g_sGameCommandBindUseItemAlreadBindMsg, sHumanName, sItem), TMsgColor.c_Red, TMsgType.t_Hint);
                            boFind = true;
                            break;
                        }
                    }
                    if (!boFind)
                    {
                        ItemBind           = new TItemBind();
                        ItemBind.nItemIdx  = nItemIdx;
                        ItemBind.nMakeIdex = nMakeIdex;
                        ItemBind.sBindName = sBindName;
                        M2Share.g_ItemBindIPaddr.Insert(0, ItemBind);
                    }
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_ItemBindIPaddr);
                }
                if (boFind)
                {
                    return;
                }
                M2Share.SaveItemBindIPaddr();
                PlayObject.SysMsg(String.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", M2Share.GetUseItemName(nItem),
                                                UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                m_PlayObject.SysMsg(String.Format("你的%s[%s]已经绑定到%s[%s]上了。", M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex),
                                                  sType, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);

                // PlayObject.SendUpdateItem(UserItem);
                m_PlayObject.SendMsg(m_PlayObject, Grobal2.RM_SENDUSEITEMS, 0, 0, 0, 0, "");
                break;
            }
        }
Ejemplo n.º 17
0
        private void MSocket_OnClientRead(object sender, AsyncSockets.AsyncUserToken e)
        {
            int I;
            TMsgServerInfo MsgServer;
            string sReviceMsg = string.Empty;
            string sMsg = string.Empty;
            string sCode = string.Empty;
            string sAccount = string.Empty;
            string sServerName = string.Empty;
            string sIndex = string.Empty;
            string sOnlineCount = string.Empty;
            int nCode;
            TConfig Config;
            Config = LSShare.g_Config;
            if (TFrmMain.Colsed) return;
            HUtil32.EnterCriticalSection(objRead);
            try
            {
                for (I = 0; I < m_ServerList.Count; I++)
                {
                    MsgServer = m_ServerList[I];
                    if (MsgServer.Socket == e)
                    {
                        //string ReceiveText = Encoding.Default.GetString(e.ReceiveBuffer, 0, e.BytesReceived);
                        //if (ReceiveText[0] == '\0') ReceiveText = "";
                        byte[] data = new byte[e.BytesReceived];
                        Array.Copy(e.ReceiveBuffer, e.Offset, data, 0, e.BytesReceived);
                        string ReceiveText = Encoding.Default.GetString(data);

                        sReviceMsg = MsgServer.sReceiveMsg + ReceiveText;
                        while ((sReviceMsg.IndexOf(')') > 0))
                        {
                            sReviceMsg = HUtil32.ArrestStringEx(sReviceMsg, "(", ")", ref sMsg);
                            if (sMsg == "")
                            {
                                break;
                            }
                            sMsg = HUtil32.GetValidStr3(sMsg, ref sCode, new string[] { "/" });
                            nCode = HUtil32.Str_ToInt(sCode, -1);
                            switch (nCode)
                            {
                                case Common.SS_SOFTOUTSESSION:
                                    sMsg = HUtil32.GetValidStr3(sMsg, ref sAccount, new string[] { "/" });
                                    FrmMain.CloseUser(Config, sAccount, HUtil32.Str_ToInt(sMsg, 0));
                                    break;

                                case Common.SS_SERVERINFO:
                                    sMsg = HUtil32.GetValidStr3(sMsg, ref sServerName, new string[] { "/" });
                                    sMsg = HUtil32.GetValidStr3(sMsg, ref sIndex, new string[] { "/" });
                                    sMsg = HUtil32.GetValidStr3(sMsg, ref sOnlineCount, new string[] { "/" });
                                    MsgServer.sServerName = sServerName;
                                    MsgServer.nServerIndex = HUtil32.Str_ToInt(sIndex, 0);
                                    MsgServer.nOnlineCount = HUtil32.Str_ToInt(sOnlineCount, 0);
                                    MsgServer.dwKeepAliveTick = HUtil32.GetTickCount();
                                    MsgServer.sIPaddr = e.EndPoint.Address.ToString() + ":" + e.EndPoint.Port.ToString();
                                    SortServerList(I);
                                    LSShare.nOnlineCountMin = GetOnlineHumCount();
                                    if (LSShare.nOnlineCountMin > LSShare.nOnlineCountMax)
                                    {
                                        LSShare.nOnlineCountMax = LSShare.nOnlineCountMin;
                                    }
                                    SendServerMsgA(Common.SS_KEEPALIVE, (LSShare.nOnlineCountMin).ToString());
                                    RefServerLimit(sServerName);
                                    break;

                                case Common.UNKNOWMSG:
                                    SendServerMsgA(Common.UNKNOWMSG, sMsg);
                                    break;

                                case Common.SS_ADDIPTOGATE:
                                    FrmMain.SendIPToGate(sMsg);
                                    break;
                            }
                        }
                    }

                    MsgServer.sReceiveMsg = sReviceMsg;

                    //MessageBox.Show(m_ServerList[I].sReceiveMsg);
                    //m_ServerList[I] = MsgServer;
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(objRead);
            }
        }
Ejemplo n.º 18
0
        public void Run()
        {
            string       sSocketText   = string.Empty;
            string       sData         = string.Empty;
            string       sBody         = string.Empty;
            string       sCode         = string.Empty;
            const string sExceptionMsg = "{异常} TFrmIdSoc::DecodeSocStr";

            HUtil32.EnterCriticalSection(M2Share.g_Config.UserIDSection);
            if (M2Share.g_Config.sIDSocketRecvText != "" && M2Share.g_Config.sIDSocketRecvText != null)
            {
                try
                {
                    if (M2Share.g_Config.sIDSocketRecvText.IndexOf(")") <= 0)
                    {
                        return;
                    }
                    sSocketText = M2Share.g_Config.sIDSocketRecvText;
                    M2Share.g_Config.sIDSocketRecvText = "";
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_Config.UserIDSection);
                }
            }
            else
            {
                HUtil32.LeaveCriticalSection(M2Share.g_Config.UserIDSection);
            }
            try
            {
                while (true)
                {
                    sSocketText = HUtil32.ArrestStringEx(sSocketText, "(", ")", ref sData);
                    if (sData == "")
                    {
                        break;
                    }
                    sBody = HUtil32.GetValidStr3(sData, ref sCode, new string[] { "/" });
                    switch (HUtil32.Str_ToInt(sCode, 0))
                    {
                    case Common.SS_OPENSESSION:    // 100
                        GetPasswdSuccess(sBody);
                        break;

                    case Common.SS_CLOSESESSION:    // 101
                        GetCancelAdmission(sBody);
                        break;

                    case Common.SS_KEEPALIVE:    // 104
                        SetTotalHumanCount(sBody);
                        break;

                    case Common.UNKNOWMSG:
                        break;

                    case Common.SS_KICKUSER:    // 111
                        GetCancelAdmissionA(sBody);
                        break;

                    case Common.SS_SERVERLOAD:    // 113
                        GetServerLoad(sBody);
                        break;
                    }
                    if (sSocketText.IndexOf(")") <= 0)
                    {
                        break;
                    }
                }
                HUtil32.EnterCriticalSection(M2Share.g_Config.UserIDSection);
                try
                {
                    M2Share.g_Config.sIDSocketRecvText = sSocketText + M2Share.g_Config.sIDSocketRecvText;
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_Config.UserIDSection);
                }
            }
            catch
            {
                M2Share.MainOutMessage(sExceptionMsg);
            }
            if (HUtil32.GetTickCount() - dwClearEmptySessionTick > 10000)
            {
                dwClearEmptySessionTick = HUtil32.GetTickCount();
            }
        }
Ejemplo n.º 19
0
        public unsafe void SysMsg(TPlayObject PlayObject, string[] @Params)
        {
            string Text = @Params.Length > 0 ? @Params[0] : "";

            TStdItem *  AmuletStdItem;
            TPlayObject PlayObjectA;

            if (Text == "")
            {
                PlayObject.SysMsg("命令格式: @" + this.Attributes.Name + " 发布信息", TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            M2Share.IsFilterMsg(ref Text);// 文字过滤
            if (PlayObject.m_UseItems[TPosition.U_CHARM]->wIndex > 0)
            {
                AmuletStdItem = UserEngine.GetStdItem(PlayObject.m_UseItems[TPosition.U_CHARM]->wIndex);
                if ((AmuletStdItem != null) && (AmuletStdItem->StdMode == 7) && (AmuletStdItem->Shape == 0)) // 物品是千里传音
                {
                    if (PlayObject.m_UseItems[TPosition.U_CHARM]->Dura >= 1000)
                    {
                        PlayObject.m_UseItems[TPosition.U_CHARM]->Dura -= 1000;
                        PlayObject.SendMsg(PlayObject, Grobal2.RM_DURACHANGE, TPosition.U_CHARM, PlayObject.m_UseItems[TPosition.U_CHARM]->Dura, PlayObject.m_UseItems[TPosition.U_CHARM]->DuraMax, 0, "");// 减少持久数
                        try
                        {
                            //千里传音 的字的颜色
                            HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
                            for (int I = 0; I < UserEngine.m_PlayObjectList.Count; I++)
                            {
                                PlayObjectA = UserEngine.m_PlayObjectList[I];
                                if (PlayObjectA != null)
                                {
                                    if (!PlayObjectA.m_boGhost)
                                    {
                                        PlayObjectA.SysMsg(PlayObject.m_sCharName + ":" + Text, TMsgColor.c_Fuchsia, TMsgType.t_Say);
                                    }
                                }
                            }
                        }
                        finally
                        {
                            HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
                        }
                        if (PlayObject.m_UseItems[TPosition.U_CHARM]->Dura <= 0)
                        {
                            PlayObject.SendDelItems(PlayObject.m_UseItems[TPosition.U_CHARM]);// 如果使用完,则删除物品
                            PlayObject.m_UseItems[TPosition.U_CHARM]->Dura   = 0;
                            PlayObject.m_UseItems[TPosition.U_CHARM]->wIndex = 0;
                        }
                    }
                    else
                    {
                        PlayObject.SendDelItems(PlayObject.m_UseItems[TPosition.U_CHARM]); // 如果使用完,则删除物品
                        PlayObject.m_UseItems[TPosition.U_CHARM]->Dura   = 0;
                        PlayObject.m_UseItems[TPosition.U_CHARM]->wIndex = 0;
                    }
                }
            }
            else
            {
                PlayObject.SysMsg("没有千里传音,或没有穿上装备栏里。", TMsgColor.c_Red, TMsgType.t_Hint);
            }
        }
Ejemplo n.º 20
0
        /// <summary>
        /// 加载魔法数据
        /// </summary>
        /// <returns></returns>
        internal unsafe int LoadMagicDB()
        {
            int            result   = -1;
            TMagic *       Magic    = null;
            TMagic *       OldMagic = null;
            IList <IntPtr> OldMagicList;
            IDataReader    dr         = null;
            const string   sSQLString = "SELECT MAGID,MAGNAME,EFFECTTYPE,EFFECT,SPELL,POWER,MAXPOWER,JOB,NEEDL1,NEEDL2,NEEDL3,L1TRAIN,L2TRAIN,L3TRAIN,DELAY,DEFSPELL,DEFPOWER,DEFMAXPOWER,DESCR FROM TBL_MAGIC";

            HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
            try
            {
                UserEngine.SwitchMagicList();
                foreach (var item in UserEngine.m_MagicList)
                {
                    if (item != null)
                    {
                        Marshal.FreeHGlobal(item);
                    }
                }
                UserEngine.m_MagicList.Clear();
                try
                {
                    dr = DBsession.ExecuteReader(sSQLString);
                }
                catch
                {
                    MainOutMessage("链接数据库发生异常...");
                }
                finally
                {
                    result = -2;
                }
                if (dr == null) //2013.04.16 Fixed dr为空时Read报错
                {
                    return(result);
                }
                while (dr.Read())
                {
                    try
                    {
                        Magic = (TMagic *)Marshal.AllocHGlobal(sizeof(TMagic));
                        HUtil32.ZeroMemory(Magic, sizeof(TMagic));
                        Magic->wMagicId = dr.GetUInt16("MagId");
                        HUtil32.StrToSByteArry(dr.GetString("MagName"), Magic->sMagicName, 12, ref Magic->MagicNameLen);
                        Magic->btEffectType  = dr.GetByte("EffectType");
                        Magic->btEffect      = dr.GetByte("Effect");
                        Magic->wSpell        = dr.GetUInt16("Spell");
                        Magic->wPower        = dr.GetUInt16("Power");
                        Magic->wMaxPower     = dr.GetUInt16("MaxPower");
                        Magic->btJob         = dr.GetByte("Job");
                        Magic->TrainLevel[0] = dr.GetByte("NeedL1");
                        Magic->TrainLevel[1] = dr.GetByte("NeedL2");
                        Magic->TrainLevel[2] = dr.GetByte("NeedL3");
                        Magic->TrainLevel[3] = dr.GetByte("NeedL3");
                        Magic->MaxTrain[0]   = dr.GetByte("L1Train");
                        Magic->MaxTrain[1]   = dr.GetInt32("L2Train");
                        Magic->MaxTrain[2]   = dr.GetInt32("L3Train");
                        Magic->MaxTrain[3]   = dr.GetInt32("L2Train");
                        Magic->btTrainLv     = 3;
                        Magic->dwDelayTime   = dr.GetUInt32("Delay");
                        Magic->btDefSpell    = dr.GetByte("DefSpell");
                        Magic->btDefPower    = dr.GetByte("DefPower");
                        Magic->btDefMaxPower = dr.GetByte("DefMaxPower");
                        HUtil32.StrToSByteArry(dr.GetString("Descr"), Magic->sDescr, 18, ref Magic->DescrLen);
                        if (Magic->wMagicId > 0)
                        {
                            UserEngine.m_MagicList.Add((IntPtr)Magic);
                        }
                        else
                        {
                            Marshal.FreeHGlobal((IntPtr)Magic);
                        }
                    }
                    catch
                    {
                        result = -100;
                    }
                    result = 1;
                }

                if (UserEngine.OldMagicList.Count > 0)
                {
                    OldMagicList = UserEngine.OldMagicList;
                    if (OldMagicList.Count > 0)
                    {
                        for (int I = 0; I < OldMagicList.Count; I++)
                        {
                            OldMagic = (TMagic *)OldMagicList[I];
                            if (OldMagic->wMagicId >= 100)
                            {
                                Magic->wMagicId = OldMagic->wMagicId;
                                HUtil32.StrToSByteArry(HUtil32.SBytePtrToString(OldMagic->sMagicName, 0, OldMagic->MagicNameLen),
                                                       Magic->sMagicName, 12, ref Magic->MagicNameLen);
                                Magic->btEffectType  = OldMagic->btEffectType;
                                Magic->btEffect      = OldMagic->btEffect;
                                Magic->wSpell        = OldMagic->wSpell;
                                Magic->wPower        = OldMagic->wPower;
                                Magic->TrainLevel[0] = OldMagic->TrainLevel[0];
                                Magic->TrainLevel[1] = OldMagic->TrainLevel[1];
                                Magic->TrainLevel[2] = OldMagic->TrainLevel[2];
                                Magic->TrainLevel[3] = OldMagic->TrainLevel[3];
                                Magic->MaxTrain[0]   = OldMagic->MaxTrain[0];
                                Magic->MaxTrain[1]   = OldMagic->MaxTrain[1];
                                Magic->MaxTrain[2]   = OldMagic->MaxTrain[2];
                                Magic->MaxTrain[3]   = OldMagic->MaxTrain[3];
                                Magic->btTrainLv     = OldMagic->btTrainLv;
                                Magic->btJob         = OldMagic->btJob;
                                Magic->dwDelayTime   = OldMagic->dwDelayTime;
                                Magic->btDefSpell    = OldMagic->btDefSpell;
                                Magic->btDefPower    = OldMagic->btDefPower;
                                Magic->wMaxPower     = OldMagic->wMaxPower;
                                Magic->btDefMaxPower = OldMagic->btDefMaxPower;
                                HUtil32.StrToSByteArry(HUtil32.SBytePtrToString(OldMagic->sDescr, 0, Magic->DescrLen), Magic->sDescr, 18, ref Magic->DescrLen);
                                UserEngine.m_MagicList.Add((IntPtr)Magic);
                            }
                        }
                    }
                    UserEngine.m_boStartLoadMagic = false;
                }
                UserEngine.m_boStartLoadMagic = false;
            }
            finally
            {
                if (dr != null)
                {
                    dr.Close();
                    dr.Dispose();
                }
                HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 加载怪物数据
        /// </summary>
        /// <returns></returns>
        internal int LoadMonsterDB()
        {
            int          result = 0;
            TMonInfo     Monster;
            IDataReader  dr         = null;
            const string sSQLString = "SELECT NAME,RACE,RACEIMG,APPR,LVL,UNDEAD,COOLEYE,EXP,HP,MP,AC,MAC,DC,DCMAX,MC,SC,SPEED,HIT,WALK_SPD,WALKSTEP,WALKWAIT,ATTACK_SPD FROM TBL_MONSTER";

            HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
            try
            {
                if (UserEngine.MonsterList.Count > 0)
                {
                    for (int I = 0; I < UserEngine.MonsterList.Count; I++)
                    {
                        if (UserEngine.MonsterList[I] != null)
                        {
                            Dispose(UserEngine.MonsterList[I]);
                        }
                    }
                    UserEngine.MonsterList.Clear();
                }
                try
                {
                    dr = DBsession.ExecuteReader(sSQLString);
                }
                catch
                {
                    MainOutMessage("链接数据库发生异常...");
                }
                finally
                {
                    result = -1;
                }
                if (dr == null) //2013.04.16 Fixed dr为空时Read报错
                {
                    return(result);
                }
                while (dr.Read())
                {
                    Monster              = new TMonInfo();
                    Monster.ItemList     = new List <TMonItem>();
                    Monster.sName        = dr.GetString("NAME");
                    Monster.btRace       = dr.GetByte("Race");
                    Monster.btRaceImg    = dr.GetByte("RaceImg");
                    Monster.wAppr        = dr.GetUInt16("Appr");
                    Monster.wLevel       = dr.GetUInt16("Lvl");
                    Monster.btLifeAttrib = dr.GetByte("Undead");            // 不死系 1-不死系
                    Monster.wCoolEye     = dr.GetUInt16("CoolEye");
                    Monster.dwExp        = dr.GetUInt32("Exp");             // 城门或城墙的状态跟HP值有关,如果HP异常,将导致城墙显示不了
                    if ((Monster.btRace == 110) || (Monster.btRace == 111)) // 如果为城墙或城门由HP不加倍
                    {
                        Monster.wHP = dr.GetUInt16("HP");
                    }
                    else
                    {
                        Monster.wHP = (ushort)HUtil32.Round((double)dr.GetInt32("HP") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    }
                    Monster.wMP          = (ushort)HUtil32.Round((double)dr.GetUInt16("MP") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wAC          = (ushort)HUtil32.Round((double)dr.GetUInt16("AC") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wMAC         = (ushort)HUtil32.Round((double)dr.GetUInt16("MAC") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wDC          = (ushort)HUtil32.Round((double)dr.GetUInt16("DC") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wMaxDC       = (ushort)HUtil32.Round((double)dr.GetUInt16("DCMAX") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wMC          = (ushort)HUtil32.Round((double)dr.GetUInt16("MC") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wSC          = (ushort)HUtil32.Round((double)dr.GetUInt16("SC") * (M2Share.g_Config.nMonsterPowerRate / 10));
                    Monster.wSpeed       = dr.GetUInt16("SPEED");
                    Monster.wHitPoint    = dr.GetUInt16("HIT");
                    Monster.wWalkSpeed   = (ushort)HUtil32._MAX(200, dr.GetUInt16("WALK_SPD"));
                    Monster.wWalkStep    = (ushort)HUtil32._MAX(1, dr.GetUInt16("WalkStep"));
                    Monster.wWalkWait    = dr.GetUInt16("WalkWait");
                    Monster.wAttackSpeed = dr.GetUInt16("ATTACK_SPD");
                    if (Monster.wWalkSpeed < 200)
                    {
                        Monster.wWalkSpeed = 200;
                    }
                    if (Monster.wAttackSpeed < 200)
                    {
                        Monster.wAttackSpeed = 200;
                    }
                    Monster.ItemList = null;
                    LoadMonitems(Monster.sName, ref Monster.ItemList);
                    UserEngine.MonsterList.Add(Monster);
                    result = 1;
                }
            }
            finally
            {
                dr.Close();
                dr.Dispose();
                HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
            }
            return(result);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// 加载物品数据
        /// </summary>
        /// <returns></returns>
        internal unsafe int LoadItemsDB()
        {
            int          result = -1;
            int          Idx;
            TStdItem *   StdItem;
            IDataReader  dr         = null;
            const string sSQLString = "SELECT IDX,NAME,STDMODE,SHAPE,WEIGHT,ANICOUNT,SOURCE,RESERVED,LOOKS,DURAMAX,AC,AC2,MAC,MAC2,DC,DC2,MC,MC2,SC,SC2,NEED,NEEDLEVEL,PRICE,STOCK FROM TBL_STDITEMS";

            HUtil32.EnterCriticalSection(M2Share.ProcessHumanCriticalSection);
            try
            {
                try
                {
                    foreach (var item in UserEngine.StdItemList)
                    {
                        if (item != null)
                        {
                            Dispose(item);
                        }
                    }
                    UserEngine.StdItemList.Clear();
                    try
                    {
                        dr = DBsession.ExecuteReader(sSQLString);
                    }
                    catch
                    {
                        MainOutMessage("链接数据库发生异常...");
                    }
                    finally
                    {
                        result = -2;
                    }
                    if (dr == null) //2013.04.16 Fixed dr为空时Read报错
                    {
                        return(result);
                    }
                    while (dr.Read())
                    {
                        Idx     = dr.GetInt32("Idx");// 序号
                        StdItem = (TStdItem *)Marshal.AllocHGlobal(sizeof(TStdItem));
                        HUtil32.ZeroMemory(StdItem, sizeof(TStdItem));
                        HUtil32.StrToSByteArry(dr.GetString("Name"), StdItem->Name, 14, ref StdItem->NameLen);
                        StdItem->StdMode      = dr.GetByte("StdMode");                                                                   // 分类号
                        StdItem->Shape        = dr.GetByte("Shape");                                                                     // 装备外观
                        StdItem->Weight       = dr.GetByte("Weight");                                                                    // 重量
                        StdItem->AniCount     = HUtil32.IntToByte(dr.GetInt32("AniCount"));                                              // 保留
                        StdItem->Source       = dr.GetSByte("Source");
                        StdItem->Reserved     = HUtil32.IntToByte(dr.GetInt32("Reserved"));                                              // 保留
                        StdItem->Looks        = dr.GetUInt16("Looks");                                                                   // 物品外观
                        StdItem->DuraMax      = dr.GetUInt16("DuraMax");                                                                 // 持久力
                        StdItem->Reserved1    = 0;
                        StdItem->AC           = TStdItem.MakeAC(dr.GetInt32("Ac"), dr.GetInt32("Ac2"), GameConfig.nItemsACPowerRate);    //物理防御
                        StdItem->MAC          = TStdItem.MakeMAC(dr.GetInt32("Mac"), dr.GetInt32("Mac2"), GameConfig.nItemsACPowerRate); //魔法防御
                        StdItem->DC           = TStdItem.MakeDC(dr.GetInt32("Dc"), dr.GetInt32("Dc2"), GameConfig.nItemsPowerRate);      //物理攻击
                        StdItem->MC           = TStdItem.MakeMC(dr.GetInt32("Mc"), dr.GetInt32("Mc2"), GameConfig.nItemsPowerRate);      //魔法攻击
                        StdItem->SC           = TStdItem.MakeSC(dr.GetInt32("Sc"), dr.GetInt32("Sc2"), GameConfig.nItemsPowerRate);      //道术
                        StdItem->Need         = dr.GetInt32("Need");                                                                     // 附加条件
                        StdItem->NeedLevel    = dr.GetInt32("NeedLevel");                                                                // 需要等级
                        StdItem->Price        = dr.GetInt32("Price");                                                                    // 价格
                        StdItem->Stock        = dr.GetInt32("Stock");                                                                    // 库存
                        StdItem->NeedIdentify = M2Share.GetGameLogItemNameList(dr.GetString("Name"));
                        if (UserEngine.StdItemList.Count == Idx)
                        {
                            UserEngine.StdItemList.Add((IntPtr)StdItem);
                            result = 1;
                        }
                        else
                        {
                            MainOutMessage(string.Format("加载物品[Idx:{0} Name:{1}]数据失败!!!", Idx, dr.GetString("Name")));
                            result = -100;
                            return(result);
                        }
                    }
                    M2Share.g_boGameLogGold        = M2Share.GetGameLogItemNameList(M2Share.sSTRING_GOLDNAME) == 1;
                    M2Share.g_boGameLogHumanDie    = M2Share.GetGameLogItemNameList(GameMsgDef.g_sHumanDieEvent) == 1;
                    M2Share.g_boGameLogGameGold    = M2Share.GetGameLogItemNameList(M2Share.g_Config.sGameGoldName) == 1;
                    M2Share.g_boGameLogGameDiaMond = M2Share.GetGameLogItemNameList(M2Share.g_Config.sGameDiaMond) == 1; // 是否写入日志(调整金刚石)
                    M2Share.g_boGameLogGameGird    = M2Share.GetGameLogItemNameList(M2Share.g_Config.sGameGird) == 1;    // 是否写入日志(调整灵符)
                    M2Share.g_boGameLogGameGlory   = M2Share.GetGameLogItemNameList(M2Share.g_Config.sGameGlory) == 1;   // 是否写入日志(调整荣誉值)
                    M2Share.g_boGameLogGamePoint   = M2Share.GetGameLogItemNameList(M2Share.g_Config.sGamePointName) == 1;
                }
                finally
                {
                    if (dr != null)
                    {
                        dr.Close();
                        dr.Dispose();
                    }
                }
            }
            finally
            {
                HUtil32.LeaveCriticalSection(M2Share.ProcessHumanCriticalSection);
            }

            return(result);
        }
Ejemplo n.º 23
0
        public unsafe void UnBindUseItem(TPlayObject PlayObject, string[] @Params)
        {
            if (@Params == null)
            {
                return;
            }
            string sHumanName = @Params.Length > 0 ? @Params[0] : "";
            string sItem      = @Params.Length > 1 ? @Params[1] : "";
            string sType      = @Params.Length > 2 ? @Params[2] : "";

            TPlayObject m_PlayObject;
            TUserItem * UserItem = null;
            int         nItem    = M2Share.GetUseItemIdx(sItem);
            int         nBind    = -1;
            TItemBind   ItemBind;
            int         nItemIdx;
            int         nMakeIdex;
            string      sBindName;

            if ((sType).ToLower().CompareTo(("帐号").ToLower()) == 0)
            {
                nBind = 0;
            }
            if ((sType).ToLower().CompareTo(("人物").ToLower()) == 0)
            {
                nBind = 1;
            }
            if ((sType).ToLower().CompareTo(("IP").ToLower()) == 0)
            {
                nBind = 2;
            }
            if ((sType).ToLower().CompareTo(("死亡").ToLower()) == 0) // 死亡不爆出
            {
                nBind = 3;
            }
            if ((nItem < 0) || (nBind < 0) || (sHumanName == "") || ((sHumanName != "") && (sHumanName[0] == '?')))
            {
                if (M2Share.g_Config.boGMShowFailMsg)
                {
                    PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandParamUnKnow, this.Attributes.Name, GameMsgDef.g_sGameCommandBindUseItemHelpMsg), TMsgColor.c_Red, TMsgType.t_Hint);
                }
                return;
            }
            m_PlayObject = UserEngine.GetPlayObject(sHumanName);
            if (m_PlayObject == null)
            {
                PlayObject.SysMsg(string.Format(GameMsgDef.g_sNowNotOnLineOrOnOtherServer, sHumanName), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            UserItem = m_PlayObject.m_UseItems[nItem];
            if (UserItem->wIndex == 0)
            {
                PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandBindUseItemNoItemMsg, sHumanName, sItem), TMsgColor.c_Red, TMsgType.t_Hint);
                return;
            }
            nItemIdx  = UserItem->wIndex;
            nMakeIdex = UserItem->MakeIndex;
            switch (nBind)
            {
            case 0:
                sBindName = m_PlayObject.m_sUserID;
                //M2Share.g_ItemBindAccount.__Lock();
                try
                {
                    if (M2Share.g_ItemBindAccount.Count > 0)
                    {
                        for (int I = 0; I < M2Share.g_ItemBindAccount.Count; I++)
                        {
                            ItemBind = M2Share.g_ItemBindAccount[I];
                            if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                            {
                                PlayObject.SysMsg(string.Format(GameMsgDef.g_sGameCommandBindUseItemAlreadBindMsg, new string[] { sHumanName, sItem }), TMsgColor.c_Red, TMsgType.t_Hint);
                                return;
                            }
                        }
                    }
                    ItemBind           = new TItemBind();
                    ItemBind.nItemIdx  = nItemIdx;
                    ItemBind.nMakeIdex = nMakeIdex;
                    ItemBind.sBindName = sBindName;
                    M2Share.g_ItemBindAccount.Insert(0, ItemBind);
                }
                finally
                {
                    //M2Share.g_ItemBindAccount.UnLock();
                }
                M2Share.SaveItemBindAccount();
                PlayObject.SysMsg(string.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                m_PlayObject.SysMsg(string.Format("您的%s[%s]已经绑定到%s[%s]上了。", M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), sType, sBindName), TMsgColor.c_Blue, TMsgType.t_Hint);
                break;

            case 1:
                sBindName = m_PlayObject.m_sCharName;
                //M2Share.g_ItemBindCharName.__Lock();
                try
                {
                    if (M2Share.g_ItemBindCharName.Count > 0)
                    {
                        for (int I = 0; I < M2Share.g_ItemBindCharName.Count; I++)
                        {
                            //ItemBind = M2Share.g_ItemBindCharName[I];
                            //if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                            //{
                            //    this.SysMsg(string.Format(M2Share.g_sGameCommandBindUseItemAlreadBindMsg, new string[] { sHumanName, sItem }), TMsgColor.c_Red, TMsgType.t_Hint);
                            //    return;
                            //}
                        }
                    }
                    ItemBind           = new TItemBind();
                    ItemBind.nItemIdx  = nItemIdx;
                    ItemBind.nMakeIdex = nMakeIdex;
                    ItemBind.sBindName = sBindName;
                    // M2Share.g_ItemBindCharName.InsertText(0, ItemBind);
                }
                finally
                {
                    //M2Share.g_ItemBindCharName.UnLock();
                }
                M2Share.SaveItemBindCharName();
                //this.SysMsg(string.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                //PlayObject.SysMsg(string.Format("您的%s[%s]已经绑定到%s[%s]上了。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), sType, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                break;

            case 2:
                sBindName = m_PlayObject.m_sIPaddr;
                //M2Share.g_ItemBindIPaddr.__Lock();
                try
                {
                    if (M2Share.g_ItemBindIPaddr.Count > 0)
                    {
                        for (int I = 0; I < M2Share.g_ItemBindIPaddr.Count; I++)
                        {
                            //ItemBind = M2Share.g_ItemBindIPaddr[I];
                            //if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.nMakeIdex == nMakeIdex))
                            //{
                            //    this.SysMsg(string.Format(M2Share.g_sGameCommandBindUseItemAlreadBindMsg, new string[] { sHumanName, sItem }), TMsgColor.c_Red, TMsgType.t_Hint);
                            //    return;
                            //}
                        }
                    }
                    ItemBind           = new TItemBind();
                    ItemBind.nItemIdx  = nItemIdx;
                    ItemBind.nMakeIdex = nMakeIdex;
                    ItemBind.sBindName = sBindName;
                    // M2Share.g_ItemBindIPaddr.InsertText(0, ItemBind);
                }
                finally
                {
                    //M2Share.g_ItemBindIPaddr.UnLock();
                }
                M2Share.SaveItemBindIPaddr();
                //this.SysMsg(string.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                //PlayObject.SysMsg(string.Format("您的%s[%s]已经绑定到%s[%s]上了。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), sType, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                break;

            case 3:    // 人物装备死亡不爆绑定
                sBindName = m_PlayObject.m_sCharName;
                HUtil32.EnterCriticalSection(M2Share.g_ItemBindDieNoDropName);
                try
                {
                    if (M2Share.g_ItemBindDieNoDropName.Count > 0)
                    {
                        for (int I = 0; I < M2Share.g_ItemBindDieNoDropName.Count; I++)
                        {
                            //ItemBind = M2Share.g_ItemBindDieNoDropName[I];
                            //if ((ItemBind.nItemIdx == nItemIdx) && (ItemBind.sBindName == sBindName))
                            //{
                            //    this.SysMsg(string.Format(M2Share.g_sGameCommandBindUseItemAlreadBindMsg, new string[] { sHumanName, sItem }), TMsgColor.c_Red, TMsgType.t_Hint);
                            //    return;
                            //}
                        }
                    }
                    ItemBind           = new TItemBind();
                    ItemBind.nItemIdx  = nItemIdx;
                    ItemBind.nMakeIdex = 0;
                    ItemBind.sBindName = sBindName;
                    //M2Share.g_ItemBindDieNoDropName.InsertText(0, ItemBind);
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.g_ItemBindDieNoDropName);
                }
                M2Share.SaveItemBindDieNoDropName();
                // 保存人物装备死亡不爆列表 20081127
                //this.SysMsg(string.Format("%s[%s]IDX[%d]系列号[%d]持久[%d-%d],绑定到%s成功。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), UserItem->wIndex, UserItem->MakeIndex, UserItem->Dura, UserItem->DuraMax, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                //PlayObject.SysMsg(string.Format("您的%s[%s]已经绑定到%s[%s]上了。", new string[] { M2Share.GetUseItemName(nItem), UserEngine.GetStdItemName(UserItem->wIndex), sType, sBindName }), TMsgColor.c_Blue, TMsgType.t_Hint);
                break;
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 获取DBSERBER发送过来的消息
        /// </summary>
        /// <param name="nQueryID"></param>
        /// <param name="nIdent"></param>
        /// <param name="nRecog"></param>
        /// <param name="sStr"></param>
        /// <param name="dwTimeOut"></param>
        /// <param name="boLoadRcd"></param>
        /// <param name="sName"></param>
        /// <returns></returns>
        public unsafe static bool GetDBSockMsg(int nQueryID, ref int nIdent, ref int nRecog, ref string sStr, uint dwTimeOut, bool boLoadRcd, string sName)
        {
            bool            result;
            bool            boLoadDBOK;
            uint            dwTimeOutTick;
            string          s24        = string.Empty;
            string          s28        = string.Empty;
            string          s2C        = string.Empty;
            string          sCheckFlag = string.Empty;
            string          sDefMsg;
            string          s38;
            int             nLen;
            int             nCheckCode;
            TDefaultMessage DefMsg;
            byte            nCode;
            const string    sLoadDBTimeOut = "[RunDB] 读取人物数据超时...";
            const string    sSaveDBTimeOut = "[RunDB] 保存人物数据超时...";

            boLoadDBOK    = false;
            result        = false;
            dwTimeOutTick = HUtil32.GetTickCount();
            nCode         = 0;
            while (true)
            {
                if ((HUtil32.GetTickCount() - dwTimeOutTick) > dwTimeOut)//dwTimeOut--等待消息的时间
                {
                    nCode = 1;
                    break;
                }
                s24 = "";
                HUtil32.EnterCriticalSection(M2Share.UserDBSection);
                try
                {
                    if (M2Share.g_Config.sDBSocketRecvText.IndexOf("!") > 0)
                    {
                        s24 = M2Share.g_Config.sDBSocketRecvText;
                        M2Share.g_Config.sDBSocketRecvText = "";
                    }
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(M2Share.UserDBSection);
                }
                if (s24 != "")
                {
                    s28 = "";
                    s24 = HUtil32.ArrestStringEx(s24, "#", "!", ref s28);
                    if (s28 != "")
                    {
                        s28  = HUtil32.GetValidStr3(s28, ref s2C, new string[] { "/" });
                        nLen = s28.Length;
                        if ((nLen >= sizeof(TDefaultMessage)) && (HUtil32.Str_ToInt(s2C, 0) == nQueryID))
                        {
                            nCheckCode = HUtil32.MakeLong(HUtil32.Str_ToInt(s2C, 0) ^ 170, nLen);
                            byte[] data = new byte[sizeof(int)];
                            fixed(byte *by = data)
                            {
                                *(int *)by = nCheckCode;
                            }

                            sCheckFlag = EncryptUnit.EncodeBuffer(data, data.Length);
                            if (HUtil32.CompareBackLStr(s28, sCheckFlag, sCheckFlag.Length))
                            {
                                if (nLen == Grobal2.DEFBLOCKSIZE)
                                {
                                    sDefMsg = s28;
                                    s38     = "";
                                }
                                else
                                {
                                    sDefMsg = s28.Substring(0, Grobal2.DEFBLOCKSIZE);
                                    s38     = s28.Substring(Grobal2.DEFBLOCKSIZE + 1 - 1, s28.Length - Grobal2.DEFBLOCKSIZE - 6);
                                }
                                DefMsg     = EncryptUnit.DecodeMessage(sDefMsg);
                                nIdent     = DefMsg.Ident;
                                nRecog     = DefMsg.Recog;
                                sStr       = s38;
                                boLoadDBOK = true;
                                result     = true;
                                break;
                            }
                        }
                        else
                        {
                            if ((nLen < Marshal.SizeOf(typeof(TDefaultMessage))))
                            {
                                nCode = 2;
                            }
                            if ((HUtil32.Str_ToInt(s2C, 0) != nQueryID))
                            {
                                nCode = 4;
                            }
                            M2Share.g_Config.nLoadDBErrorCount++;
                            break;
                        }
                    }
                    else
                    {
                        nCode = 3;
                        M2Share.g_Config.nLoadDBErrorCount++;
                        break;
                    }
                }
                else
                {
                    System.Threading.Thread.Sleep(1);
                }
            }
            if (!boLoadDBOK)
            {
                M2Share.g_nSaveRcdErrorCount++;
                if (boLoadRcd)
                {
                    M2Share.MainOutMessage(sLoadDBTimeOut + sName + " Code:" + nCode);
                }
                else
                {
                    M2Share.MainOutMessage(sSaveDBTimeOut + sName + " Code:" + nCode);
                }
            }
            else
            {
                M2Share.g_nSaveRcdErrorCount = 0;
            }
            M2Share.g_Config.boDBSocketWorking = false;
            return(result);
        }
Ejemplo n.º 25
0
        /// <summary>
        /// 处理游戏数据
        /// </summary>
        private void ProcessGameDate()
        {
            IList <TLoadDBInfo>     TempList;
            IList <TGoldChangeInfo> ChangeGoldList;
            TLoadDBInfo             LoadDBInfo;
            TSaveRcd        SaveRcd;
            TGoldChangeInfo GoldChangeInfo;
            bool            boReTryLoadDB = true;
            bool            boSaveRcd;
            byte            nCode             = 0;
            const string    sExceptionMsg     = "{异常} TFrontEngine::ProcessGameDate Code:{0}";
            const string    sSaveExceptionMsg = "数据库服务器出现异常,请重新启动数据库服务器(DBServer.exe)!!!";

            try
            {
                ChangeGoldList = null;
                nCode          = 17;
                if (M2Share.g_nSaveRcdErrorCount >= 10)
                {
                    nCode = 18;
                    if (HUtil32.GetTickCount() - M2Share.g_dwShowSaveRcdErrorTick > 5000)//修改秒触发
                    {
                        nCode = 19;
                        M2Share.g_dwShowSaveRcdErrorTick = HUtil32.GetTickCount();
                        M2Share.MainOutMessage(sSaveExceptionMsg);
                    }
                }
                HUtil32.EnterCriticalSection(m_UserCriticalSection);
                try
                {
                    nCode = 20;
                    if (m_SaveRcdList.Count > 0)
                    {
                        nCode = 21;
                        for (int I = 0; I < m_SaveRcdList.Count; I++)
                        {
                            m_SaveRcdTempList.Add(m_SaveRcdList[I]);
                        }
                    }
                    nCode             = 1;
                    TempList          = m_LoadRcdTempList;
                    nCode             = 2;
                    m_LoadRcdTempList = m_LoadRcdList;
                    nCode             = 3;
                    m_LoadRcdList     = TempList;
                    nCode             = 4;
                    if (m_ChangeGoldList.Count > 0)
                    {
                        nCode          = 22;
                        ChangeGoldList = new List <TGoldChangeInfo>();
                        nCode          = 23;
                        for (int I = 0; I < m_ChangeGoldList.Count; I++)
                        {
                            if (m_ChangeGoldList[I] != null)
                            {
                                ChangeGoldList.Add(m_ChangeGoldList[I]);
                            }
                        }
                    }
                }
                finally
                {
                    HUtil32.LeaveCriticalSection(m_UserCriticalSection);
                }
                if (m_SaveRcdTempList.Count > 0)
                {
                    for (int I = 0; I < m_SaveRcdTempList.Count; I++)
                    {
                        SaveRcd = m_SaveRcdTempList[I];
                        if ((!RunDB.DBSocketConnected()) || (M2Share.g_nSaveRcdErrorCount >= 10))// DBSERVER关闭 不保存
                        {
                            if ((SaveRcd.PlayObject != 0) && (!SaveRcd.boIsHero))
                            {
                                GetObject <TPlayObject>(SaveRcd.PlayObject).m_boRcdSaved = true;
                            }
                            HUtil32.EnterCriticalSection(m_UserCriticalSection);
                            try
                            {
                                for (int II = m_SaveRcdList.Count - 1; II >= 0; II--)
                                {
                                    if (m_SaveRcdList.Count <= 0)
                                    {
                                        break;
                                    }
                                    if (m_SaveRcdList[II] == SaveRcd)
                                    {
                                        m_SaveRcdList.RemoveAt(II);
                                        nCode   = 5;
                                        SaveRcd = null;
                                        nCode   = 6;
                                        break;
                                    }
                                }
                            }
                            finally
                            {
                                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
                            }
                        }
                        else
                        {
                            boSaveRcd = false;
                            if (SaveRcd.nReTryCount == 0)
                            {
                                boSaveRcd = true;
                            }
                            else if ((SaveRcd.nReTryCount < 50) && (HUtil32.GetTickCount() - SaveRcd.dwSaveTick > 5000))// 保存错误等待5秒后在保存
                            {
                                boSaveRcd = true;
                            }
                            else if (SaveRcd.nReTryCount >= 50) // 失败50次后不在保存
                            {
                                if ((SaveRcd.PlayObject != 0) && (!SaveRcd.boIsHero))
                                {
                                    GetObject <TPlayObject>(SaveRcd.PlayObject).m_boRcdSaved = true;
                                }
                                HUtil32.EnterCriticalSection(m_UserCriticalSection);
                                try
                                {
                                    for (int II = m_SaveRcdList.Count - 1; II >= 0; II--)
                                    {
                                        if (m_SaveRcdList.Count <= 0)
                                        {
                                            break;
                                        }
                                        if (m_SaveRcdList[II] == SaveRcd)
                                        {
                                            m_SaveRcdList.RemoveAt(II);
                                            nCode   = 7;
                                            SaveRcd = null;
                                            nCode   = 8;
                                            break;
                                        }
                                    }
                                }
                                finally
                                {
                                    HUtil32.LeaveCriticalSection(m_UserCriticalSection);
                                }
                            }
                            if (boSaveRcd)// 保存人物 英雄 双英雄数据
                            {
                                if (RunDB.SaveHumRcdToDB(SaveRcd))
                                {
                                    if ((SaveRcd.PlayObject != 0) && (!SaveRcd.boIsHero))
                                    {
                                        GetObject <TPlayObject>(SaveRcd.PlayObject).m_boRcdSaved = true;
                                    }
                                    HUtil32.EnterCriticalSection(m_UserCriticalSection);
                                    try
                                    {
                                        for (int II = m_SaveRcdList.Count - 1; II >= 0; II--)
                                        {
                                            if (m_SaveRcdList.Count <= 0)
                                            {
                                                break;
                                            }
                                            if (m_SaveRcdList[II] == SaveRcd)
                                            {
                                                m_SaveRcdList.RemoveAt(II);
                                                nCode   = 9;
                                                SaveRcd = null;
                                                nCode   = 10;
                                                break;
                                            }
                                        }
                                    }
                                    finally
                                    {
                                        HUtil32.LeaveCriticalSection(m_UserCriticalSection);
                                    }
                                }
                                else
                                {
                                    SaveRcd.nReTryCount++;// 保存失败
                                    SaveRcd.dwSaveTick = HUtil32.GetTickCount();
                                }
                            }
                        }
                    }
                    m_SaveRcdTempList.Clear();
                    nCode = 11;
                }
                if (m_LoadRcdTempList.Count > 0)
                {
                    nCode = 17;
                    for (int I = 0; I < m_LoadRcdTempList.Count; I++)
                    {
                        nCode      = 18;
                        LoadDBInfo = m_LoadRcdTempList[I];
                        nCode      = 19;
                        if ((!LoadHumFromDB(LoadDBInfo, ref boReTryLoadDB)) && (!LoadDBInfo.boIsHero))// 加载人物 英雄 双英雄数据
                        {
                            M2Share.RunSocket.CloseUser(LoadDBInfo.nGateIdx, LoadDBInfo.nSocket);
                        }
                        if (!boReTryLoadDB)
                        {
                            Dispose(LoadDBInfo);
                            LoadDBInfo = null;
                        }
                        else
                        {
                            // 如果读取人物数据失败(数据还没有保存),则重新加入队列
                            HUtil32.EnterCriticalSection(m_UserCriticalSection);
                            try
                            {
                                m_LoadRcdList.Add(LoadDBInfo);
                            }
                            finally
                            {
                                HUtil32.LeaveCriticalSection(m_UserCriticalSection);
                            }
                        }
                    }
                }
                m_LoadRcdTempList.Clear();
                nCode = 12;
                if (ChangeGoldList != null)
                {
                    nCode = 121;
                    try
                    {
                        if (ChangeGoldList.Count > 0)
                        {
                            nCode = 122;
                            for (int I = 0; I < ChangeGoldList.Count; I++)
                            {
                                nCode          = 123;
                                GoldChangeInfo = ChangeGoldList[I];
                                nCode          = 125;
                                if (GoldChangeInfo != null)
                                {
                                    nCode = 126;
                                    ChangeUserGoldInDB(GoldChangeInfo);
                                    nCode = 13;
                                    Dispose(GoldChangeInfo);
                                    nCode = 14;
                                }
                            }
                        }
                    }
                    finally
                    {
                        nCode = 15;
                        Dispose(ChangeGoldList);
                        ChangeGoldList = null;
                    }
                }
            }
            catch
            {
                M2Share.MainOutMessage(string.Format(sExceptionMsg, nCode));
            }
        }