public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain)
            {
                GCAbilityAction packet         = pPacket as GCAbilityAction;
                CObjectManager  pObjectManager = CObjectManager.Instance;
                if (pObjectManager == null)
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR);
                }
                CObject pObj = pObjectManager.FindServerObject((int)packet.ObjectID);
                if (pObj == null)
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                if (packet.BeginOrEnd == (byte)GCAbilityAction.ActionState.ABILITY_BEGIN)
                {
                    SCommand_Object cmdTemp = new SCommand_Object();
                    cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_ABILITY;
                    cmdTemp.SetValue(0, 0);
                    cmdTemp.SetValue <int>(1, packet.LogicCount);
                    cmdTemp.SetValue <short>(2, packet.AbilityID);
                    cmdTemp.SetValue <int>(3, packet.PrescriptionID);
                    cmdTemp.SetValue <uint>(4, packet.TargetID);
                    pObj.PushCommand(cmdTemp);
                }
            }

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #2
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase packet, ref Peer pPlayer)
        {
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain)
            {
                GCNewPet       pPacket        = (GCNewPet)packet;
                CObjectManager pObjectManager = CObjectManager.Instance;
                //检查位置是否合法
                fVector2 pos = new fVector2(pPacket.getWorldPos().m_fX, pPacket.getWorldPos().m_fZ);
                if (!WorldManager.Instance.ActiveScene.IsValidPosition(ref pos))
                {
                    LogManager.LogError("Valid Position @GCNewPetHandler.Execute");
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR);
                }
                //创建宠物
                CObject_PlayerNPC pNPC = (CObject_PlayerNPC)pObjectManager.FindServerObject((int)pPacket.getObjID());

                float fFaceDir = pPacket.getDir();
                if (pNPC == null)
                {
                    pNPC = pObjectManager.NewPlayerNPC((int)pPacket.getObjID());

                    SObjectInit initPlayerNPC = new SObjectInit();

                    initPlayerNPC.m_fvPos = new Vector3(pos.x, 0, pos.y);
                    initPlayerNPC.m_fvRot = new Vector3(0.0f, fFaceDir, 0.0f);

                    pNPC.Initial(initPlayerNPC);
                }
                else
                {
                    pNPC.SetMapPosition(pos.x, pos.y);
                    pNPC.SetFaceDir(fFaceDir);
                    pNPC.Enable((uint)ObjectStatusFlags.OSF_VISIABLE);
                    pNPC.Disalbe((uint)ObjectStatusFlags.OSF_OUT_VISUAL_FIELD);
                }

                pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_PET);
                pNPC.GetCharacterData().Set_MoveSpeed(pPacket.getMoveSpeed());

                SCommand_Object cmdTemp = new SCommand_Object();
                cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_IDLE;
                cmdTemp.SetValue <float>(0, pos.x);
                cmdTemp.SetValue <float>(1, pos.y);
                cmdTemp.SetValue <bool>(2, false);
                pNPC.PushCommand(cmdTemp);

                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pNPC.ID);


                //同步渲染层
                string szTemp = "GCNewPet(" + pos.x.ToString() + "," + pos.y.ToString() + ")";
                pNPC.PushDebugString(szTemp);
                pNPC.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);;
        }
Exemple #3
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager pObjectManager = CObjectManager.Instance;
                GCDelObject    delObjPacket   = (GCDelObject)pPacket;
                //判断是否是本场景
                // 将场景ID和资源ID分开,不再使用资源ID代替场景ID [10/24/2011 Sun]
                if (WorldManager.Instance.GetActiveSceneID() != delObjPacket.getSceneID())
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                //寻找obj
                CObject           pDelObj = pObjectManager.FindServerObject((int)delObjPacket.getObjID());
                CObject_Character pObj    = pDelObj as CObject_Character;
                LogManager.Log("GCDelObjectHandler ObjID:" + delObjPacket.getObjID());
                if (pObj == null)
                {
                    CObjectManager.Instance.DestroyObject(pDelObj);
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                if (CObjectManager.Instance.GetMainTarget() != null && pObj == CObjectManager.Instance.GetMainTarget())
                {
                    CObjectManager.Instance.SetMainTarget(-1, CObjectManager.DESTROY_MAIN_TARGET_TYPE.DEL_OBJECT);
                }
                // 判断obj是否在载具上面,在的话需要删除掉 [8/29/2011 Ivan edit] //todo
                if (pObj.GetCharacterType() == CHARACTER_TYPE.CT_PLAYEROTHER ||
                    pObj.GetCharacterType() == CHARACTER_TYPE.CT_PLAYERMYSELF)
                {
                    if (pObj.GetCharacterData().Get_BusObjID() != MacroDefine.UINT_MAX)
                    {
                        CObject pBus = CObjectManager.Instance.FindServerObject((int)pObj.GetCharacterData().Get_BusObjID());
                        if (pBus != null)
                        {
                            SCommand_Object cmdTemp = new SCommand_Object();
                            cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_BUS_REMOVE_PASSENGER;
                            cmdTemp.SetValue <int>(0, pObj.ServerID);
                            pBus.PushCommand(cmdTemp);
                        }
                    }
                }

                //删除对象
                CObjectManager.Instance.DestroyObject(pObj);
                //之后不能执行任何代码
            }

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                //LogManager.Log("Receive GCCharMove Packet");
                GCCharMove     charMovePacket = (GCCharMove)pPacket;
                CObjectManager pObjectManager = CObjectManager.Instance;

                CObject pObj = (CObject)(pObjectManager.FindServerObject((int)charMovePacket.ObjID));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                SCommand_Object cmdTemp = new SCommand_Object();
                if (charMovePacket.IsHaveStopInfo())
                {
                    cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_STOP_MOVE;
                    cmdTemp.SetValue(0, charMovePacket.StopLogicCount);
                    cmdTemp.SetValue(1, 0);
                    cmdTemp.SetValue(2, pObj.GetPosition().x);
                    cmdTemp.SetValue(3, pObj.GetPosition().z);
                    pObj.PushCommand(cmdTemp);
                }
                WORLD_POS[] posTarget = new WORLD_POS[1];
                posTarget[0].m_fX = charMovePacket.PosTarget.m_fX;
                posTarget[0].m_fZ = charMovePacket.PosTarget.m_fZ;

                cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_MOVE;
                cmdTemp.SetValue(0, charMovePacket.StartTime);
                cmdTemp.SetValue(1, charMovePacket.HandleID);
                cmdTemp.SetValue(2, 1);
                cmdTemp.SetValue(3, posTarget);
                pObj.PushCommand(cmdTemp);
                pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #5
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                GCCharStopAction Packet         = (GCCharStopAction)pPacket;
                CObjectManager   pObjectManager = CObjectManager.Instance;

                CObject pObj = (CObject)(pObjectManager.FindServerObject((int)Packet.ObjectID));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                SCommand_Object cmdTemp = new SCommand_Object();

                cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_STOP_ACTION;
                cmdTemp.SetValue(0, Packet.LogicCount);
                cmdTemp.SetValue(1, Packet.StopTime);

                pObj.PushCommand(cmdTemp);
                pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            GCCharBaseAttrib charBaseAttribPacket = (GCCharBaseAttrib)pPacket;

            //LogManager.Log("RECV GCCharBaseAttrib : Flag=" + charBaseAttribPacket.Flag);

            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                //LogManager.LogWarning("RECV GCCharBaseAttrib : id=" + charBaseAttribPacket.ObjectID);
                CObjectManager pObjectManager = CObjectManager.Instance;

                CObject pObj = (CObject)(pObjectManager.FindServerObject(charBaseAttribPacket.ObjectID));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                bool bAddLoadTask = false;

                CCharacterData pCharacterData = ((CObject_Character)pObj).GetCharacterData();

                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_DATA_ID) && !bAddLoadTask)
                {
                    try
                    {
                        //if (pObj is CObject_PlayerMySelf)
                        //{
                        //    LogManager.Log("主角收到RaceID:" + charBaseAttribPacket.DataID);
                        //}
                        //else if (pObj is CObject_PlayerOther)
                        //{
                        //    LogManager.Log("其他玩家收到RaceID:" + charBaseAttribPacket.DataID);
                        //}
                        pCharacterData.Set_RaceID(charBaseAttribPacket.DataID);
                        //LogManager.LogWarning("SetRace in GCCharBaseAttribHandler = " + charBaseAttribPacket.DataID + " ObjectID= " + pObj.ServerID);
                    }
                    catch (Exception e)
                    {
                        LogManager.LogError(e.ToString());
                    }
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_CAMP_ID))
                {
                    pCharacterData.Set_CampData(charBaseAttribPacket.CampData);
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_NAME))
                {
                    string name = UIString.Instance.GetUnicodeString(charBaseAttribPacket.Name);
                    pCharacterData.Set_Name(name);
                }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_TITLE))
//              {
//                  pCharacterData.Set_CurTitle(charBaseAttribPacket.getTitle());
//                  pCharacterData.Set_CurTitleType(charBaseAttribPacket.getTitleType());
//                  CEventSystem::GetMe().PushEvent(GE_CUR_TITLE_CHANGEED);
//              }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_LEVEL))
                {
                    pCharacterData.Set_Level(charBaseAttribPacket.Level);
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_HP_PERCENT))
                {
                    pCharacterData.Set_HPPercent(charBaseAttribPacket.HPPercent / 100.0f);
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_MP_PERCENT))
                {
                    pCharacterData.Set_MPPercent(charBaseAttribPacket.MPPercent / 100.0f);
                }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_RAGE))
//              {
//                  pCharacterData.Set_Rage(charBaseAttribPacket.getRage() );
//              }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_STEALTH_LEVEL))
                {
                    pCharacterData.Set_StealthLevel(charBaseAttribPacket.StealthLevel);
                }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_SIT))
//              {
//                  //pCharacterData.Set_Sit(charBaseAttribPacket.IsSit() );
//              }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_MOVE_SPEED))
                {
                    if (pObj is CObject_PlayerMySelf)
                    {
                        LogManager.Log("主角收到MOVE_SPEED:" + charBaseAttribPacket.MoveSpeed);
                    }
                    pCharacterData.Set_MoveSpeed(charBaseAttribPacket.MoveSpeed);
                }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_ATTACK_SPEED))
//              {
//                  //必须是主角
//                  if(pObj == CObjectManager::GetMe().GetMySelf())
//                      pCharacterData.Set_AttackSpeed((int)charBaseAttribPacket.AttackSpeed);
//              }

//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_OWNER))
//              {
//                  pCharacterData.Set_OwnerID(charBaseAttribPacket.OwnerID);
//              }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_OCCUPANT))
//              {
//                  pCharacterData.Set_OccupantGUID(charBaseAttribPacket.OccupantGUID);
//              }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_PORTRAIT_ID))
                {
                    pCharacterData.Set_PortraitID(charBaseAttribPacket.PortraitID);
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_MODEL_ID) && !bAddLoadTask)
                {
                    pCharacterData.Set_ModelID(charBaseAttribPacket.ModelID);
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_MOUNT_ID) && !bAddLoadTask)
                {
                    pCharacterData.Set_MountID(charBaseAttribPacket.MountID);//坐骑ID
                }
                if (charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_PLAYER_DATA))
                {
                    pCharacterData.Set_FaceMesh(charBaseAttribPacket.FaceMesh);
                    pCharacterData.Set_HairMesh(charBaseAttribPacket.HairMesh);
                    pCharacterData.Set_HairColor(charBaseAttribPacket.HairColor);
                }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_IS_IN_STALL))
//              {
//                  pCharacterData.Set_IsInStall(charBaseAttribPacket.getIsOpen());
//              }
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_STALL_NAME))
//              {
//                  pCharacterData.Set_StallName(charBaseAttribPacket.getStallName());
//              }
//
//              if(charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_STALL_NAME))
//              {
//                  pCharacterData.Set_StallName(charBaseAttribPacket.getStallName());
//              }
//		        pObj.SetMsgTime(CGameProcedure::s_pTimeSystem.GetTimeNow());

                //如果不是玩家自己
//		        if(pObj != (CObject*)CObjectManager::GetMe().GetMySelf() && charBaseAttribPacket.IsUpdateAttrib(ENUM_UPDATE_CHAR_ATT.UPDATE_CHAR_ATT_AITYPE))
                ///	        {
                //		        pCharacterData.Set_AIType(charBaseAttribPacket.getAIType());

                //	        }
            }
            else
            {
            }

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #7
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                GCNewMonster_Death newMonsterPacket = (GCNewMonster_Death)pPacket;
                CObjectManager     pObjectManager   = GameProcedure.s_pObjectManager;
                //              //检查位置是否合法
                //              if(!CWorldManager::GetMe().GetActiveScene().IsValidPosition(fVector2(newMonsterPacket.getWorldPos().m_fX, newMonsterPacket.getWorldPos().m_fZ)))
                //              {
                //                  TDThrow("ERROR POSITION @ GCNewMonsterHandler");
                //              }

                //创建玩家
                CObject_PlayerNPC pNPC = (CObject_PlayerNPC)pObjectManager.FindServerObject((int)newMonsterPacket.ObjectID);

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

                if (newMonsterPacket.IsNpc != 0)
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_NPC);
                }
                else
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_MONSTER);
                }

                SCommand_Object cmdTemp = new SCommand_Object();
                cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_DEATH;
                cmdTemp.SetValue <bool>(0, false);
                pNPC.PushCommand(cmdTemp);

                //清除界面选中NPC
                if (CObjectManager.Instance.GetMainTarget() != null && pNPC != null &&
                    (CObjectManager.Instance.GetMainTarget().ID == pNPC.ID))
                {
                    GameProcedure.s_pGameInterface.Object_SelectAsMainTarget(MacroDefine.INVALID_ID);
                }

                pNPC.GetCharacterData().Set_MoveSpeed(newMonsterPacket.MoveSpeed);


                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pNPC.ID);

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

                //              char szTemp[MAX_PATH];
                //              _snprintf(szTemp, MAX_PATH, "GCNewMonster(%.1f,%.1f)",
                //                  newMonsterPacket.getWorldPos().m_fX, newMonsterPacket.getWorldPos().m_fZ);
                //              pNPC.PushDebugString(szTemp);
                pNPC.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPack, ref Peer pPlayer)
        {
            LogManager.Log("RECV GCCharEquipment Packet ");
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager  pObjectManager = CObjectManager.Instance;
                GCCharEquipment pPacket        = (GCCharEquipment)pPack;
                CObject         pObj           = (CObject)(pObjectManager.FindServerObject((int)pPacket.getObjID()));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                /*
                 *              static UINT pBuf[UPDATE_CHAR_ATT_NUMBERS];
                 *              pPacket.FillParamBuf( (VOID*)pBuf );
                 *
                 *              SCommand_Object cmdTemp;
                 *              cmdTemp.m_wID			= OC_UPDATE_EQUIPMENT;
                 *              cmdTemp.m_adwParam[0]	= pPacket.getFlags();
                 *              cmdTemp.m_apParam[1]	= (VOID*)pBuf;
                 *              pObj.PushCommand(&cmdTemp );
                 */
                //刷入数据池
                CCharacterData pCharacterData = ((CObject_Character)pObj).GetCharacterData();
                //		if(pObj == (CObject*)CObjectManager::GetMe().GetMySelf())
                {
                    uint dwEquipFlag = pPacket.getFlags();

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_WEAPON)) != 0)
                    {
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponGemID());
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CAP)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CAP, (int)pPacket.getCapID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_ARMOR)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourID());
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourGemID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CUFF)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CUFF, (int)pPacket.getCuffID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BOOT)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BOOT, (int)pPacket.getBootID());
                    }

                    //  [8/30/2010 Sun]
                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BACK)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BACK, (int)pPacket.getBackID());
                    }

                    // 支持进入游戏时,服务器刷新肩甲 [4/27/2011 ivan edit]
                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_SASH)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashID());
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashGemID());
                    }
                }

                pObj.PushDebugString("GCCharEquipment");
                pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase packet, ref Peer pPlayer)
        {
            GCNewItemBox pPacket = (GCNewItemBox)packet;

            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager pObjectManager = CObjectManager.Instance;

                //检查位置是否合法
                fVector2 pos = new fVector2(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                if (!WorldManager.Instance.ActiveScene.IsValidPosition(ref pos))
                {
                    LogManager.LogError("Valid Position @GCNewItemBoxHandler.Execute");
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR);
                }

                if ((int)ITEMBOX_TYPE.ITYPE_DROPBOX == pPacket.ObjectType)
                {
                    bool    bMustCreater = true;
                    CObject pObj         = (CObject)(pObjectManager.FindServerObject((int)pPacket.MonsterID));
                    if (pObj != null && pObj is CObject_Character)
                    {
                        CObject_Character pCharacter = (CObject_Character)pObj;
                        if (!pCharacter.IsDie())
                        {
                            uint      idItemBox = (uint)pPacket.ObjectID;
                            uint      idOwner   = (uint)pPacket.OwnerID;
                            WORLD_POS posCreate = pPacket.Position;
                            pCharacter.AddDropBoxEvent(idItemBox, idOwner, ref posCreate);
                            bMustCreater = false;
                        }
                    }

                    if (bMustCreater)
                    {
                        //创建ItemBox
                        CTripperObject_ItemBox pBox = (CTripperObject_ItemBox)CObjectManager.Instance.NewTripperItemBox((int)pPacket.ObjectID);
                        pBox.Initial(null);
                        //设置位置
                        pBox.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                        //设置掉落箱的归属
                        pBox.SetOwnerGUID((uint)pPacket.OwnerID);

                        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_DROP_ITEMBOX);
                    }
                }
                else
                {
                    //创建矿物生长点
                    CTripperObject_Resource pResource = (CTripperObject_Resource)CObjectManager.Instance.NewTripperResource((int)pPacket.ObjectID);
                    if (!(pResource.SetResourceID((int)pPacket.ObjectType)))
                    {
                        //非法的资源ID
                        CObjectManager.Instance.DestroyObject(pResource);
                        return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                    }
                    pResource.Initial(null);
                    //设置位置
                    pResource.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                    jhCount++;
                }
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #10
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)
            {
                GCNewMonster   newMonsterPacket = (GCNewMonster)pPacket;
                CObjectManager pObjectManager   = GameProcedure.s_pObjectManager;
//              //检查位置是否合法
//              if(!CWorldManager::GetMe().GetActiveScene().IsValidPosition(fVector2(newMonsterPacket.getWorldPos().m_fX, newMonsterPacket.getWorldPos().m_fZ)))
//              {
//                  TDThrow("ERROR POSITION @ GCNewMonsterHandler");
//              }

                //创建玩家
                CObject_PlayerNPC pNPC = (CObject_PlayerNPC )pObjectManager.FindServerObject((int)newMonsterPacket.ObjectID);

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

                pNPC.SetFaceDir(newMonsterPacket.Dir);

                if (newMonsterPacket.IsNpc != 0)
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_NPC);
                }
                else
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_MONSTER);
                }

                pNPC.GetCharacterData().Set_MoveSpeed(newMonsterPacket.MoveSpeed);

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

                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pNPC.ID);

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

//              char szTemp[MAX_PATH];
//              _snprintf(szTemp, MAX_PATH, "GCNewMonster(%.1f,%.1f)",
//                  newMonsterPacket.getWorldPos().m_fX, newMonsterPacket.getWorldPos().m_fZ);
//              pNPC.PushDebugString(szTemp);
                pNPC.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #11
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager    pObjectManager      = CObjectManager.Instance;
                GCNewMonster_Move newMonsterMovPacket = (GCNewMonster_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 pNPC = (CObject_PlayerNPC)pObjectManager.FindServerObject((int)newMonsterMovPacket.getObjID());

                if (pNPC == null)
                {
                    pNPC = pObjectManager.NewPlayerNPC((int)newMonsterMovPacket.getObjID());
                    pNPC.Initial(null);
                }
                else
                {
                    //pNPC.Enable( OSF_VISIABLE );
                    // pNPC.Disalbe( OSF_OUT_VISUAL_FIELD );
                }
                //设置x z坐标
                pNPC.SetMapPosition(newMonsterMovPacket.getWorldPos().m_fX, newMonsterMovPacket.getWorldPos().m_fZ);
                if (newMonsterMovPacket.getIsNPC())
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_NPC);
                }
                else
                {
                    pNPC.SetNpcType(ENUM_NPC_TYPE.NPC_TYPE_MONSTER);
                }

                pNPC.GetCharacterData().Set_MoveSpeed(newMonsterMovPacket.getMoveSpeed());

                // move to command
                {
                    WORLD_POS[] posTarget = new WORLD_POS[1];
                    posTarget[0].m_fX = newMonsterMovPacket.getTargetPos().m_fX;
                    posTarget[0].m_fZ = newMonsterMovPacket.getTargetPos().m_fZ;

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

                //放入Ask队列
                pObjectManager.LoadQueue.TryAddLoadTask(pNPC.ID);

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

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

            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);;
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            GCDetailAttrib detailAttribPacket = (GCDetailAttrib)pPacket;

            //LogManager.Log("RECV GCCharBaseAttrib : Flag=" + detailAttribPacket.Flags);

            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager pObjectManager = CObjectManager.Instance;

                CObject pObj = (CObject)(pObjectManager.FindServerObject((int)detailAttribPacket.ObjID));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                CCharacterData pCharacterData = ((CObject_Character)pObj).GetCharacterData();

                //        //玩家详细的属性刷新

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_LEVEL))                //0
                {
                    pCharacterData.Set_Level((int)detailAttribPacket.LV);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_HP))                   //1
                {
                    pCharacterData.Set_HP(detailAttribPacket.HP);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MP))                   //2
                {
                    pCharacterData.Set_MP(detailAttribPacket.MP);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_EXP))                  //3
                {
                    pCharacterData.Set_Exp(detailAttribPacket.Exp);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MONEY))                //4
                {
                    pCharacterData.Set_Money(detailAttribPacket.Money);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_STR))  //5
                {
                    pCharacterData.Set_STR(detailAttribPacket.Str);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_SPR))  //6
                {
                    pCharacterData.Set_SPR(detailAttribPacket.SPR);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_CON))  //7
                {
                    pCharacterData.Set_CON(detailAttribPacket.CON);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_INT))   //8
                {
                    pCharacterData.Set_INT(detailAttribPacket.INT);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DEX))   //9
                {
                    pCharacterData.Set_DEX(detailAttribPacket.DEX);
                }
                //        if ( flagDetail.isSetBit( DETAIL_ATTRIB_POINT_REMAIN) )//10
                //            pCharacterData->Set_PointRemain(pPacket->GetPoint_Remain());
                // 培养点数
                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_STR_RANDOM_POINT))                                     //力量 力量
                {
                    pCharacterData.Set_BringSTR(detailAttribPacket.StrRandomPoint);
                }
                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_SPR_RANDOM_POINT))                                     //力量 力量
                {
                    pCharacterData.Set_BringSPR(detailAttribPacket.SprRandomPoint);
                }
                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_CON_RANDOM_POINT))
                {
                    pCharacterData.Set_BringCON(detailAttribPacket.ConRandomPoint);
                }
                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_INT_RANDOM_POINT))
                {
                    pCharacterData.Set_BringINT(detailAttribPacket.IntRandomPoint);
                }
                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DEX_RANDOM_POINT))
                {
                    pCharacterData.Set_BringDEX(detailAttribPacket.DexRandomPoint);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_ATT_PHYSICS))   //11
                {
                    pCharacterData.Set_AttPhysics(detailAttribPacket.PhysicsAttk);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DEF_PHYSICS))   //12
                {
                    pCharacterData.Set_DefPhysics(detailAttribPacket.PhysicsDef);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_ATT_MAGIC))   //13
                {
                    pCharacterData.Set_AttMagic(detailAttribPacket.MagicAttk);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DEF_MAGIC))   //14
                {
                    pCharacterData.Set_DefMagic(detailAttribPacket.MagicDef);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MAXHP))                //15
                {
                    pCharacterData.Set_MaxHP(detailAttribPacket.MaxHP);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MAXMP))                //16
                {
                    pCharacterData.Set_MaxMP(detailAttribPacket.MaxMP);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_HP_RESPEED))   //17
                {
                    pCharacterData.Set_HPRespeed(detailAttribPacket.HPReSpeed);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MP_RESPEED))   //18
                {
                    pCharacterData.Set_MPRespeed(detailAttribPacket.MPReSpeed);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_HIT))  //19
                {
                    pCharacterData.Set_Hit(detailAttribPacket.Hit);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MISS)) //20
                {
                    pCharacterData.Set_Miss(detailAttribPacket.Miss);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_CRITRATE))     //21
                {
                    pCharacterData.Set_CritRate(detailAttribPacket.CriticalRate);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DEFENCE_C))    //24
                {
                    pCharacterData.Set_DefCritRate(detailAttribPacket.CriticalDef);
                }


                //if ( detailAttribPacket.IsSetBit( ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_RAGE) )	//22
                //{
                //    pCharacterData.Set_Rage(detailAttribPacket.Rage);

                //    // 怒气更新要通知界面。2006-4-26
                //    CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_UNIT_RAGE);
                //}

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_STRIKE_POINT)) //23
                {
                    pCharacterData.Set_StrikePoint(detailAttribPacket.StrikePoint);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MOVESPEED))                    //24
                {
                    pCharacterData.Set_MoveSpeed(detailAttribPacket.MoveSpeed);
                }

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKSPEED))	//25
                //            pCharacterData->Set_AttackSpeed(pPacket->GetAttSpeed());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKCOLD))	//26
                //            pCharacterData->Set_AttWater(pPacket->GetAttCold());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCECOLD))	//27
                //            pCharacterData->Set_DefWater(pPacket->GetDefCold());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKFIRE))	//28
                //            pCharacterData->Set_AttFire(pPacket->GetAttFire());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCEFIRE))	//29
                //            pCharacterData->Set_DefFire(pPacket->GetDefFire());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKLIGHT))	//30
                //            pCharacterData->Set_AttMetal(pPacket->GetAttLight());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCELIGHT))	//31
                //            pCharacterData->Set_DefMetal(pPacket->GetDefLight());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKPOISON))	//32
                //            pCharacterData->Set_AttWood(pPacket->GetAttPoison());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCEPOISON))	//33
                //            pCharacterData->Set_DefWood(pPacket->GetDefPoison());

                //        // 增加土攻土防 [11/9/2011 Ivan edit]
                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKEARTH))
                //            pCharacterData->Set_AttEarth(pPacket->GetAttEarth());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCEEARTH))
                //            pCharacterData->Set_DefEarth(pPacket->GetDefEarth());

                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKWIND))	//风攻
                ////            pCharacterData->Set_AttWind(pPacket->GetAttWind());
                ////
                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCEWIND))	//风防
                ////            pCharacterData->Set_DefWind(pPacket->GetDefWind());
                ////
                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_ATTACKTHUNDER))	//雷攻
                ////            pCharacterData->Set_AttThunder(pPacket->GetAttThunder());
                ////
                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_DEFENCETHUNDER))	//雷防
                ////            pCharacterData->Set_DefThunder(pPacket->GetDefThunder());

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MENPAI))               //34
                {
                    pCharacterData.Set_MenPai(detailAttribPacket.MenPai);
                }

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_GUILD)	)		//34
                //            pCharacterData->Set_Guild(pPacket->GetGuild());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_CAMP)	)			//35
                //            pCharacterData->Set_CampData(pPacket->GetCampData());

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_DATAID))                       //36
                //pCharacterData.Set_RaceID(detailAttribPacket.DataID); //因为数据包接收错误 暂时屏蔽接收Race ID

                {
                    if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MODELID))                  //36
                    {
                        pCharacterData.Set_ModelID(detailAttribPacket.ModelID);
                    }
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MOUNTID))                      //37
                {
                    pCharacterData.Set_MountID(detailAttribPacket.MountID);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_CURRENT_PET_GUID))                     //37
                {
                    pCharacterData.Set_CurrentPetGUID(detailAttribPacket.CurrentPet);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_LIMIT_MOVE))   //38
                {
                    pCharacterData.SetLimitMove(detailAttribPacket.LimitMove);
                }

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_CAN_ACTION1)	)	//39
                //            pCharacterData->SetCanActionFlag1(pPacket->GetCanActionFlag1());

                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_CAN_ACTION2)	)	//40
                //            pCharacterData->SetCanActionFlag2(pPacket->GetCanActionFlag2());

                //        //if(flagDetail.isSetBit(DETAIL_ATTRIB_LIMIT_USE_SKILL)	)	//39
                //        //	pCharacterData->SetLimitUseSkill(pPacket->GetLimitUseSkill());

                //        //if(flagDetail.isSetBit(DETAIL_ATTRIB_LIMIT_HANDLE)	)	//40
                //        //	pCharacterData->SetLimitHandle(pPacket->GetLimitHandle());

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_RMB))
                {
                    pCharacterData.Set_RMB(detailAttribPacket.RMBMoney);
                }
                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_MAX_VIGOR) )
                ////            pCharacterData->Set_MaxVigor(pPacket->GetMaxVigor());

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_ENERGY))
                {
                    pCharacterData.Set_DoubleExpTime_Num(detailAttribPacket.DoubleExpTimeNum);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_HELPMASK))
                {
                    pCharacterData.Set_TutorialMask(detailAttribPacket.HelpMask);
                }

                if (detailAttribPacket.IsSetBit(ENUM_DETAIL_ATTRIB.DETAIL_ATTRIB_MAX_ENERGY))
                {
                    pCharacterData.Set_MaxEnergy(detailAttribPacket.MaxEnergy);
                }

                //        //if(flagDetail.isSetBit(DETAIL_ATTRIB_GOODBADVALUE) )
                //        //	pCharacterData->Set_GoodBadValue(pPacket->GetGoodBadValue());

                ////		if(flagDetail.isSetBit(DETAIL_ATTRIB_MISSION_HAVEDONE_FLAGS) )
                ////			pCharacterData->Set_QuestHistory(pPacket->GetMissionHaveDoneFlags());

                ////        if(flagDetail.isSetBit(DETAIL_ATTRIB_AMBIT_EXP))
                ////            pCharacterData->Set_AmbitExp(pPacket->GetAmbitExp());
                ////
                //        if(flagDetail.isSetBit(DETAIL_ATTRIB_AMBIT))
                //            pCharacterData->Set_Ambit(pPacket->GetAmbit());

                //        pObj->PushDebugString("GCDetailAttrib");
                //        pObj->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Exemple #13
0
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain)
            {
                LogManager.Log("RECV GCNewPlayer_Death");
            }
            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                GCNewPlayer_Death newPlayerPacket = (GCNewPlayer_Death)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_PlayerOther pOther = (CObject_PlayerOther)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);

                SCommand_Object cmdTemp = new SCommand_Object();
                cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_DEATH;
                cmdTemp.SetValue <bool>(0, 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);
        }