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(); }
void playAnimation(object resource) { SkillClientBehaviourItem behaviour = resource as SkillClientBehaviourItem; SkillClientBehaviour.PlayAnimation(mOwner, behaviour.userAnimationName, behaviour.loopUserAnimation, mLoopClientBehaviours); }
/// <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); } } }