void RemoveAllPassengers() { int i; for (i = 0; i < GameStruct_Bus.DEF_BUS_MAX_PASSENGER_COUNT; i++) { if (m_anPassengerIDs[i] != MacroDefine.INVALID_ID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = 0; m_abPassengerAttacheds[i] = false; } } m_nPassengerCount = 0; }
public void DetachCharacterInterface(uint nObjID) { if (nObjID == 0) { return; } int nCount = GetPassengerCount(); if (nCount > 0) { int i; for (i = 0; i < nCount; i++) { if (m_anPassengerIDs[i] == nObjID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = 0; m_abPassengerAttacheds[nCount - 1] = false; return; } } } }
public override void SetPosition(Vector3 fvPosition) { base.SetPosition(fvPosition); // 如果自己在bus上面,则更新bus的时候需要更新摄像机 [9/2/2011 Ivan edit] // if( CObjectManager::GetMe()->GetMySelf()->IsInBus(GetServerID()) ) // { // if(CWorldManager::GetMe()->GetCameraAnimation() == INVALID_ID) // { // CGameProcedure::s_pGfxSystem->Camera_SetLookAt(fvPosition); // } // } int i; for (i = 0; i < m_nPassengerCount; i++) { if (m_anPassengerIDs[i] != 0) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null) { pObj.SetMapPosition(fvPosition.x, fvPosition.z); pObj.SetFootPosition(fvPosition); } } } }
bool RemovePassenger(uint nPassengerID) { if (nPassengerID == 0) { return(false); } int nCount = GetPassengerCount(); if (nCount > 0) { int i; for (i = 0; i < nCount; i++) { if (m_anPassengerIDs[i] == nPassengerID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = 0; m_abPassengerAttacheds[nCount - 1] = false; // 减少乘客 [8/26/2011 ivan edit] --m_nPassengerCount; return(true); } } } return(false); }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { //检查位置是否合法 //if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->GetCurPos()->m_fX, pPacket->GetCurPos()->m_fZ))) //{ // TDThrow("ERROR POSITION @ GCNewBusHandler"); //} GCNewBus busPacket = pPacket as GCNewBus; if (busPacket == null) { LogManager.LogError("GCNewBus 收包错误。"); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR); } //创建玩家 CObject pBus = CObjectManager.Instance.FindServerObject((int)busPacket.ObjID); Vector3 fvGame = new Vector3(busPacket.PosWorld.m_fX, 0, busPacket.PosWorld.m_fZ); if (pBus == null) { pBus = CObjectManager.Instance.NewBus((int)busPacket.ObjID); SObject_BusInit tBusInit = new SObject_BusInit(); tBusInit.m_fvPos = fvGame; tBusInit.m_fvRot = new Vector3(0.0f, busPacket.Dir, 0.0f); tBusInit.m_nDataID = busPacket.DataID; pBus.Initial(tBusInit); pBus.SetMapPosition(busPacket.PosWorld.m_fX, busPacket.PosWorld.m_fZ); } else { if (pBus.isVisible()) { if (Math.Abs(pBus.GetPosition().x - fvGame.x) + Math.Abs(pBus.GetPosition().z - fvGame.z) > ObjectDef.DEF_CHARACTER_POS_ADJUST_DIST) { pBus.SetMapPosition(fvGame.x, fvGame.z); } } else { pBus.SetMapPosition(fvGame.x, fvGame.z); pBus.SetFaceDir(busPacket.Dir); //pBus->setVisible(true); } } SCommand_Object cmdTemp = new SCommand_Object(); cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_BUS_ADD_PASSENGER; int i; for (i = 0; i < busPacket.PassengerCount; i++) { cmdTemp.SetValue(0, i); cmdTemp.SetValue(1, busPacket.PassengerIDs[i]); pBus.PushCommand(cmdTemp); } //放入Ask队列 GameProcedure.s_pObjectManager.LoadQueue.TryAddLoadTask(pBus.ID); } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }