uint WGTeamLeaderAskInviteHandler::Execute( WGTeamLeaderAskInvite* pPacket, Player* pPlayer ) { __ENTER_FUNCTION PlayerID_t PlayerID = pPacket->GetPlayerID() ; GamePlayer* pGamePlayer = g_pPlayerPool->GetPlayer(PlayerID) ; if( pGamePlayer==NULL ) { Assert(FALSE) ; return PACKET_EXE_CONTINUE ; } Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) return PACKET_EXE_CONTINUE ; if( pPlayer->IsServerPlayer() ) {//服务器收到世界服务器发来的数据 Assert( MyGetCurrentThreadID()==g_pServerManager->m_ThreadID ) ; pScene->SendPacket( pPacket, PlayerID ) ; g_pLog->FastSaveLog( LOG_FILE_1, "WGTeamAskInviteHandler: ServerPlayer sGUID=%X, dGUID=%X ", pPacket->GetSourGUID(), pPacket->GetDestGUID() ) ; return PACKET_EXE_NOTREMOVE ; } else if( pPlayer->IsGamePlayer() ) {//场景收到Cache里的消息 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; GCTeamLeaderAskInvite tMsg ; tMsg.SetSourGUID( pPacket->GetSourGUID() ); tMsg.SetDestGUID( pPacket->GetDestGUID() ); tMsg.SetSourName( pPacket->GetSourName() ); tMsg.SetDestName( pPacket->GetDestName() ); pGamePlayer->SendPacket( &tMsg ) ; g_pLog->FastSaveLog( LOG_FILE_1, "WGTeamLeaderAskInviteHandler: GamePlayer sGUID=%X,dGUID=%X ", pPacket->GetSourGUID(),pPacket->GetDestGUID() ) ; } else { Assert(FALSE) ; } return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint WGNotifyMailHandler::Execute( WGNotifyMail* pPacket, Player* pPlayer ) { __ENTER_FUNCTION PlayerID_t PlayerID = pPacket->GetPlayerID() ; GamePlayer* pGamePlayer = g_pPlayerPool->GetPlayer(PlayerID) ; if( pGamePlayer==NULL ) { Assert(FALSE) ; return PACKET_EXE_CONTINUE ; } Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) return PACKET_EXE_CONTINUE ; if( pPlayer->IsServerPlayer() ) {//服务器收到世界服务器发来的数据 Assert( MyGetCurrentThreadID()==g_pServerManager->m_ThreadID ) ; pScene->SendPacket( pPacket, PlayerID ) ; g_pLog->FastSaveLog( LOG_FILE_1, "WGNotifyMailHandler: ServerPlayer MailCount=%d", pPacket->GetMailCount() ) ; return PACKET_EXE_NOTREMOVE ; } else if( pPlayer->IsGamePlayer() ) {//场景收到Cache里的消息 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; GCNotifyMail Msg ; Msg.SetMailCount( pPacket->GetMailCount() ) ; pGamePlayer->SendPacket( &Msg ) ; g_pLog->FastSaveLog( LOG_FILE_1, "WGNotifyMailHandler: GamePlayer MailCount=%d", pPacket->GetMailCount() ) ; } else { Assert(FALSE) ; } return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGCharMoodStateHandler::Execute( CGCharMoodState* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer != NULL ) ; if ( pGamePlayer == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharMoodStateHandler: Error (pGamePlayer == NULL) " ) ; return PACKET_EXE_CONTINUE ; } Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman != NULL ) ; if ( pHuman == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharMoodStateHandler: Error (pHuman == NULL) " ) ; return PACKET_EXE_CONTINUE ; } Scene* pScene = pHuman->getScene() ; Assert( pScene != NULL ) ; if ( pScene == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharMoodStateHandler: Error Obj = %d (pScene == NULL) ", pHuman->GetID() ) ; return PACKET_EXE_CONTINUE ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; if ( MyGetCurrentThreadID() != pScene->m_ThreadID ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharMoodStateHandler: Error Obj = %d (MyGetCurrentThreadID() != pScene->m_ThreadID) ", pHuman->GetID() ) ; return PACKET_EXE_CONTINUE ; } ORESULT oResult = pHuman->GetHumanAI()->PushCommand_MoodState(pPacket->getMoodState()); if ( OR_FAILED( oResult ) ) { pHuman->SendOperateResultMsg(oResult); } g_pLog->FastSaveLog( LOG_FILE_1, "CGCharMoodStateHandler: ok obj=%d guid=%X scene=%d", pHuman->GetID(), pHuman->GetGUID(), pScene->SceneID() ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGCharStopLogicHandler::Execute( CGCharStopLogic* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer != NULL ) ; if ( pGamePlayer == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharStopLogicHandler: Error (pGamePlayer == NULL) " ) ; return PACKET_EXE_CONTINUE ; } Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman != NULL ) ; if ( pHuman == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharStopLogicHandler: Error (pHuman == NULL) " ) ; return PACKET_EXE_CONTINUE ; } Scene* pScene = pHuman->getScene() ; Assert( pScene != NULL ) ; if ( pScene == NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharStopLogicHandler: Error Obj = %d (pScene == NULL) ", pHuman->GetID() ) ; return PACKET_EXE_CONTINUE ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; if ( MyGetCurrentThreadID() != pScene->m_ThreadID ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharStopLogicHandler: Error Obj = %d (MyGetCurrentThreadID() != pScene->m_ThreadID) ", pHuman->GetID() ) ; return PACKET_EXE_CONTINUE ; } //中断当前技能逻辑 AI_Human* pAI = pHuman->GetHumanAI(); if(NULL!=pAI) { pAI->ForceInterruptSkill(); } g_pLog->FastSaveLog( LOG_FILE_1, "CGCharStopLogicHandler: S:%d.", pPacket->getObjID()) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGTopListHandler::Execute(CGTopList* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer; Assert( pGamePlayer ); Obj_Human* pHuman = pGamePlayer->GetHuman(); Assert( pHuman ); Scene* pScene = pHuman->getScene(); if( pScene==NULL ) { Assert(FALSE); return PACKET_EXE_ERROR; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ); GWTopList* pMsg = (GWTopList*)g_pPacketFactoryManager->CreatePacket(PACKET_GW_TOP_LIST); pMsg->SetGUID(pHuman->GetGUID()); pMsg->SetType(pPacket->GetType()); g_pServerManager->SendPacket( pMsg, INVALID_ID ); g_pLog->FastSaveLog( LOG_FILE_1, "CGTopListHandler: GUID=%X", pHuman->GetGUID() ); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
uint CGLeaveSceneHandler::Execute( CGLeaveScene* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) return PACKET_EXE_CONTINUE ; //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; g_pLog->FastSaveLog( LOG_FILE_1, "CGLeaveSceneHandler: " ) ; return PACKET_EXE_ERROR ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT LBAskRegAuthHandler::Execute(LBAskRegAuth* pPacket, Player* pPlayer ) { __ENTER_FUNCTION TID CurrentThreadID = MyGetCurrentThreadID(); if(CurrentThreadID == g_pServerManager->m_ThreadID) { Assert(pPacket); BillingPlayer* pBillPlayer= (BillingPlayer*)pPlayer; Assert(pBillPlayer); LBRegPassPort Msg; Msg.SetAccount(pPacket->GetAccount()); Msg.SetSuperPassWord(pPacket->GetSuperPassWord()); Msg.SetPassWord(pPacket->GetPassWord()); Msg.SetPacketIndex(pPacket->GetPlayerID()); Msg.SetIPAddr(pPacket->GetIP()); Msg.SetEmail(pPacket->GetEmail()); pBillPlayer->SendPacket(&Msg); } else { AssertEx(FALSE,"LBAskRegAuthHandler 线程资源执行错误!"); } g_pLog->FastSaveLog(LOG_FILE_0,"LBAskRegAuthHandler::Execute() Acc=%s IP=%s....OK", pPacket->GetAccount(),pPacket->GetIP() ); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
uint CGAskDetailXinFaListHandler::Execute( CGAskDetailXinFaList* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; ObjID_t ObjID = pHuman->GetID(); if( ObjID == INVALID_ID ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } Obj_Character *pTarget = (Obj_Character*)(pScene->GetObjManager()->GetObj(pPacket->getTargetID())); if( pTarget==NULL ) { Assert( pTarget ) ; return PACKET_EXE_ERROR ; } // 权限判断 // to be continue... if ( pTarget->GetObjType() != Obj::OBJ_TYPE_HUMAN && pTarget->GetObjType() != Obj::OBJ_TYPE_PET ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGAskDetailXinFaListHandler: faile obj=%d scene=%d", ObjID, pScene->SceneID() ) ; return PACKET_EXE_CONTINUE; } GCDetailXinFaList Msg; Msg.setObjID( pTarget->GetID() ); Msg.setXinFaList(pHuman->Skill_GetXinFaList().m_Count, pHuman->Skill_GetXinFaList().m_aXinFa); pGamePlayer->SendPacket( &Msg ) ; g_pLog->FastSaveLog( LOG_FILE_1, "CGAskDetailXinFaListHandler: ok obj=%d scene=%d", ObjID, pScene->SceneID() ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT SSScenePlayerCountHandler::Execute(SSScenePlayerCount* pPacket, Player* pPlayer ) { __ENTER_FUNCTION TID CurrentThreadID = MyGetCurrentThreadID(); if(CurrentThreadID == g_pServerManager->m_ThreadID) { //修改g_WorldPlayerCounter 中数据 Assert(pPacket); g_WorldPlayerCounter.m_WorldPlayerCount = pPacket->GetTotalPlayerCount(); //修改场景负载数据 //todo.. } else { AssertEx(FALSE,"SSScenePlayerCountHandler 线程资源执行错误!"); } Log::SaveLog(LOGIN_LOGFILE,"SSScenePlayerCountHandler::Execute()....OK,WorldPlayerCount = %d", g_WorldPlayerCounter.m_WorldPlayerCount); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
UINT WGWorldTimeHandler::Execute(WGWorldTime* pPacket,Player* pPlayer) { __ENTER_FUNCTION Assert( MyGetCurrentThreadID()==g_pServerManager->m_ThreadID ); Assert(pPacket); g_WorldTime = pPacket->GetWorldTime(); for( INT i=0; i<MAX_SCENE; i++ ) { Scene* pScene = g_pSceneManager->GetScene( (SceneID_t)i ) ; if( pScene==NULL ) continue ; if( pScene->GetPlayerManager()->GetCount()<=0 ) continue ; GCWorldTime* pMsg = (GCWorldTime*)(g_pPacketFactoryManager->CreatePacket(PACKET_GC_WORLDTIME)) ; pMsg->SetWorldTime(g_WorldTime); pMsg->SetSceneID(pScene->SceneID()); pScene->SendPacket(pMsg,INVALID_ID); } g_pLog->FastSaveLog( LOG_FILE_1,"WGWorldTimeHandler::Execute()....OK!"); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGPlayerShopPartnerHandler::Execute( CGPlayerShopPartner* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; g_pLog->FastSaveLog( LOG_FILE_1, "CGPlayerShopPartnerHandler::ObjName=%s" ,pHuman->GetName()); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT LWChangeNameHandler::Execute(LWChangeName* pPacket, Player* pPlayer ) { __ENTER_FUNCTION TID CurrentThreadID = MyGetCurrentThreadID(); if(CurrentThreadID == g_pServerManager->m_ThreadID) { Assert(pPacket); ServerPlayer* pServerPlayer = (ServerPlayer*)pPlayer; Assert(pServerPlayer); pServerPlayer->SendPacket(pPacket); } else { AssertEx(FALSE,"LWChangeNameHandler 线程资源执行错误!"); } g_pLog->FastSaveLog(LOG_FILE_0,"LWChangeNameHandler::Execute() ....OK"); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
BOOL ServerManager::Init( ) { __ENTER_FUNCTION m_pServerSocket = new ServerSocket( g_Config.m_BillingInfo.m_Port ) ; Assert( m_pServerSocket ) ; m_pServerSocket->setNonBlocking() ; m_SocketID = m_pServerSocket->getSOCKET() ; Assert( m_SocketID != INVALID_SOCKET ) ; FD_SET(m_SocketID , &m_ReadFDs[SELECT_BAK]); FD_SET(m_SocketID , &m_ExceptFDs[SELECT_BAK]); m_MinFD = m_MaxFD = m_SocketID; m_Timeout[SELECT_BAK].tv_sec = 0; m_Timeout[SELECT_BAK].tv_usec = 0; m_ThreadID = MyGetCurrentThreadID( ) ; for( int i=0; i<OVER_MAX_SERVER; i++ ) { m_aServerHash[i] = INVALID_ID ; } __LEAVE_FUNCTION return TRUE ; }
UINT CGCountryAppointHandler::Execute( CGCountryAppoint* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ); CGCountryAppoint *pMsg = (CGCountryAppoint *)g_pPacketFactoryManager->CreatePacket(PACKET_GW_COUNTRY_APPOINT); pMsg->SetCountryAppointData(pPacket->GetCountryAppointData()); g_pServerManager->SendPacket( pMsg, INVALID_ID ); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGExchangeSynchMoneyIIHandler::Execute( CGExchangeSynchMoneyII* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; //验证 EXCHANGE_CERTIFY_EACH_OTHER(pHuman) EXCHANGE_CERTIFY_ISLOCK(pHuman) ObjID_t DestID = pHuman->m_ExchangBox.m_ObjID; Obj_Human* pDestHuman = pScene->GetHumanManager()->GetHuman( DestID ); EXCHANGE_CERTIFY_STATUS(pHuman, EXCHANGE_SYNCH_DATA) EXCHANGE_CERTIFY_STATUS(pDestHuman, EXCHANGE_SYNCH_DATA) //操作 UINT Money = pPacket->GetMoney(); if( Money<= pHuman->GetMoney() ) { pHuman->m_ExchangBox.m_Money = Money; g_pLog->FastSaveLog( LOG_FILE_1, "<交易> [%s] 设置交易金钱 [%d]", pHuman->GetName(), Money ) ; //金钱改变不发给自己了,省条消息 GCExchangeSynchII MsgToTarget; MsgToTarget.SetIsMyself(FALSE); MsgToTarget.SetOpt(EXCHANGE_MSG::OPT_MONEY); MsgToTarget.SetMoney(Money); pDestHuman->GetPlayer()->SendPacket(&MsgToTarget); return PACKET_EXE_CONTINUE; } else { GCExchangeError Msg; Msg.SetID(EXCHANGE_MSG::ERR_ILLEGAL); pHuman->GetPlayer()->SendPacket(&Msg); pHuman->m_ExchangBox.CleanUp(); return PACKET_EXE_CONTINUE; } __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT LBAskAuthHandler::Execute(LBAskAuth* pPacket, Player* pPlayer ) { __ENTER_FUNCTION TID CurrentThreadID = MyGetCurrentThreadID(); if(CurrentThreadID == g_pServerManager->m_ThreadID) { Assert(pPacket); ServerPlayer* pServerPlayer = (ServerPlayer*)pPlayer; Assert(pServerPlayer); pServerPlayer->SendPacket(pPacket); } else { AssertEx(FALSE,"LBAskAuthHandler 线程资源执行错误!"); } Log::SaveLog(LOGIN_LOGFILE,"LBAskAuthHandler::Execute() ....OK"); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
uint CGQueryHorseFindMateInfoHandler::Execute(CGQueryHorseFindMateInfo* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer; Assert( pGamePlayer ); Obj_Human* pHuman = pGamePlayer->GetHuman(); Assert( pHuman ); Scene* pScene = pHuman->getScene(); if( pScene==NULL ) { Assert(FALSE); return PACKET_EXE_ERROR; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ); HorseFindMateModule::GetInstance().QueryHorseFindMateInfo(pHuman, pPacket->GetMaxPostion()); g_pLog->FastSaveLog(LOG_FILE_1, "CGQueryHorseFindMateInfoHandler: ok obj=%d,scene=%d", pHuman->GetID(), pScene->SceneID()); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
uint WGCountryVoteConfirmHandler::Execute( WGCountryVoteConfirm* pPacket, Player* pPlayer ) { __ENTER_FUNCTION PlayerID_t PlayerID = pPacket->GetPlayerID(); GamePlayer* pGamePlayer = g_pPlayerPool->GetPlayer(PlayerID); if( pGamePlayer==NULL ) { Assert(FALSE); return PACKET_EXE_CONTINUE; } Obj_Human* pHuman = pGamePlayer->GetHuman(); Assert( pHuman ); Scene* pScene = pHuman->getScene(); if( pScene==NULL ) return PACKET_EXE_CONTINUE ; if( pPlayer->IsServerPlayer() ) { //服务器收到世界服务器发来的数据 Assert( MyGetCurrentThreadID()==g_pServerManager->m_ThreadID ); pScene->SendPacket( pPacket, PlayerID ); return PACKET_EXE_NOTREMOVE; } else if( pPlayer->IsGamePlayer() ) { //场景收到Cache里的消息 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ); GCCountryVoteShow Msg; Msg.SetCurVotes(pPacket->GetCurNum()); Msg.SetLeftTime(pPacket->GetTime()); Msg.SetPercentVote( ((float)pPacket->GetPercent())/(100.0f)); pGamePlayer->SendPacket( &Msg ); g_pLog->FastSaveLog( LOG_FILE_1, "WGCountryVoteConfirmHandler: VoteOn Begin (Guid=%X)!", pHuman->GetGUID()); } else { Assert(FALSE); } return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
UINT CGAskDetailAbilityInfoHandler::Execute( CGAskDetailAbilityInfo* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer; Assert( pGamePlayer ); Obj_Human* pHuman = pGamePlayer->GetHuman(); Assert( pHuman ); Scene* pScene = pHuman->getScene(); if( pScene==NULL ) { Assert(FALSE); return PACKET_EXE_ERROR; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ); ObjID_t ObjID = pHuman->GetID(); if( ObjID == INVALID_ID ) { Assert(FALSE); return PACKET_EXE_ERROR; } Obj_Human *pTarget = (Obj_Human*)(pScene->GetObjManager()->GetObj(pPacket->getTargetID())); if( pTarget==NULL ) { Assert( pTarget ); return PACKET_EXE_ERROR; } // 权限判断 // to be continue... if ( pTarget->GetObjType() != Obj::OBJ_TYPE_HUMAN ) { return PACKET_EXE_ERROR; } GCDetailAbilityInfo Msg; Msg.setObjID( pTarget->GetID() ); const _ABILITY_LIST *pAbilityList = pTarget->GetAbilityList(); Msg.setAbilityList( g_pAbilityManager->MaxAbilityNum(), pAbilityList->m_aABility, pAbilityList->m_aPrescr ); pGamePlayer->SendPacket( &Msg ); g_pLog->FastSaveLog( LOG_FILE_1, "CGAskDetailAbilityInfoHandler: ok obj=%d scene=%d", ObjID, pScene->SceneID() ); return PACKET_EXE_CONTINUE; __LEAVE_FUNCTION return PACKET_EXE_ERROR; }
uint CGAskJoinMenpaiHandler::Execute( CGAskJoinMenpai* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; //设置门派 //pHuman->GetDB()->SetMenPai(pPacket->GetMenpaiID()); //设置心法 //设置技能 //通知客户端加入的结果,由客户端自己去用模板内的数据改变自己的值 //GCJoinMenpai Msg; //Msg.SetIsSucceedJoin(JOINMENPAI_SUCCEED); //pPlayer = pHuman->GetPlayer(); //pPlayer->SendPacket( &Msg ) ; //INT nTemp = pPacket->GetMenpaiID(); //INT nNum = g_XinFaDataMgr.m_nSize; //_XINFA_LIST listMenpaiXinfa; //for(INT i=0,k=0; i<nNum; i++) //{ // if( g_XinFaDataMgr.m_vTemplateList[i].MenPai == nTemp) // listMenpaiXinfa.m_aXinFa //} return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGLockTargetHandler::Execute( CGLockTarget* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; if(NULL==pHuman) { AssertEx(FALSE,"[CGLockTargetHandler::Execute]: NULL Obj_Human pointer found!!"); return PACKET_EXE_ERROR ; } Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; ObjID_t nMeID = pHuman->GetID(); if( nMeID == INVALID_ID ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //update target if(NULL==pPacket) { AssertEx(FALSE,"[CGLockTargetHandler::Execute]: NULL packet pointer found!!"); return PACKET_EXE_ERROR ; } pHuman->SetLockedTarget(pPacket->getTargetID()); // 当锁定的目标是NPC时将会触发NPC的泡泡说话 Obj* pTarget = pScene->GetObjManager()->GetObj(pPacket->getTargetID()); if (pTarget->GetObjType() == Obj::OBJ_TYPE_MONSTER) { ((Obj_Monster*)pTarget)->ProcessPaoPao(); } g_pLog->FastSaveLog( LOG_FILE_1, "CGLockTargetHandler: ok obj=%d scene=%d", nMeID, pScene->SceneID() ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGCharAskBaseAttribHandler::Execute( CGCharAskBaseAttrib* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; ObjID_t ObjID = pPacket->getTargetID() ; if( ObjID == INVALID_ID ) { return PACKET_EXE_ERROR ; } Obj* pObj = pScene->GetObjManager()->GetObj( ObjID ) ; if( pObj==NULL ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharAskBaseAttribHandler: not find obj=%d", ObjID ) ; return PACKET_EXE_CONTINUE ; } if( !IsCharacterObj( pObj->GetObjType() ) ) { g_pLog->FastSaveLog( LOG_FILE_1, "CGCharAskBaseAttribHandler: not character obj=%d", ObjID ) ; return PACKET_EXE_CONTINUE ; } Obj_Character* pCharacter = (Obj_Character*)pObj ; pCharacter->AskMsg_BaseAttrib( pHuman ); //影响效率关掉Log //g_pLog->FastSaveLog( LOG_FILE_1, "CGCharAskBaseAttribHandler: obj=%d", ObjID ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGIssuePetPlacardHandler::Execute( CGIssuePetPlacard* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; Obj_Monster *pNpc = (Obj_Monster*)(pScene->GetObjManager()->GetObj(pPacket->GetNpcID())); if(pNpc != NULL) { PetPlacardSystem *pPetPlacardSystem = pNpc->GetPetPlacardSystem(); if(pPetPlacardSystem == NULL) { pNpc->CreatePetPlacardSystem(); pPetPlacardSystem = pNpc->GetPetPlacardSystem(); } if(pPetPlacardSystem != NULL) { CHAR* pMessage = pPacket->GetMessage(); BYTE nMessageSize = (BYTE)strlen( pMessage ); if( nMessageSize >= PET_PLACARD_ITEM_MESSAGE_SIZE ) nMessageSize = PET_PLACARD_ITEM_MESSAGE_SIZE-1; pMessage[PET_PLACARD_ITEM_MESSAGE_SIZE-1] = 0; ReplaceIllegalString( pMessage, nMessageSize ); ORESULT oResult = pPetPlacardSystem->IssuePlacard(pHuman, pPacket->GetGUID(), pMessage); if(OR_FAILED(oResult)) { pHuman->SendOperateResultMsg(oResult); } } } return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGPlayerShopApplyHandler::Execute( CGPlayerShopApply* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; pScene->GetPlayerShopManager()->ClampComFactor(); FLOAT CommercialFactor = pScene->GetPlayerShopManager()->GetComFactor(); UINT Cost = (UINT)(300000*CommercialFactor*2*1.03); Cost = 10; GCPlayerShopError MsgError; //验证是否有资格摆摊 //if(pHuman->GetLevel()<30) //{ // MsgError.SetID(PLAYERSHOP_MSG::ERR_NOT_ENOUGH_LEVEL); // pGamePlayer->SendPacket(&MsgError); // g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGPlayerShopApplyHandler::Name=%s Level = %d ", pHuman->GetName(), pHuman->GetLevel()) ; // return PACKET_EXE_CONTINUE ; //} GCPlayerShopApply Msg; Msg.SetComFactor(CommercialFactor); Msg.SetCost(Cost); Msg.SetType(PLAYERSHOP_MSG::TYPE_ITEM); //验证完毕,通知客户端确定 pGamePlayer->SendPacket(&Msg); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGSetTeamDistribModeHandler::Execute( CGSetTeamDistribMode* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; BYTE nMode = pPacket->getMode(); if (nMode>=ITEM_DISTRIB_NUM) { return PACKET_EXE_ERROR; } TeamInfo* pTeamInfo = pHuman->GetTeamInfo(); if (pTeamInfo == NULL) { return PACKET_EXE_ERROR; } if (!pTeamInfo->IsLeader()) { return PACKET_EXE_CONTINUE; } GWSetTeamDistribMode* pMsg = (GWSetTeamDistribMode*)g_pPacketFactoryManager->CreatePacket(PACKET_GW_SETTEAMDISTRIBMODE); pMsg->setMode(nMode); pMsg->setLeaderID(pHuman->GetGUID()); pMsg->setTeamID(pTeamInfo->GetTeamID()); g_pServerManager->SendPacket( pMsg, INVALID_ID ) ; g_pLog->FastSaveLog( LOG_FILE_1, "CGSetTeamDistribModeHandler: nMode=%d success", nMode) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGPlayerShopAcquireShopListHandler::Execute( CGPlayerShopAcquireShopList* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; SHOP_INFO_t aShopList[MAX_SHOP_NUM_PER_SCENE]; UINT ListIndex = 0; PlayerShopManager* pPlayerShopManager = pScene->GetPlayerShopManager(); UINT uShopNum = pPlayerShopManager->GetPlayerShopNum(); for(UINT i = 0; i<uShopNum; i++) { PlayerShop* pPlayerShop = pPlayerShopManager->GetPlayerShopByIndex(i); Assert(pPlayerShop); aShopList[ListIndex].m_ID = pPlayerShop->GetShopGUID(); memcpy(aShopList[ListIndex].m_ShopName, pPlayerShop->GetShopName(), MAX_SHOP_NAME_SIZE); aShopList[ListIndex].m_StallNumOnSale = pPlayerShop->GetNumStallOnSale(); aShopList[ListIndex].m_StallNumOpened = pPlayerShop->GetNumStallOpened(); aShopList[ListIndex++].m_Type = (BYTE)pPlayerShop->GetShopType(); } GCPlayerShopAcquireShopList Msg; Msg.SetShopNum(ListIndex); Msg.SetShopList(aShopList); pGamePlayer->SendPacket(&Msg); g_pLog->FastSaveLog( LOG_FILE_1, "CGPlayerShopAcquireShopList::Name=%s" ,pHuman->GetName()) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT WGTopListHandler::Execute(WGTopList* pPacket,Player* pPlayer) { __ENTER_FUNCTION GamePlayer* pGamePlayer = NULL ; PlayerID_t PlayerID = pPacket->GetPlayerID(); if( pPlayer->IsServerPlayer() ) { pGamePlayer = g_pPlayerPool->GetPlayer(PlayerID); if( pGamePlayer==NULL ) { Assert(FALSE); return PACKET_EXE_CONTINUE; } } else if( pPlayer->IsGamePlayer() ) { PlayerID = pPlayer->PlayerID() ; pGamePlayer = (GamePlayer*)pPlayer ; } else { Assert(FALSE) ; return PACKET_EXE_CONTINUE ; } Obj_Human* pHuman = pGamePlayer->GetHuman(); Assert( pHuman ); Scene* pScene = pHuman->getScene(); if( pScene==NULL ) return PACKET_EXE_CONTINUE ; Assert( MyGetCurrentThreadID()==g_pServerManager->m_ThreadID ); Assert(pPacket); GCTopList Msg ; WORLD_TOP_LIST* pTop = Msg.GetTopList(); memcpy(pTop,pPacket->GetTopList(),sizeof(WORLD_TOP_LIST)); pGamePlayer->SendPacket(&Msg); g_pLog->FastSaveLog( LOG_FILE_1,"WGTopListHandler::Execute()....OK!"); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
UINT CGApplyPrivateInfoHandler::Execute( CGApplyPrivateInfo* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; //只能提交自己的数据,所以不需要在消息中加ObjID //_PRIVATE_INFO_DB_LOAD PrivateData; //PrivateData.m_Age = pPacket->GetAge(); //PrivateData.m_BloodType = pPacket->GetBloodType(); //PrivateData.m_CharGUID = pPacket->GetCharGUID(); //PrivateData.m_Consella = pPacket->GetConsella(); //PrivateData.m_InfoType = pPacket->GetInfoType(); //PrivateData.m_Province = pPacket->GetProvince(); //PrivateData.m_Sex = pPacket->GetSex(); //PrivateData.m_YearAnimal = pPacket->GetYearAnimal(); //strncpy(PrivateData.m_City, pPacket->GetCity(), pPacket->GetCityLength()); //strncpy(PrivateData.m_EmailInfo, pPacket->GetEmailInfo(), pPacket->GetEmailInfoLength()); //strncpy(PrivateData.m_JobInfo, pPacket->GetJobInfo(), pPacket->GetJobInfoLength()); //strncpy(PrivateData.m_LuckWord, pPacket->GetLuckWord(), pPacket->GetLuckWordLength()); //strncpy(PrivateData.m_SchoolInfo, pPacket->GetSchoolInfo(), pPacket->GetSchoolInfoLength()); //pHuman->GetDB()->SetPrivateInfo(&PrivateData); g_pLog->FastSaveLog( LOG_FILE_1, "CGApplyPrivateInfoHandler::ObjName=%s" ,pHuman->GetName()); return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGStallCloseHandler::Execute( CGStallClose* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; //验证是否有资格摆摊 if(pHuman->m_StallBox.GetStallStatus() != ServerStallBox::STALL_OPEN) {//丢弃 g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGStallCloseHandler::ObjID=%d, != ServerStallBox::STALL_OPEN" ,pHuman->GetID()) ; return PACKET_EXE_CONTINUE ; } pHuman->m_StallBox.GetBBS()->SaveTitle(); //验证完毕,设置摊位盒 pHuman->m_StallBox.CleanUp(); ORESULT oResult = pHuman->GetHumanAI()->PushCommand_Idle( ); if ( OR_FAILED( oResult ) ) { pHuman->SendOperateResultMsg(oResult); } GCStallClose MsgClose; pGamePlayer->SendPacket(&MsgClose); g_pLog->FastSaveLog( LOG_FILE_1, "CGStallCloseHandler::ObjID=%d" ,pHuman->GetID()) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }
uint CGAskTeamInfoHandler::Execute( CGAskTeamInfo* pPacket, Player* pPlayer ) { __ENTER_FUNCTION GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ; Assert( pGamePlayer ) ; Obj_Human* pHuman = pGamePlayer->GetHuman() ; Assert( pHuman ) ; Scene* pScene = pHuman->getScene() ; if( pScene==NULL ) { Assert(FALSE) ; return PACKET_EXE_ERROR ; } //检查线程执行资源是否正确 Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ; if( pHuman->GetID() != pPacket->GetObjID() ) { // 为以后留接口 Assert(FALSE); return PACKET_EXE_ERROR; } Obj_Human *pDestHuman = pScene->GetHumanManager()->GetHuman( pPacket->GetObjID() ); if( pDestHuman == NULL ) { Assert(FALSE); return PACKET_EXE_CONTINUE; } GWAskTeamInfo* pMsg = (GWAskTeamInfo*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_ASKTEAMINFO)); pMsg->SetPlayerID( pGamePlayer->PlayerID() ); pMsg->SetGUID( pDestHuman->GetGUID() ); g_pServerManager->SendPacket( pMsg, INVALID_ID ); g_pLog->FastSaveLog( LOG_FILE_1, "CGAskTeamInfoHandler: AskManObjID=%X TargetManGUID=%X", pGamePlayer->PlayerID(), pDestHuman->GetGUID() ) ; return PACKET_EXE_CONTINUE ; __LEAVE_FUNCTION return PACKET_EXE_ERROR ; }