示例#1
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain)
            {
                LogManager.Log("RECV GCNewMonster");
            }
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                GCNewPlayer    newPlayerPacket = (GCNewPlayer)pPacket;
                CObjectManager pObjectManager  = GameProcedure.s_pObjectManager;
//              //检查位置是否合法
//              if(!CWorldManager::GetMe().GetActiveScene().IsValidPosition(fVector2(newPlayerPacket.getWorldPos().m_fX, newPlayerPacket.getWorldPos().m_fZ)))
//              {
//                  TDThrow("ERROR POSITION @ GCNewMonsterHandler");
//              }

                //创建玩家
                CObject_PlayerNPC pOther = (CObject_PlayerNPC )pObjectManager.FindServerObject((int)newPlayerPacket.ObjectID);

                if (pOther == null)
                {
                    pOther = pObjectManager.NewPlayerOther((int)newPlayerPacket.ObjectID);
                    pOther.Initial(null);
                }
                else
                {
                    // pOther.Enable( OSF_VISIABLE );
                    // pOther.Disalbe( OSF_OUT_VISUAL_FIELD );
                }
                //设置怪物位置和面向
                pOther.SetMapPosition(newPlayerPacket.Position.m_fX, newPlayerPacket.Position.m_fZ);

                pOther.SetFaceDir(newPlayerPacket.Dir);

                //更新装备信息
                pOther.GetCharacterData().Set_EquipVer(newPlayerPacket.EquipVer);
                pOther.GetCharacterData().Set_MoveSpeed(newPlayerPacket.MoveSpeed);

//              SGWEB.SCommand_Object cmdTemp;
//              cmdTemp.m_wID			= (SGWEB.AICommandDef)ObjectCommandDef.OC_IDLE;
//              cmdTemp.m_afParam[0]	= newPlayerPacket.Position.m_fX;
//              cmdTemp.m_afParam[1]	= newPlayerPacket.Position.m_fZ;
//              cmdTemp.m_abParam[2]	= false;
                // pOther.PushCommand(cmdTemp );

                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pOther.ID);
                //pObjectManager.GetLoadQueue().TryAddLoadTask(pOther.GetID(), CObject_Character::CT_MONSTER);

                //此版不做服务器繁忙客户端延后发消息的处理
//              CGCharAskBaseAttrib msgAskBaseAttrib = new CGCharAskBaseAttrib();
//              msgAskBaseAttrib.setTargetID( (uint)newPlayerPacket.ObjectID);
//              GameProcedure.s_NetManager.SendPacket(msgAskBaseAttrib );

//              char szTemp[MAX_PATH];
//              _snprintf(szTemp, MAX_PATH, "GCNewMonster(%.1f,%.1f)",
//                  newPlayerPacket.getWorldPos().m_fX, newPlayerPacket.getWorldPos().m_fZ);
//              pOther.PushDebugString(szTemp);
                pOther.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#2
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            LogManager.Log("RECV GCNewPlayer_Move");
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager   pObjectManager     = CObjectManager.Instance;
                GCNewPlayer_Move newPlayerMovPacket = (GCNewPlayer_Move)pPacket;

//              //检查位置是否合法
//              if(!CWorldManager::GetMe().GetActiveScene().IsValidPosition(fVector2(pPacket.getWorldPos().m_fX, pPacket.getWorldPos().m_fZ)))
//              {
//                  TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler");
//              }
//              if(!CWorldManager::GetMe().GetActiveScene().IsValidPosition(fVector2(pPacket.getTargetPos().m_fX, pPacket.getTargetPos().m_fZ)))
//              {
//                  TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler target");
//              }

                //创建玩家
                CObject_PlayerNPC pOther = (CObject_PlayerNPC)pObjectManager.FindServerObject((int)newPlayerMovPacket.ObjID);

                if (pOther == null)
                {
                    pOther = pObjectManager.NewPlayerOther((int)newPlayerMovPacket.ObjID);
                    pOther.Initial(null);
                }
                else
                {
                    //pOther.Enable( OSF_VISIABLE );
                    // pOther.Disalbe( OSF_OUT_VISUAL_FIELD );
                }
                //设置x z坐标
                pOther.SetMapPosition(newPlayerMovPacket.PosWorld.m_fX, newPlayerMovPacket.PosWorld.m_fZ);

                pOther.GetCharacterData().Set_EquipVer(newPlayerMovPacket.EquipVer);
                pOther.GetCharacterData().Set_MoveSpeed(newPlayerMovPacket.MoveSpeed);

                // move to command
                {
                    WORLD_POS[] posTarget = new WORLD_POS[1];
                    posTarget[0].m_fX = newPlayerMovPacket.PosTarget.m_fX;
                    posTarget[0].m_fZ = newPlayerMovPacket.PosTarget.m_fZ;

                    SCommand_Object cmdTemp = new SCommand_Object();
                    cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_MOVE;
                    cmdTemp.SetValue <uint>(0, 0);
                    cmdTemp.SetValue(1, newPlayerMovPacket.HandleID);
                    cmdTemp.SetValue(2, 1);
                    cmdTemp.SetValue <WORLD_POS[]>(3, posTarget);
                    pOther.PushCommand(cmdTemp);
                }

                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pOther.ID);
                // CObjectManager::GetMe().GetLoadQueue().TryAddLoadTask(pOther.GetID(), CObject_Character::CT_MONSTER);

                //tempcode
//                 {
//                  //此版不做服务器繁忙客户端延后发消息的处理
//                     CGCharAskBaseAttrib msgAskBaseAttrib = new CGCharAskBaseAttrib();
//                  msgAskBaseAttrib.setTargetID( (uint)(int)newPlayerMovPacket.ObjID);
//                  GameProcedure.s_NetManager.SendPacket(msgAskBaseAttrib );
//
//               }

                pOther.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);;
        }