/// <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)); }
/// <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); } }
/// <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); } }
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); }
/// <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); }
/// <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); }
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); } }
/**************************************************************** ** 函 数 名: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(); }
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); } }
public int SaveListCount() { int result = 0; HUtil32.EnterCriticalSection(m_UserCriticalSection); try { result = m_SaveRcdList.Count; } finally { HUtil32.LeaveCriticalSection(m_UserCriticalSection); } return(result); }
/// <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); }
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); }
/**************************************************************** ** 函 数 名: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); } }
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); } }
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); } }
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; } }
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); } }
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(); } }
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); } }
/// <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); }
/// <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); }
/// <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); }
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; } }
/// <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); }
/// <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)); } }