diff --git a/Server/Src/LogicServer/PartnerModule.cpp b/Server/Src/LogicServer/PartnerModule.cpp index aa9ce670..61e62381 100644 --- a/Server/Src/LogicServer/PartnerModule.cpp +++ b/Server/Src/LogicServer/PartnerModule.cpp @@ -26,7 +26,10 @@ CPartnerModule::~CPartnerModule() BOOL CPartnerModule::OnCreate(UINT64 u64RoleID) { - + for (int i = 0; i < 20; i++) + { + AddPartner(i + 1); + } return TRUE; } @@ -93,6 +96,10 @@ BOOL CPartnerModule::SaveToClientLoginData(RoleLoginAck& Ack) pItem->set_starexp(pObject->m_StarExp); pItem->set_setpos(pObject->m_SetPos); } + + m_setChange.clear(); + m_setRemove.clear(); + return TRUE; } @@ -106,8 +113,8 @@ BOOL CPartnerModule::DispatchPacket(NetPacket* pNetPacket) { switch (pNetPacket->m_dwMsgID) { - PROCESS_MESSAGE_ITEM(MSG_SETUP_PARTNER_REQ, OnMsgSetupPartnerReq); - PROCESS_MESSAGE_ITEM(MSG_UNSET_PARTNER_REQ, OnMsgUnsetPartnerReq); + PROCESS_MESSAGE_ITEM(MSG_SETUP_PARTNER_REQ, OnMsgSetupPartnerReq); + PROCESS_MESSAGE_ITEM(MSG_UNSET_PARTNER_REQ, OnMsgUnsetPartnerReq); } return FALSE; @@ -127,7 +134,7 @@ BOOL CPartnerModule::OnMsgSetupPartnerReq(NetPacket* pNetPacket) return TRUE; } - PartnerDataObject *pPartnerObj = GetPartnerByGuid(Req.partnerguid()); + PartnerDataObject* pPartnerObj = GetPartnerByGuid(Req.partnerguid()); if(pPartnerObj == NULL) { SetupPartnerAck Ack; @@ -149,11 +156,11 @@ BOOL CPartnerModule::OnMsgSetupPartnerReq(NetPacket* pNetPacket) pPartnerObj->m_SetPos = Req.targetpos(); pPartnerObj->Unlock(); m_setChange.insert(pPartnerObj->m_uGuid); - + SetupPartnerAck Ack; Ack.set_retcode(MRC_SUCCESSED); m_pOwnPlayer->SendMsgProtoBuf(MSG_SETUP_PARTNER_ACK, Ack); - + return TRUE; } diff --git a/Server/Src/LogicServer/PetModule.cpp b/Server/Src/LogicServer/PetModule.cpp index 3d8572c0..0692bb23 100644 --- a/Server/Src/LogicServer/PetModule.cpp +++ b/Server/Src/LogicServer/PetModule.cpp @@ -17,7 +17,10 @@ CPetModule::~CPetModule() BOOL CPetModule::OnCreate(UINT64 u64RoleID) { - + for (int i = 0; i < 13; i++) + { + AddPet(i + 1); + } return TRUE; } diff --git a/Server/Src/LogicServer/PlayerObject.cpp b/Server/Src/LogicServer/PlayerObject.cpp index 206c98aa..737290dc 100644 --- a/Server/Src/LogicServer/PlayerObject.cpp +++ b/Server/Src/LogicServer/PlayerObject.cpp @@ -355,11 +355,11 @@ BOOL CPlayerObject::SendRoleLoginAck() return TRUE; } -BOOL CPlayerObject::SendObjectChangeNtf(UINT32 dwChangeType, UINT64 uIntValue1, UINT64 uIntValue2, std::string strValue) +BOOL CPlayerObject::SendPlayerChange(EChangeType eChangeType, UINT64 uIntValue1, UINT64 uIntValue2, std::string strValue) { ObjectChangeNotify Ntf; Ntf.set_roleid(GetObjectID()); - Ntf.set_changetype(dwChangeType); + Ntf.set_changetype(eChangeType); Ntf.set_intvalue1(uIntValue1); Ntf.set_intvalue2(uIntValue2); if (!strValue.empty() && strValue.size() > 0) @@ -367,7 +367,7 @@ BOOL CPlayerObject::SendObjectChangeNtf(UINT32 dwChangeType, UINT64 uIntValue1, Ntf.set_strvalue(strValue); } - SendMsgToScene(MSG_SCENEOBJ_CHAGE_NTF, Ntf); + SendMsgToScene(MSG_PLAYER_CHAGE_NTF, Ntf); return TRUE; } @@ -385,6 +385,15 @@ BOOL CPlayerObject::ToTransferData( TransferDataReq& Req ) pRoleData->set_level(pModule->m_pRoleDataObject->m_Level); pRoleData->set_name(pModule->m_pRoleDataObject->m_szName); + CMountModule* pMountModule = (CMountModule*)GetModuleByType(MT_MOUNT); + ERROR_RETURN_FALSE(pMountModule != NULL); + + MountDataObject* pMountData = pMountModule->GetCurrentMountData(); + if (pMountData != NULL) + { + pRoleData->set_mountid(pMountData->m_MountID); + } + for(int i = 0; i < PROPERTY_NUM; i++) { pRoleData->add_propertys(m_Propertys[i]); diff --git a/Server/Src/LogicServer/PlayerObject.h b/Server/Src/LogicServer/PlayerObject.h index df6e8dcf..905804bf 100644 --- a/Server/Src/LogicServer/PlayerObject.h +++ b/Server/Src/LogicServer/PlayerObject.h @@ -5,6 +5,7 @@ #include "ModuleBase.h" #include "../Message/Msg_Game.pb.h" #include "../ServerData/ServerDefine.h" +#include "../ServerData/serverStruct.h" class CPlayerObject { @@ -52,7 +53,7 @@ class CPlayerObject BOOL SendIntoSceneNotify(UINT32 dwCopyGuid, UINT32 dwCopyID, UINT32 dwSvrID); BOOL SendLeaveScene(UINT32 dwCopyGuid, UINT32 dwSvrID); BOOL SendRoleLoginAck(); - BOOL SendObjectChangeNtf(UINT32 dwChangeType, UINT64 uIntValue1, UINT64 uIntValue2, std::string strValue); + BOOL SendPlayerChange(EChangeType eChangeType, UINT64 uIntValue1, UINT64 uIntValue2, std::string strValue); BOOL SetConnectID(UINT32 dwProxyID, UINT32 dwClientID); diff --git a/Server/Src/LoginServer/LogicSvrManager.cpp b/Server/Src/LoginServer/LogicSvrManager.cpp index 43a151c1..be3d97a4 100644 --- a/Server/Src/LoginServer/LogicSvrManager.cpp +++ b/Server/Src/LoginServer/LogicSvrManager.cpp @@ -73,7 +73,7 @@ BOOL LogicSvrManager::RegisterLogicServer(UINT32 dwConnID, UINT32 dwServerID, UI char szSql[SQL_BUFF_LEN] = { 0 }; snprintf(szSql, SQL_BUFF_LEN, "replace into server_list(id, name, ip, port,http_port,watch_port,state, min_version, max_version, check_chan, check_ip) values(%d, '%s', '%s', %d, %d, %d, %d, '%s','%s','%s','%s');", - pNode->m_dwServerID, pNode->m_strSvrName.c_str(),"127.0.0.1", pNode->m_dwPort, pNode->m_dwHttpPort, pNode->m_dwWatchPort, ESS_GOOD, "1.0.0", "9.0.0","*", "*"); + pNode->m_dwServerID, pNode->m_strSvrName.c_str(), "127.0.0.1", pNode->m_dwPort, pNode->m_dwHttpPort, pNode->m_dwWatchPort, ESS_GOOD, "1.0.0", "9.0.0", "*", "*"); if (m_DBConnection.execSQL(szSql) < 0) { CLog::GetInstancePtr()->LogError("LogicSvrManager::RegisterLogicServer Error :%s", m_DBConnection.GetErrorMsg()); @@ -203,6 +203,13 @@ BOOL LogicSvrManager::ReloadServerList(UINT32 dwServerID) pNode->m_strIpAddr = QueryResult.getStringField("ip", "*"); pNode->m_dwPort = QueryResult.getIntField("port", 0); pNode->m_bDelete = FALSE; + + if (pNode->m_strIpAddr.empty() || pNode->m_strIpAddr == "*") + { + CLog::GetInstancePtr()->LogError("ReloadServerList Failed, serverid:%d has no ip address!", dwSvrID); + return FALSE; + } + std::string strMinVersion = QueryResult.getStringField("min_version", "0"); if(strMinVersion.empty()) { diff --git a/Server/Src/ServerData/ServerStruct.h b/Server/Src/ServerData/ServerStruct.h index 721f5c79..69a6656e 100644 --- a/Server/Src/ServerData/ServerStruct.h +++ b/Server/Src/ServerData/ServerStruct.h @@ -10,5 +10,14 @@ struct BattleRecord UINT32 m_dwDamage; //总伤害值 }; +enum EChangeType +{ + ECT_EQUIP = 1,//装备改变 + ECT_MOUNT = 2,//坐骑改变 + ECT_LEVEL = 3,//等级 + ECT_PARTNER = 4,//伙伴 +}; + + #endif //__SERVER_STRUCT_H__ \ No newline at end of file diff --git a/Server/Src/ServerEngine/Connection.cpp b/Server/Src/ServerEngine/Connection.cpp index 0e9026a1..b6b33ec2 100644 --- a/Server/Src/ServerEngine/Connection.cpp +++ b/Server/Src/ServerEngine/Connection.cpp @@ -616,10 +616,15 @@ CConnectionMgr::~CConnectionMgr() CConnection* CConnectionMgr::CreateConnection() { - ERROR_RETURN_NULL(m_pFreeConnRoot != NULL); - CConnection* pTemp = NULL; m_CritSecConnList.Lock(); + if (m_pFreeConnRoot == NULL) + { + //表示己到达连接的上限,不能再创建新的连接了 + m_CritSecConnList.Unlock(); + return NULL; + } + if(m_pFreeConnRoot == m_pFreeConnTail) { pTemp = m_pFreeConnRoot; diff --git a/Server/Src/ServerEngine/DBInterface/DBInterface.h b/Server/Src/ServerEngine/DBInterface/DBInterface.h index 54640edf..8e2433af 100644 --- a/Server/Src/ServerEngine/DBInterface/DBInterface.h +++ b/Server/Src/ServerEngine/DBInterface/DBInterface.h @@ -1,5 +1,5 @@ -#ifndef __SERVER_STRUCT_H__ -#define __SERVER_STRUCT_H__ +#ifndef __DB_INTERFACE_H__ +#define __DB_INTERFACE_H__ class CDBStoredProcedure; @@ -56,4 +56,4 @@ while(pProcedure->m_DBRecordSet.MoveNext()) } */ -#endif //__SERVER_STRUCT_H__ \ No newline at end of file +#endif //__DB_INTERFACE_H__ \ No newline at end of file diff --git a/Server/Src/ServerEngine/NetManager.cpp b/Server/Src/ServerEngine/NetManager.cpp index 47a65aa6..88b837b5 100644 --- a/Server/Src/ServerEngine/NetManager.cpp +++ b/Server/Src/ServerEngine/NetManager.cpp @@ -54,7 +54,8 @@ BOOL CNetManager::WorkThread_Listen() SOCKET hClientSocket = accept(m_hListenSocket, (sockaddr*)&Con_Addr, &nLen); if(hClientSocket == INVALID_SOCKET) { - break; + CLog::GetInstancePtr()->LogError("accept 错误 原因:%s!", CommonSocket::GetLastErrorStr(CommonSocket::GetSocketLastError()).c_str()); + return FALSE; } CommonSocket::SetSocketUnblock(hClientSocket); CConnection* pConnection = AssociateCompletePort(hClientSocket, FALSE); @@ -76,7 +77,7 @@ BOOL CNetManager::WorkThread_Listen() } else { - CLog::GetInstancePtr()->LogError("accept 错误 原因:%s!", CommonSocket::GetLastErrorStr(CommonSocket::GetSocketLastError()).c_str()); + CLog::GetInstancePtr()->LogError("接受新连接失败 原因:己达到最大连接数或者绑定失败!"); } } diff --git a/Server/Src/StaticData/ConfigDefine.h b/Server/Src/StaticData/ConfigDefine.h index 3a67e63b..a264550d 100644 --- a/Server/Src/StaticData/ConfigDefine.h +++ b/Server/Src/StaticData/ConfigDefine.h @@ -5,8 +5,6 @@ enum ETaskEvent { TE_NONE = 0, TE_PASS_MAIN_COPY, //挑战主线 - - }; diff --git a/Server/Src/StaticData/StaticData.cpp b/Server/Src/StaticData/StaticData.cpp index 6c9d6c8c..db63dfed 100644 --- a/Server/Src/StaticData/StaticData.cpp +++ b/Server/Src/StaticData/StaticData.cpp @@ -32,18 +32,18 @@ BOOL CStaticData::InitDataReader() m_vtDataFuncList.push_back(DataFuncNode("Data_Equip", &CStaticData::ReadEquipInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_Gem", &CStaticData::ReadGemInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_Partner", &CStaticData::ReadPartnerInfo)); + m_vtDataFuncList.push_back(DataFuncNode("Data_Mount", &CStaticData::ReadMountInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_Store", &CStaticData::ReadStoreInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_Combo_Skill", &CStaticData::ReadComboSkillInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_Skill", &CStaticData::ReadSkillInfo)); m_vtDataFuncList.push_back(DataFuncNode("Data_FlyObject", &CStaticData::ReadBulletInfo)); - + m_vtDataFuncList.push_back(DataFuncNode("Data_Pet", &CStaticData::ReadPetInfo)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Language", &CStaticData::ReadLanguage)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Award", &CStaticData::ReadAwardData)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Func", &CStaticData::ReadFuncInfo)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Func_Vip", &CStaticData::ReadFuncVipInfo)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Func_Cost", &CStaticData::ReadFuncCostInfo)); -// m_vtDataFuncList.push_back(DataFuncNode("Data_Pet", &CStaticData::ReadPetInfo)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Task", &CStaticData::ReadTaskInfo)); // m_vtDataFuncList.push_back(DataFuncNode("Data_Buff", &CStaticData::ReadBuffInfo)); @@ -863,6 +863,7 @@ BOOL CStaticData::ReadPetInfo(CppSQLite3Query& QueryData) { StPetInfo stValue; stValue.dwPetID = QueryData.getIntField("Id"); + stValue.dwActorID = QueryData.getIntField("ActorId"); m_mapPetInfo.insert(std::make_pair(stValue.dwPetID, stValue)); QueryData.nextRow(); } @@ -908,6 +909,33 @@ StPartnerInfo* CStaticData::GetPartnerInfo(UINT32 dwPartnerID) return NULL; } +BOOL CStaticData::ReadMountInfo(CppSQLite3Query& QueryData) +{ + m_mapMountInfo.clear(); + + while (!QueryData.eof()) + { + StMountInfo stValue; + stValue.dwMountID = QueryData.getIntField("Id"); + stValue.dwMountID = QueryData.getIntField("ActorId"); + m_mapMountInfo.insert(std::make_pair(stValue.dwMountID, stValue)); + QueryData.nextRow(); + } + + return TRUE; +} + +StMountInfo* CStaticData::GetMountInfo(UINT32 dwMountID) +{ + ERROR_RETURN_NULL(dwMountID != 0); + auto itor = m_mapMountInfo.find(dwMountID); + if (itor != m_mapMountInfo.end()) + { + return &itor->second; + } + return NULL; +} + BOOL CStaticData::ReadTaskInfo(CppSQLite3Query& QueryData) { m_mapTaskInfo.clear(); diff --git a/Server/Src/StaticData/StaticData.h b/Server/Src/StaticData/StaticData.h index 57dc02f3..381dfdfa 100644 --- a/Server/Src/StaticData/StaticData.h +++ b/Server/Src/StaticData/StaticData.h @@ -136,6 +136,11 @@ class CStaticData BOOL ReadPartnerInfo(CppSQLite3Query& QueryData); StPartnerInfo* GetPartnerInfo(UINT32 dwPartnerID); + //坐骑 + std::map m_mapMountInfo; + BOOL ReadMountInfo(CppSQLite3Query& QueryData); + StMountInfo* GetMountInfo(UINT32 dwMountID); + //任务 std::map m_mapTaskInfo; BOOL ReadTaskInfo(CppSQLite3Query& QueryData); diff --git a/Server/Src/StaticData/StaticStruct.h b/Server/Src/StaticData/StaticStruct.h index a648278a..6167b1f7 100644 --- a/Server/Src/StaticData/StaticStruct.h +++ b/Server/Src/StaticData/StaticStruct.h @@ -213,6 +213,12 @@ struct StPartnerInfo }; +struct StMountInfo +{ + UINT32 dwMountID; //! ID + UINT32 dwActorID; +}; + struct StTaskInfo { UINT32 TaskID; //! 任务ID