BOOL CClientCmdHandler::OnCmdNearByUpdate( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { UINT32 dwCount = 0; pBufferHelper->Read(dwCount); for(UINT32 i = 0; i < dwCount; i++) { UINT64 u64CharID = 0; pBufferHelper->Read(u64CharID); CPlayerObject *pObject = m_PlayerObjMgr.GetPlayer(u64CharID); if(pObject != NULL) { pObject->ReadFromBuffer(pBufferHelper); //printf("更新角色:%d, 坐标x = %f, z = %f", (UINT32)pObject->GetObjectID(), pObject->m_ObjectPos.x, pObject->m_ObjectPos.z); } else { //ASSERT_FAIELD; } } return TRUE; }
BOOL CWorldCmdHandler::OnCmdLeaveGameReq( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { StCharLeaveGameReq CharLeaveGameReq; pBufferHelper->Read(CharLeaveGameReq); if(CharLeaveGameReq.dwLeaveReason == LGR_Disconnect) { } else if(CharLeaveGameReq.dwLeaveReason == LGR_Quit) { } CPlayerObject *pPlayerObject = m_PlayerObjectMgr.GetPlayer(pBufferHelper->GetCommandHeader()->u64CharID); if(pPlayerObject == NULL) { ASSERT_FAIELD; return TRUE; } m_PlayerObjectMgr.ReleasePlayer(pPlayerObject->GetObjectID()); return TRUE; }
BOOL CClientCmdHandler::OnCmdNearByAdd( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { UINT32 dwCount = 0; pBufferHelper->Read(dwCount); for(UINT32 i = 0; i < dwCount; i++) { UINT8 type = 0; pBufferHelper->Read(type); if(type != 1) { continue; } CPlayerObject *pObject = new CPlayerObject; pObject->ReadFromBuffer(pBufferHelper); m_PlayerObjMgr.AddPlayer(pObject); /*printf("添加角色:%d, 坐标x = %f, z = %f", (UINT32)pObject->GetObjectID(), pObject->m_ObjectPos.x, pObject->m_ObjectPos.z);*/ } printf("-------周围队列的人数:%d------OnCmdNearByAdd---\n", m_PlayerObjMgr.size()); return TRUE; }
BOOL CClientCmdHandler::OnCmdNearByUpdate( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { UINT32 dwCount = 0; pBufferHelper->Read(dwCount); for(UINT32 i = 0; i < dwCount; i++) { UINT64 u64CharID = 0; pBufferHelper->Read(u64CharID); CPlayerObject *pObject = m_PlayerObjMgr.GetPlayer(u64CharID); if(pObject != NULL) { pObject->ReadFromBuffer(pBufferHelper); printf("更新角色:%d, 坐标x = %f, z = %f\n", (UINT32)pObject->GetObjectID(), pObject->m_ObjectPos.x, pObject->m_ObjectPos.z); } else { ASSERT_FAIELD; } } ((CTestClientDlg*)AfxGetMainWnd())->m_SceneView.Invalidate(); return TRUE; }
BOOL CWorldCmdHandler::OnCmdDBLoadCharAck( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { StDBLoadCharInfoAck DBLoadCharInfoAck; pBufferHelper->Read(DBLoadCharInfoAck); CPlayerObject *pPlayerObject = m_PlayerObjectMgr.CreatePlayerByID(DBLoadCharInfoAck.u64CharID); if(pPlayerObject == NULL) { ASSERT_FAIELD; return TRUE; } pPlayerObject->LoadFromDBPcket(pBufferHelper); //继续往游戏服转移 return TRUE; }
BOOL CWorldCmdHandler::OnCmdDBLoadCharAck( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { StDBLoadCharInfoAck DBLoadCharInfoAck; pBufferHelper->Read(DBLoadCharInfoAck); CPlayerObject *pPlayerObject = m_PlayerObjectMgr.CreatePlayerByID(DBLoadCharInfoAck.u64CharID); CHECK_AND_RETURN_ASSERT(pPlayerObject, TRUE); if(!pPlayerObject->LoadFromDBPacket(pBufferHelper)) { ASSERT_FAIELD; return TRUE; } UINT32 dwGameSvrID = m_GameSvrMgr.GetServerIDBySceneID(pPlayerObject->m_dwSceneID); if(dwGameSvrID == 0) { ASSERT_FAIELD; return TRUE; } //继续往游戏服转移 StSvrEnterSceneReq SvrEnterSceneReq; SvrEnterSceneReq.dwGameSvrID = dwGameSvrID; SvrEnterSceneReq.dwProxySvrID = DBLoadCharInfoAck.dwProxySvrID; SvrEnterSceneReq.dwSceneID = pPlayerObject->m_dwSceneID; SvrEnterSceneReq.u64CharID = DBLoadCharInfoAck.u64CharID; CBufferHelper WriteHelper(TRUE, &m_WriteBuffer); WriteHelper.BeginWrite(CMD_SVR_ENTER_SCENE_REQ, CMDH_OTHER, SvrEnterSceneReq.dwSceneID, DBLoadCharInfoAck.u64CharID); WriteHelper.Write(SvrEnterSceneReq); pPlayerObject->SaveDataToPacket(&WriteHelper); WriteHelper.EndWrite(); CGameService::GetInstancePtr()->SendCmdToConnection(SvrEnterSceneReq.dwGameSvrID, &m_WriteBuffer); return TRUE; }
BOOL CClientCmdHandler::OnCmdNearByAdd( UINT16 wCommandID, UINT64 u64ConnID, CBufferHelper *pBufferHelper ) { UINT32 dwCount = 0; pBufferHelper->Read(dwCount); printf("BEGIN---添加角色消息,添加人数:%d\n", dwCount); for(UINT32 i = 0; i < dwCount; i++) { CString strText; UINT8 type = 0; pBufferHelper->Read(type); if(type != 1) { continue; } CPlayerObject *pObject = new CPlayerObject; pObject->ReadFromBuffer(pBufferHelper); m_PlayerObjMgr.insert(std::make_pair(pObject->GetObjectID(), pObject)); printf("添加角色:%d, 坐标x = %f, z = %f\n", (UINT32)pObject->GetObjectID(), pObject->m_ObjectPos.x, pObject->m_ObjectPos.z); } printf("END---添加角色消息\n"); ((CTestClientDlg*)AfxGetMainWnd())->m_SceneView.Invalidate(); return TRUE; }
void CFreezePowerUp::CollideWith(CBaseObject* pOther, Vector &pos) { if(pOther->getType() == SHIP && this->m_bIsGrabable) { std::vector<PhysicsData*>& players = CODEManager::Instance()->m_vPlayers; std::vector<PhysicsData*>::iterator it = players.begin(); for(it; it != players.end(); it++){ if((*it)->m_pOwner != pOther){ CPlayerObject* other = dynamic_cast<CPlayerObject*>((*it)->m_pOwner); if(other->m_fPUJellyTime > 0.001){ other->m_fPUJellyTime = 0; } else { other->AffectedByFreezePU(); } } } CSound *pSound = (CSound *)CResourceManager::Instance()->GetResource("media/sounds/freeze_object.wav", RT_SOUND); if ( pSound ) pSound->Play(); } CPowerUp::CollideWith(pOther, Vector(pos)); }