public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { GCCharDirectImpact Packet = (GCCharDirectImpact)pPacket; if (GameProcedure.GetActiveProcedure() == GameProcedure.s_ProcMain) { CObject pObj = CObjectManager.Instance.FindServerObject(Packet.RecieverID); if (pObj != null) { _DAMAGE_INFO infoDamage = new _DAMAGE_INFO(); infoDamage.m_nSkillID = Packet.SkillID; infoDamage.m_nTargetID = (uint)Packet.RecieverID; infoDamage.m_nSenderID = (uint)Packet.SenderID; infoDamage.m_nSenderLogicCount = Packet.SenderLogicCount; infoDamage.m_nImpactID = Packet.ImpactID; infoDamage.m_nType = _DAMAGE_INFO.DAMAGETYPE.TYPE_EFFECT; _LOGIC_EVENT logicEvent = new _LOGIC_EVENT(); logicEvent.Init(infoDamage.m_nSenderID, infoDamage.m_nSenderLogicCount, infoDamage); SCommand_Object cmdTemp = new SCommand_Object(); cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_LOGIC_EVENT; cmdTemp.SetValue <object>(0, logicEvent); pObj.PushCommand(cmdTemp); pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow()); } LogManager.Log("RECV GCCharDirectImpact"); } 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 GCDetailHealsAndDamages Packet"); GCDetailHealsAndDamages Packet = (GCDetailHealsAndDamages)pPacket; CObject pObj = CObjectManager.Instance.FindServerObject((int)Packet.RecieverID); if (pObj != null) { _DAMAGE_INFO infoDamage = new _DAMAGE_INFO(); infoDamage.m_nSkillID = Packet.SkillID; if (infoDamage.m_nSkillID != MacroDefine.INVALID_ID) { _DBC_SKILL_DATA skillData = CSkillDataMgr.Instance.GetSkillData((uint)infoDamage.m_nSkillID); if (skillData != null) { infoDamage.m_nBulletID = skillData.m_nBulletID; } } infoDamage.m_nTargetID = (uint)Packet.RecieverID; infoDamage.m_nSenderID = (uint)Packet.SenderID; infoDamage.m_nSenderLogicCount = Packet.SenderLogicCount; infoDamage.m_nImpactID = MacroDefine.INVALID_ID; infoDamage.m_nType = _DAMAGE_INFO.DAMAGETYPE.TYPE_HEAL_AND_DAMAGE; if (Packet.IsHpModificationDirty()) { infoDamage.m_bHealthDirty = true; infoDamage.m_nHealthIncrement = Packet.HPModification; } if (Packet.IsMpModificationDirty()) { infoDamage.m_bManaDirty = true; infoDamage.m_nManaIncrement = Packet.MPModification; } if (Packet.IsRageModificationDirty()) { infoDamage.m_bRageDirty = true; infoDamage.m_nRageIncrement = Packet.RageModification; } if (Packet.IsStrikePointModificationDirty()) { infoDamage.m_bStrikePointDirty = true; infoDamage.m_nStrikePointIncrement = Packet.StrikePointModification; } infoDamage.m_bIsCriticalHit = Packet.CriticalHit; _LOGIC_EVENT logicEvent = new _LOGIC_EVENT(); logicEvent.Init((uint)Packet.SenderID, Packet.SenderLogicCount, infoDamage); SCommand_Object cmdTemp = new SCommand_Object(); cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_LOGIC_EVENT; cmdTemp.SetValue <object>(0, logicEvent); pObj.PushCommand(cmdTemp); } } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }
public void Init(uint nSenderID, int nSenderLogicCount, _DAMAGE_INFO DamageInfo) { m_nSenderID = nSenderID; m_nSenderLogicCount = nSenderLogicCount; m_nEventType = ENUM_LOGIC_EVENT_TYPE.LOGIC_EVENT_TYPE_DAMAGE; m_damage = DamageInfo; }
private void DisplayMissImmuAndSoOn(_DAMAGE_INFO pDamageInfo) { if (pDamageInfo == null) { return; } if (m_Character.GetRenderInterface() == null /*|| GameProcedure.s_pUISystem == null*/) { return; } //if (this.GetCharacterType() == CT_MONSTER && ( ((CObject_PlayerNPC*)this).IsDisplayBoard() == FALSE)) //{ // return; //} Vector3 fvPos = m_Character.m_pInfoBoard != null?m_Character.m_pInfoBoard.GetPosition() : Vector3.zero; //if (m_pMountRenderInterface != null) //{ // fvCurPos.y += m_fMountAddHeight; //} //m_cObject.GetRenderInterface().Actor_GetInfoBoardPos(fvPos, fvCurPos); CObject pMyself = CObjectManager.Instance.getPlayerMySelf(); if (pMyself == null) { return; } //bool bFlag = false; string strMsg = string.Empty; switch ((MissFlag_T)pDamageInfo.m_nImpactID) { case MissFlag_T.FLAG_MISS: //strMsg = ChangeDamgeByRule(ENUM_DAMAGE_TYPE.DAMAGE_MISS,0,ENUM_DAMAGE_OPERATION.OPERATION_INVALID); //bFlag = true; UISystem.Instance.AddNewBeHitBoard(false, "", fvPos.x, fvPos.y, ENUM_DAMAGE_TYPE.DAMAGE_MISS, ENUM_DMG_MOVE_TYPE.MOVE_STATUS); break; //case MissFlag_T.FLAG_IMMU: // strMsg = ChangeDamgeByRule(ENUM_DAMAGE_TYPE.DAMAGE_MISS, 0, ENUM_DAMAGE_OPERATION.OPERATION_INVALID); // bFlag = true; // break; //case MissFlag_T.FLAG_ABSORB: // strMsg = ChangeDamgeByRule(ENUM_DAMAGE_TYPE.DAMAGE_MISS, 0, ENUM_DAMAGE_OPERATION.OPERATION_INVALID); // bFlag = true; // break; //case MissFlag_T.FLAG_COUNTERACT: // strMsg = ChangeDamgeByRule(ENUM_DAMAGE_TYPE.DAMAGE_MISS, 0, ENUM_DAMAGE_OPERATION.OPERATION_INVALID); // bFlag = true; // break; //case MissFlag_T.FLAG_TRANSFERED: // strMsg = ChangeDamgeByRule(ENUM_DAMAGE_TYPE.DAMAGE_MISS, 0, ENUM_DAMAGE_OPERATION.OPERATION_INVALID); // bFlag = true; // break; default: break; } //m_Character.ShowTalk(strMsg); //if (bFlag) //{ // //GameProcedure.s_pUISystem.AddNewBeHitBoard(false, m_szDamage, fvPos.x, fvPos.y, 0, MOVE_STATUS ); //} }
private void DisplayDamageBoard(_DAMAGE_INFO pDamageInfo) { if (pDamageInfo == null || m_Character.GetRenderInterface() == null) { return; } CObject pMySelf = CObjectManager.Instance.getPlayerMySelf(); if (pMySelf == null) { return; } if (m_Character.GetCharacterType() == CHARACTER_TYPE.CT_MONSTER && (((CObject_PlayerNPC)m_Character).IsDisplayBoard() == false)) { return; } Vector3 fvPos = m_Character.m_pInfoBoard != null?m_Character.m_pInfoBoard.GetPosition() : Vector3.zero; uint nCasterID = pDamageInfo.m_nSenderID; uint nReceiverID = pDamageInfo.m_nTargetID; //bool bNeedDisplay = true; bool bDouble = pDamageInfo.m_bIsCriticalHit; // 是否暴击 [12/28/2010 ivan edit] ENUM_DAMAGE_TYPE isCritical = pDamageInfo.m_bIsCriticalHit ? ENUM_DAMAGE_TYPE.DAMAGE_CRITICAL : ENUM_DAMAGE_TYPE.DAMAGE_NORMAL; if (IsMySelf(nReceiverID)) { if (0 < pDamageInfo.m_nHealthIncrement) //治疗 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nHealthIncrement.ToString(), fvPos.x, fvPos.y, ENUM_DAMAGE_TYPE.DAMAGE_NORMAL, ENUM_DMG_MOVE_TYPE.MOVE_HEAL_HP); } if (0 > pDamageInfo.m_nHealthIncrement) //伤害 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nHealthIncrement.ToString(), fvPos.x, fvPos.y, ENUM_DAMAGE_TYPE.DAMAGE_NORMAL, ENUM_DMG_MOVE_TYPE.MOVE_DAMAGE_ME); } if (0 < pDamageInfo.m_nManaIncrement) //mana增加 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nManaIncrement.ToString(), fvPos.x, fvPos.y, ENUM_DAMAGE_TYPE.DAMAGE_NORMAL, ENUM_DMG_MOVE_TYPE.MOVE_HEAL_MP); } } else if (IsMySelf(nCasterID)) { if (0 > pDamageInfo.m_nHealthIncrement) //伤害 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nHealthIncrement.ToString(), fvPos.x, fvPos.y, isCritical, ENUM_DMG_MOVE_TYPE.MOVE_DAMAGE_OTHER); } } else if (IsMyPet(nCasterID)) { if (0 > pDamageInfo.m_nHealthIncrement)//伤害 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nHealthIncrement.ToString(), fvPos.x, fvPos.y, isCritical, ENUM_DMG_MOVE_TYPE.MOVE_DAMAGE_OTHER); } } else if (IsMyPet(nReceiverID)) { if (0 > pDamageInfo.m_nHealthIncrement)//伤害 { UISystem.Instance.AddNewBeHitBoard(bDouble, pDamageInfo.m_nHealthIncrement.ToString(), fvPos.x, fvPos.y, ENUM_DAMAGE_TYPE.DAMAGE_NORMAL, ENUM_DMG_MOVE_TYPE.MOVE_DAMAGE_ME); } } }
private void DoLogicEvent_Damage(_LOGIC_EVENT pLogicEvent) { _DAMAGE_INFO pDamageInfo = pLogicEvent.m_damage; switch (pDamageInfo.m_nType) { case _DAMAGE_INFO.DAMAGETYPE.TYPE_INVALID: break; case _DAMAGE_INFO.DAMAGETYPE.TYPE_EFFECT: { LogManager.Log("_DAMAGE_INFO.DAMAGETYPE.TYPE_EFFECT " + m_Character.ServerID); if (pDamageInfo.m_nImpactID != MacroDefine.INVALID_ID) { _DBC_DIRECT_IMPACT pDirectImpact = CDirectlyImpactMgr.Instance.GetDirectlyImpact((uint)pDamageInfo.m_nImpactID); if (pDirectImpact != null) { Vector3 fvPos = new Vector3(); if (m_Character.GetRenderInterface() != null && pDirectImpact.m_pszEffectLocator.Length != 0) { m_Character.GetRenderInterface().GetLocator(pDirectImpact.m_pszEffectLocator, ref fvPos); } else { fvPos = m_Character.GetPosition(); } if (pDirectImpact.m_pszEffect.Length > 0) { CObject_Effect pObjEffect = CObjectManager.Instance.NewEffect(-1); if (pObjEffect != null) { SObject_EffectInit initEffect = new SObject_EffectInit(); initEffect.m_fvPos = fvPos; initEffect.m_fvRot = new Vector3(0.0f, 0.0f, 0.0f); initEffect.m_pszEffectName = pDirectImpact.m_pszEffect; initEffect.m_bLoopEffect = false; pObjEffect.Initial(initEffect); } } if (pDirectImpact.m_pszSound.Length > 0) { fvPos = m_Character.GetPosition(); // Vector3 fvGame = new Vector3(); //if(!CGameProcedure::s_pGfxSystem.Axis_Trans(CRenderSystem::AX_GAME, fvPos, // CRenderSystem::AX_GFX, fvGame)) //{ // return; //} //CSoundSystemFMod::_PlaySoundFunc( pDirectlyImpact.m_pszSound, &fvGame.x, false ); } } } } break; case _DAMAGE_INFO.DAMAGETYPE.TYPE_HEAL_AND_DAMAGE: { LogManager.Log("_DAMAGE_INFO.DAMAGETYPE.TYPE_HEAL_AND_DAMAGE " + this.m_Character.ServerID + " pDamageInfo.m_nHealthIncrement " + pDamageInfo.m_nHealthIncrement); if (pDamageInfo.m_nHealthIncrement < 0) { this.m_Character.SetFightState(true); LogManager.Log("pDamageInfo.m_nHealthIncrement " + this.m_Character.ServerID + " CharacterLogic_Get " + m_Character.CharacterLogic_Get()); if (m_Character.CharacterLogic_Get() == ENUM_CHARACTER_LOGIC.CHARACTER_LOGIC_IDLE) { LogManager.Log("pDamageInfo.BASE_ACTION_F_BE_HIT " + this.m_Character.ServerID); m_Character.ChangeAction((int)ENUM_BASE_ACTION.BASE_ACTION_F_BE_HIT, 1.0f, false, CObject_Character.sDefaultActionFuseTime); } } // 显示伤血信息 DisplayDamageBoard(pDamageInfo); } break; case _DAMAGE_INFO.DAMAGETYPE.TYPE_DROP_BOX: { uint ObjID = (uint)pDamageInfo.m_aAttachedParams[0]; int idOwner = pDamageInfo.m_aAttachedParams[1]; float fX = pDamageInfo.m_aAttachedParams[2] / 1000.0f; float fZ = pDamageInfo.m_aAttachedParams[3] / 1000.0f; //创建ItemBox CTripperObject_ItemBox pBox = CObjectManager.Instance.NewTripperItemBox((int)ObjID); pBox.Initial(null); //设置位置 pBox.SetMapPosition(fX, fZ); //设置掉落箱的归属 pBox.SetOwnerGUID((uint)idOwner); } break; case _DAMAGE_INFO.DAMAGETYPE.TYPE_SKILL_TEXT: { // 显示未击中和免疫信息 DisplayMissImmuAndSoOn(pDamageInfo); } break; case _DAMAGE_INFO.DAMAGETYPE.TYPE_DIE: { m_Character.OnDead(true); } break; default: break; } }