public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain) { CObjectManager pObjectManager = CObjectManager.Instance; GCAbilityResult packet = pPacket as GCAbilityResult; // //失败! if (packet.Result != (int)OPERATE_RESULT.OR_OK) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText((OPERATE_RESULT)packet.Result)); if (packet.Result == (int)OPERATE_RESULT.OR_FAILURE) { //switch(packet.AbilityID) //{ //case 3: // CSoundSystemFMod::_PlayUISoundFunc(22+59); // break; //default: // break; //} CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_CLOSE_SYNTHESIZE_ENCHASE); } // 结束采集操作 [4/18/2012 Ivan] { CAI_MySelf pMySelfAI = (CAI_MySelf)CObjectManager.Instance.getPlayerMySelf().CharacterLogic_GetAI(); pMySelfAI.FinishTripperActive(); } } } 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.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); }
//private int iCalcTime = 30; void Start() { csObjectManager = GameObject.Find("PFB_ObjectManager").GetComponent <CObjectManager>(); csOrderManager = GameObject.Find("PFB_OrderManager").GetComponent <COrderManager>(); gSecondHand = GameObject.Find("PFB_SecondHand"); }
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);; }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { LogManager.Log("Receive GCCharmInfo Packet"); GCCharmInfoFlush CharmInfoFlushPacket = (GCCharmInfoFlush)pPacket; CObjectManager pObjectManager = CObjectManager.Instance; CDataPool.Instance.PlayerCharmInfo = CharmInfoFlushPacket.CharmInfo; } 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) { 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 packet, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { LogManager.Log("Receive GCBoxItemList Packet"); CObjectManager pObjectManager = CObjectManager.Instance; GCBoxItemList pPacket = (GCBoxItemList)packet; // 清空 CDataPool.Instance.ItemBox_Clear(); // 记录箱子id CDataPool.Instance.ItemBox_SetID((int)pPacket.getItemBoxId()); // 放置每一个物品 for (int i = 0; i < pPacket.getItemNum(); i++) { CObject_Item pItemObj = ObjectSystem.Instance.NewItem(pPacket.getItemList()[i].m_ItemIndex); if (pItemObj == null) { continue; } pItemObj.SetGUID( (ushort)((pPacket.getItemList())[i].m_ItemGUID.m_World), (ushort)((pPacket.getItemList())[i].m_ItemGUID.m_Server), (uint)((pPacket.getItemList())[i].m_ItemGUID.m_Serial)); pItemObj.SetExtraInfo(ref (pPacket.getItemList()[i])); pItemObj.SetTypeOwner(ITEM_OWNER.IO_ITEMBOX); pItemObj.SetPosIndex((short)i); CDataPool.Instance.ItemBox_SetItem(i, pItemObj, true); _ITEM pItem = (pPacket.getItemList())[i]; GameProcedure.s_pGameInterface.ItemBox_PickItem(pItem.m_ItemGUID, pPacket.getItemBoxId()); } // 自动拾取,不再产生actionItem [3/29/2012 SUN] //int nObjId = CObjectManager.Instance.FindServerObject((int)pPacket.getItemBoxId()).ID; ////产生事件 //CActionSystem.Instance.ItemBox_Created(nObjId); } 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); }
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) { //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); }
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); }
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 Packet, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { LogManager.Log("Receive GCPickResult Packet"); GCPickResult pPacket = (GCPickResult)Packet; CObjectManager pObjectManager = CObjectManager.Instance; CDataPool pDataPool = GameProcedure.s_pDataPool; //if( pPacket.getItemBoxId() != pDataPool.GetItemBoxID() ) bool bLog = (GameProcedure.s_pUISystem != null)?true:false; // 放置每一个物品 if (pPacket.getResult() == (byte)PickResultCode.PICK_SUCCESS) { int nIndex = 0; CObject_Item pItem = CDataPool.Instance.ItemBox_GetItem( pPacket.getItemID().m_World, pPacket.getItemID().m_Server, pPacket.getItemID().m_Serial, ref nIndex); if (pItem == null) { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "内部错误,非法的物品GUID!"); } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } // 先保存物品名称,后面可能会删除掉落包里的物品 [6/13/2011 ivan edit] string strItemName = pItem.GetName(); //如果发生物品转移,(从箱子里面移到包裹里),则改变客户端id,以表示在客户端是不同物体 ObjectSystem.Instance.ChangeItemClientID(pItem); ((CObject_Item)pItem).SetTypeOwner(ITEM_OWNER.IO_MYSELF_PACKET); CObject_Item pItemBag = CDataPool.Instance.UserBag_GetItem(pPacket.getBagIndex()); if (pItemBag != null) { //有东西,应该一定是一类物品 if (pItem.GetIdTable() == pItemBag.GetIdTable()) { //同一类物品 //CDataPool.GetMe().ItemBox_SetItem(nIndex, NULL, FALSE); // 不删除会泄露内存 [6/10/2011 ivan edit] CDataPool.Instance.ItemBox_SetItem(nIndex, null, true); } else { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } } else { //没东西 //存入数据池 CDataPool.Instance.UserBag_SetItem(pPacket.getBagIndex(), pItem, true, true); CDataPool.Instance.ItemBox_SetItem(nIndex, null, false); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_GET_NEWEQUIP, pItem.GetID()); } //通知ActionButton CActionSystem.Instance.UserBag_Update(); CActionSystem.Instance.ItemBox_Update(); //产生ui事件 if (bLog) { //ADDTALKMSG(strItemName); //todo } CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_SLOT_CLEARED); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_PACKAGE_ITEM_CHANGED, pPacket.getBagIndex()); //如果掉落箱空,关闭 if (CDataPool.Instance.ItemBox_GetNumber() == 0) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_CLOSED); } } else { switch (pPacket.getResult()) { case (byte)PickResultCode.PICK_BAG_FULL: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("背包已满!")); } //CSoundSystemFMod._PlayUISoundFunc(96); todo } break; case (byte)PickResultCode.PICK_INVALID_OWNER: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("不属于自己的背包!")); } } break; case (byte)PickResultCode.PICK_INVALID_ITEM: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("非法物品!")); } } break; case (byte)PickResultCode.PICK_TOO_FAR: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("距离太远!")); } } break; default: break; } } } 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); }
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); }
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); }
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);; }