Ejemplo n.º 1
0
    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;
    }
Ejemplo n.º 2
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;
                }
            }
        }
    }
Ejemplo n.º 3
0
    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);
                }
            }
        }
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
        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);
        }