Exemplo n.º 1
0
    protected override void onStarted()
    {
        // 如果该位移会打断当前技能, 那么需要将动态标记的改变应用到当前的action上.
        // 否则, 只记录标记, 保证过程中不能施放新的技能即可.
        mOwner.AddActiveFlag(ActiveFlagsDef.DisableAttack, true, InterruptSkillUsing);
        mOwner.AddActiveFlag(ActiveFlagsDef.DisableSkillUse, true, InterruptSkillUsing);
        mOwner.AddActiveFlag(ActiveFlagsDef.DisableMovement, true, true);
        mOwner.AddActiveFlag(ActiveFlagsDef.DisableRotate, true, true);

        // 特效和动作.
        SkillClientBehaviour.PlayAnimation(mOwner, AnimationName, LoopAnimation, mLoopClientBehaviours);

        SkillClientBehaviour.AddEffect2Object(mOwner, EffectID, EffectBindPoint, 0f,
                                              LoopEffect, mLoopClientBehaviours
                                              );

        base.onStarted();
    }
Exemplo n.º 2
0
    void playAnimation(object resource)
    {
        SkillClientBehaviourItem behaviour = resource as SkillClientBehaviourItem;

        SkillClientBehaviour.PlayAnimation(mOwner, behaviour.userAnimationName, behaviour.loopUserAnimation, mLoopClientBehaviours);
    }
Exemplo n.º 3
0
    /// <summary>
    /// buff开始作用. 添加属性, 动态标记等.
    /// </summary>
    protected virtual void onEnabled(bool bEnabled, SkillEffectStopReason stopReason)
    {
        // 特效
        if (bEnabled)
        {
            SkillClientBehaviour.AddEffect2Object(mOwner, mBuffRes._3DEffectID, mBuffRes._3DEffectBindpoint, 0f, mBuffRes.loop3DEffect, mClientBehaviourIdContainer);
            SkillClientBehaviour.PlayAnimation(mOwner, mBuffRes.animationName, mBuffRes.loopAnimation, mClientBehaviourIdContainer);
        }
        else
        {
            SkillClientBehaviour.RemoveAll(mOwner, mClientBehaviourIdContainer);
        }

        // 检查目标是否可以被控制, 并保存标记, 表示该buff是否对目标产生了控制.
        if ((bEnabled && mOwner.CanBeStuned()) || (!bEnabled && mStunEnabled))
        {
            enableStun(bEnabled);
            mStunEnabled = bEnabled;
        }

        if (mBuffRes.stunImmunity)
        {
            mOwner.AddActiveFlag(ActiveFlagsDef.StunImmunity, bEnabled, true);
        }

        if (mBuffRes.damageImmunity)
        {
            mOwner.AddActiveFlag(ActiveFlagsDef.DamageImmunity, bEnabled, true);
        }

        if (mBuffRes.inviolability)
        {
            mOwner.AddActiveFlag(ActiveFlagsDef.Inviolability, bEnabled, true);
        }

        if (mBuffRes.magneticEffect)
        {
            mOwner.AddActiveFlag(ActiveFlagsDef.MagneticEffect, bEnabled, true);
        }

        if (mBuffRes.strokeEffect)
        {
            mOwner.AddActiveFlag(ActiveFlagsDef.StrokeEffect, bEnabled, true);
        }

        if (mBuffRes.randEvent != uint.MaxValue)
        {
            if (bEnabled)
            {
                mOwner.AddRandEvent(mBuffRes, mAttackerAttr);
            }
            else
            {
                mOwner.RemoveRandEvent(mBuffRes, stopReason);
            }
        }

        if (bEnabled)         // mStackCount == 0.
        {
            AddStack();
            if (mBuffRes.newModelID != uint.MaxValue)
            {
                mOwner.Transform((int)mBuffRes.newModelID);
            }
            if (mBuffRes.newWeaponID != uint.MaxValue)
            {
                mOwner.ChangeWeapon((int)mBuffRes.newWeaponID);
                mOwner.AddActiveFlag(ActiveFlagsDef.DisableChangeWeaponModel, true, false);
            }

            if (mBuffRes.superNewWeaponID != uint.MaxValue)
            {
                if (mOwner is Player)
                {
                    if ((mOwner as Player).HasSuperWeapon())
                    {
                        (mOwner as Player).UnEquipSuperWeapon();
                    }

                    mLastUseWeapon = (uint)mOwner.GetMainWeaponID();
                    (mOwner as Player).SceneChangeWeapon((int)mBuffRes.superNewWeaponID);
                    mOwner.AddActiveFlag(ActiveFlagsDef.DisableChangeWeapon, true, false);
                }
                else
                {
                    GameDebug.LogError("只有玩家支持使用buff更换武器");
                }
            }

            if (mSkillTransform != null)
            {
                mOwner.SkillTransform(mSkillTransform);
            }
        }
        else
        {
            removeAllStacks();
            if (mBuffRes.newModelID != uint.MaxValue)
            {
                mOwner.UndoTransform();
            }
            if (mBuffRes.newWeaponID != uint.MaxValue && mOwner is Player)
            {
                mOwner.AddActiveFlag(ActiveFlagsDef.DisableChangeWeaponModel, false, false);
                mOwner.ChangeWeapon(mOwner.GetMainWeaponID());
            }

            if (mBuffRes.superNewWeaponID != uint.MaxValue)
            {
                if (mOwner is Player)
                {
                    mOwner.AddActiveFlag(ActiveFlagsDef.DisableChangeWeapon, false, false);
                    (mOwner as Player).SceneChangeWeapon((int)mLastUseWeapon);
                }
                else
                {
                    GameDebug.LogError("只有玩家支持使用buff更换武器");
                }
            }

            if (mSkillTransform != null)
            {
                mOwner.SkillTransform(null);
            }
        }
    }