Example #1
0
    protected void DoTrigger(int nLogicCount, int nTargetCount, int[] paTargetIDs)
    {
        SetLogicCount(nLogicCount);

        if (GetSpecialObjData() != null && GetSpecialObjData().m_lpszEffect_Active != null && GetSpecialObjData().m_lpszEffect_Active.Length > 0)
        {
            CObject_Effect pEffectObj = (CObject_Effect)(CObjectManager.Instance.NewEffect(-1));
            if (pEffectObj != null)
            {
                SObject_EffectInit initEffect = new SObject_EffectInit();
                initEffect.m_fvPos         = GetPosition();
                initEffect.m_fvRot         = new UnityEngine.Vector3(0.0f, 0.0f, 0.0f);
                initEffect.m_pszEffectName = GetSpecialObjData().m_lpszEffect_Active;
                initEffect.m_bLoopEffect   = false;
                pEffectObj.Initial(initEffect);
            }
        }


        // 有子弹
        if (GetSpecialObjData() != null && GetSpecialObjData().m_nBulletID != MacroDefine.INVALID_ID)
        {
            SObject_BulletInit initBullet = new SObject_BulletInit();
            initBullet.m_fvPos = GetPosition();

            UnityEngine.Vector3 fvRot = UnityEngine.Vector3.zero;
            fvRot.y                      = GetFaceDir();
            initBullet.m_fvRot           = fvRot;
            initBullet.m_idSend          = (uint)ServerID;
            initBullet.m_nSendLogicCount = GetLogicCount();
            initBullet.m_nBulletID       = m_pSpecialObjData.m_nBulletID;
            initBullet.m_bSingleTarget   = true;
            initBullet.m_fvTargetPos     = new UnityEngine.Vector3(-1.0f, -1.0f, -1.0f);
            for (int i = 0; i < nTargetCount; i++)
            {
                initBullet.m_idTarget = paTargetIDs[i];
                CObject_Bullet pBullet = (CObject_Bullet)CObjectManager.Instance.NewBullet(-1);
                pBullet.Initial(initBullet);
            }
        }
        else
        {
            CObject_Character pCharacter = null;
            for (int i = 0; i < nTargetCount; i++)
            {
                int idCharacter = paTargetIDs[i];
                pCharacter = (CObject_Character)(CObjectManager.Instance.FindServerObject(idCharacter));
                if (pCharacter != null)
                {
                    pCharacter.ShowLogicEvent(ServerID, nLogicCount, true);
                }
            }
        }
    }
Example #2
0
    public override void Initial(object pInit)
    {
        SObject_EffectInit pEffectInit = (SObject_EffectInit)(pInit);

        if (pEffectInit != null)
        {
            if (pEffectInit.m_pszEffectName.Length != 0)
            {
                ChangEffect(pEffectInit.m_pszEffectName, pEffectInit.m_bLoopEffect);
            }
        }
        m_fEffectTime = 0;
        base.Initial(pInit);
    }
    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;
        }
    }