Example #1
0
 public void InitDotResources(GameObject continueFX, AudioClip continueAC, GameObject effectFX, AudioClip effectAC, GameObject endFX, AudioClip endAC)
 {
     effectContinue      = EffectPlayer.PlayOnTransform(continueFX, Target.BeAtkPoint);
     audioContinue       = AudioSystem.Instance.PlayOnTransform(continueAC, Target.BeAtkPoint);
     objContinueEffectFX = effectFX;
     acContinueEffectSE  = effectAC;
     objEndEffectFX      = endFX;
     acEndEffectSE       = endAC;
 }
Example #2
0
    protected CastResult OnExucete()
    {
        if (SkillStatus == Status.Casting)
        {
            return(CastResult.IsCasting);
        }
        if (InCD)
        {
            return(CastResult.InCD);
        }
        CastResult result = PreExecute();

        if (result != CastResult.Success)
        {
            return(result);
        }
        result = CanExecute();
        if (result != CastResult.Success)
        {
            return(result);
        }
        if (!IsInRange())
        {
            return(CastResult.OutOfRange);
        }
        for (int i = 0, length = SkillCost.Length; i < length; ++i)
        {
            if (!Master.HasSkillEnergy(SkillCost[i].type, SkillCost[i].value))
            {
                return(CastResult.NoEnergy);
            }
        }

        ClearCastObjs();
        Master.OnSkillStart(this);
        if (CastTime > 0)
        {
            SkillStatus  = Status.Casting;
            fTimeCounter = 0;
            if (CastFX)
            {
                effectCastFx = EffectPlayer.PlayOnTransform(CastFX, CastFXPoint ? CastFXPoint : transform);
            }
            if (CastSE)
            {
                castPlayer = AudioSystem.Instance.PlayOnTransform(CastSE, CastFXPoint ? CastFXPoint : transform);
            }
            Master.Role.PlayAction(CastActionName, 0.1f);
        }
        else
        {
            PrepareCast();
        }
        return(result);
    }
Example #3
0
    protected override void OnExecute(InteractiveObj self, InteractiveObj target)
    {
        target.DoDamage(new Damage(EffectType, self.CalAtkDamage(EffectBaseValue)), self);
        EffectPlayer.PlayOnTransform(EffectFX, target.BeAtkPoint);
        AudioSystem.Instance.PlayOnTransform(EffectSE, target.BeAtkPoint);

        Debuff_Dot dot = new Debuff_Dot();

        dot.Init(nBuffOrder, nDuration, BuffBase.Type.Debuff, self, target);
        dot.InitDot(nFirstEffectTime, nDuration, EffectType, self.CalAtkDamage(nEffectDamage), self.CalAtkDamage(nEndDamage));
        dot.InitDotResources(objContinueFX, acContinueSE, objContinueEffectFX, acContinueEffectSE, objEndEffectFX, acEndEffectSE);
        target.AddBuff(dot);
    }
Example #4
0
 public void Execute(InteractiveObj self, InteractiveObj target)
 {
     GameClient.Instance.NextTick(() =>
     {
         if (!target)
         {
             return;
         }
         EffectPlayer.PlayOnTransform(EffectFX, target.BeAtkPoint);
         AudioSystem.Instance.PlayAtPos(EffectSE, target.BeAtkPoint.position);
         OnExecute(self, target);
     }, EffectDelay / 1000f);
 }
Example #5
0
 public override void DoUpdate(float deltaTime)
 {
     if (RaimainingTime < 0)
     {
         return;
     }
     if ((RaimainingTime -= (int)deltaTime * 1000) < nNextEffectTime)
     {
         Target.DoDamage(new Damage(eEffectType, nDamage), Master);
         nNextEffectTime = RaimainingTime - nEffectInterval;
         EffectPlayer.PlayOnTransform(objContinueEffectFX, Target.BeAtkPoint);
         AudioSystem.Instance.PlayOnTransform(acContinueEffectSE, Target.BeAtkPoint);
     }
 }
Example #6
0
 protected override void OnRemove(bool isDead)
 {
     if (effectContinue)
     {
         effectContinue.Recycle();
     }
     if (audioContinue)
     {
         audioContinue.Recycle();
     }
     effectContinue = null;
     audioContinue  = null;
     Target.DoDamage(new Damage(eEffectType, nEndDamage), Master);
     EffectPlayer.PlayOnTransform(objEndEffectFX, Target.BeAtkPoint);
     AudioSystem.Instance.PlayOnTransform(acEndEffectSE, Target.BeAtkPoint);
 }
Example #7
0
 protected virtual void Settlement(InteractiveObj target)
 {
     if (!target)
     {
         return;
     }
     if (HitFX)
     {
         EffectPlayer.PlayOnTransform(HitFX, target.BeAtkPoint);
     }
     if (HitSE)
     {
         AudioSystem.Instance.PlayAtPos(HitSE, target.BeAtkPoint.position);
     }
     SkillEffectBase[] effects = GetComponentsInChildren <SkillEffectBase>(true);
     for (int i = 0, length = effects.Length; i < length; ++i)
     {
         effects[i].Execute(Master, target);
     }
 }
Example #8
0
    protected override CastResult OnCast()
    {
        for (int i = 0, length = Random.Range(MissleMinCount, MissleMaxCount + 1); i < length; ++i)
        {
            if (ReleaseFX)
            {
                EffectPlayer.PlayOnTransform(ReleaseFX, ReleaseFXPoint);
            }
            if (ReleaseSE)
            {
                AudioSystem.Instance.PlayOnTransform(ReleaseSE, ReleaseFXPoint);
            }
            Missle missle = Instantiate(MisslePrefab, transform.position, transform.rotation).GetOrAddComponent <Missle>();
            switch (LockType)
            {
            case SkillLockType.Position:
                switch (MissleType)
                {
                case Type.Bullet:
                    missle.InitBullet(TargetPos, MissileSpeed, Settlement);
                    break;

                default:
                    missle.Init(TargetPos, MissileSpeed, Settlement);
                    break;
                }
                break;

            case SkillLockType.NoLock:
                switch (MissleType)
                {
                case Type.Bullet:
                    //missle.InitBullet(TargetPos, MissileSpeed, Settlement);
                    break;

                default:
                    missle.gameObject.AddComponent <SphereCollider>().isTrigger = true;
                    missle.gameObject.AddComponent <Rigidbody>().isKinematic    = true;
                    missle.InitFlyFront(Master.transform.forward, MissileSpeed, SkillMaxRange, (hitObj, missleScript) =>
                    {
                        if (hitObj)
                        {
                            InteractiveObj target = hitObj.GetComponent <InteractiveObj>();
                            if (target)
                            {
                                if (target.IsAlive && target.IsEnemy(Master.Camp))
                                {
                                    Settlement(target);
                                    Destroy(missleScript.gameObject);
                                }
                                return;
                            }
                            Q_SceneObj sceneObj = hitObj.GetComponent <Q_SceneObj>();
                            if (sceneObj)
                            {
                                switch (sceneObj.objType)
                                {
                                case Q_SceneObj.Type.Skill:
                                case Q_SceneObj.Type.Item:
                                case Q_SceneObj.Type.NeedItem:
                                    break;

                                default:
                                    return;
                                }
                            }
                        }
                        if (HitFX)
                        {
                            EffectPlayer.PlayAtPos(HitFX, missleScript.transform.position);
                        }
                        if (HitSE)
                        {
                            AudioSystem.Instance.PlayAtPos(HitSE, missleScript.transform.position);
                        }
                        missleScript.Alive = false;
                        Destroy(missleScript.gameObject);
                    });
                    break;
                }
                break;

            default:
                if (Target)
                {
                    missle.Init(Target.transform, MissileSpeed, (tsf) => Settlement(tsf.GetComponent <InteractiveObj>()));
                }
                else
                {
                    missle.Init(TargetPos, MissileSpeed, Settlement);
                }
                break;
            }
            missle.SetLifeTime(MissleLifeTime);
            if (FlySE)
            {
                AudioSystem.Instance.PlayOnTransform(FlySE, missle.transform);
            }
        }
        return(CastResult.Success);
    }