Beispiel #1
0
    public GameObject AddAttackEffect(string id, GameObject target, SkillNode skillNode, Transform emissionPoint = null)
    {
        string idIndex = id;

        if (skillNode != null && skillNode.site == 0 &&
            (cs.mCurMobalId == MobaObjectID.HeroXiaohei || cs.mCurMobalId == MobaObjectID.HeroChenmo))
        {
            SkillBuff buff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).Find
                                 (a => (SkillBuffType)a.id == SkillBuffType.Talent && a.attacker == cs);
            if (buff != null)
            {
                idIndex += "_1";
            }
        }
        else if (skillNode != null && skillNode.site == 1 && cs.mCurMobalId == MobaObjectID.HeroLuosa)
        {
            SkillBuff buff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).Find
                                 (a => (SkillBuffType)a.id == SkillBuffType.SkillTalent && a.attacker == cs);
            idIndex += buff != null ? "_2_1" : "_1_1";
        }
        GameObject effect_go = BattleUtil.AddEffectTo(GetEffectResourceRoot() + idIndex, transform, id, skillNode, cs);

        if (effect_go != null)
        {
            effect_go.transform.parent = nip.transform;
            if (emissionPoint != null)
            {
                effect_go.transform.position = emissionPoint.position;
            }
        }
        return(effect_go);
    }
Beispiel #2
0
    public void SetBuffActive(CharacterState target, int effectPos)
    {
        if (target.Invisible && target.groupIndex == 0)
        {
            return;
        }
        List <SkillBuff> buffs = SkillBuffManager.GetInst().GetSkillBuffListByCs(target);

        buffs.Sort(SortSkillBuff);
        SkillBuff mExitBuff = buffs.Find(a => a.node.effectPos == effectPos && a.buffGo != null && a.buffGo.gameObject.activeSelf);
        SkillBuff mCurBuff  = buffs.Find(a => a.node.effectPos == effectPos && a.buffGo != null && !a.buffGo.gameObject.activeSelf);

        if (mExitBuff != null)
        {
            if (mCurBuff != null)
            {
                if (buffs.IndexOf(mCurBuff) > buffs.IndexOf(mExitBuff) && mCurBuff.id != mExitBuff.id)
                {
                    mExitBuff.buffGo.gameObject.SetActive(false);
                    mCurBuff.buffGo.gameObject.SetActive(true);
                }
            }
        }
        else
        {
            if (mCurBuff != null)
            {
                mCurBuff.buffGo.gameObject.SetActive(true);
            }
        }
    }
Beispiel #3
0
    public List <SkillBuff> AddSpecialBuffs(CharacterState cs)
    {
        List <SkillBuff> mSpecialBuffs = new List <SkillBuff>();

        for (int i = 0; i < specialBuffs.Length; i++)
        {
            if (specialBuffs[i] is Array)
            {
                Array o = (Array)specialBuffs[i];
                if (o != null && o.Length == 3)
                {
                    object a       = o.GetValue(0);
                    long   mBuffId = long.Parse(a.ToString());
                    if ((SkillBuffType)mBuffId == SkillBuffType.Summon)
                    {
                        continue;
                    }
                    float     mBuffValue = float.Parse(o.GetValue(2).ToString());
                    SkillBuff mTempBuff  = SkillBuffManager.GetInst().AddBuffs(mBuffValue, new object[2] {
                        a, o.GetValue(1)
                    }, cs, cs, this, cs.CharData.lvl, false);
                    mSpecialBuffs.Add(mTempBuff);
                }
            }
        }
        return(mSpecialBuffs);
    }
Beispiel #4
0
    void ResultDizziness()
    {
        object obj = new object[2] {
            SkillBuffType.Dizzy, 3
        };

        SkillBuffManager.GetInst().AddBuffs(20, obj, player, null);
    }
Beispiel #5
0
    void ResultSpeedUp()
    {
        object obj = new object[2] {
            SkillBuffType.Fast, 4
        };

        SkillBuffManager.GetInst().AddBuffs(SpeedUp, obj, player, null);
    }
Beispiel #6
0
 public void RemoveBuffEffect()
 {
     if (buffGo != null)
     {
         GameObject.Destroy(buffGo);
     }
     SkillBuffManager.GetInst().SetBuffActive(target, node.effectPos);
 }
Beispiel #7
0
 public static SkillBuffManager GetInst()
 {
     if (inst == null)
     {
         inst = new SkillBuffManager();
     }
     return(inst);
 }
Beispiel #8
0
    void ResultSpeedDown()
    {
        object obj = new object[2] {
            SkillBuffType.Slow, 4
        };

        SkillBuffManager.GetInst().AddBuffs(SpeedDown, obj, player, null);
    }
Beispiel #9
0
 //隐身buff普攻或者释放技能隐身buff消失
 public void BrokenInvisibility(CharacterState cs)
 {
     if (cs.Invisible)
     {
         List <SkillBuff> mCurSkillBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => (SkillBuffType)a.id == SkillBuffType.Invisible);
         for (int i = 0; i < mCurSkillBuff.Count; i++)
         {
             SkillBuffManager.GetInst().RemoveCalculateCurTargetProp(cs, mCurSkillBuff[i]);
         }
     }
 }
Beispiel #10
0
 private void SetSkillBtnCD(bool b)
 {
     if (!b)
     {
         mExistBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(target).Find(a => a != this && (SkillBuffType)a.id == SkillBuffType.Silence);
     }
     if (target == CharacterManager.playerCS)
     {
         mFightTouch.ChangeAllCDTo(b ? b : !(mExistBuff == null && GameLibrary.Instance().CanControlSwitch(target.pm)));
     }
 }
Beispiel #11
0
    public override void Reverse(CharacterState cs, float mCurValue)
    {
        base.Reverse(cs, mCurValue);
        SkillBuff mPetrifiedBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(target).Find(a => a != this && a.id == id);

        if (mPetrifiedBuff == null)
        {
            SetSkinedPetrified(false);
            cs.pm.ani.speed = cs.animSpeed;
        }
    }
Beispiel #12
0
 public override void Reverse(CharacterState cs, float mCurValue)
 {
     base.Reverse(cs, mCurValue);
     if (mCurRolePart.Count > 0)
     {
         List <SkillBuff> mCurSkillBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => a != this && a.node.type == node.type && a.node.buffActionType == node.buffActionType &&
                                                                                                      attacker.mCurMobalId == MobaObjectID.HeroLuosa && target.mCurMobalId == MobaObjectID.HeroLuosa);
         if (mCurSkillBuff.Count == 0)
         {
             cs.SetPartEffectActive(cs, mCurRolePart, false);
         }
     }
 }
Beispiel #13
0
 public override void Reverse(CharacterState cs, float mCurValue)
 {
     base.Reverse(cs, mCurValue);
     Formula.AddAttrWith(ref cs.CharData.buffAttrs, AttrType.suck_blood, -1f * mCurValue);
     if (mCurRolePart.Count > 0)
     {
         List <SkillBuff> mCurSkillBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => a != this && a.node.type == node.type && a.node.buffActionType == node.buffActionType &&
                                                                                                      attacker.mCurMobalId == MobaObjectID.HeroShenling && target.mCurMobalId == MobaObjectID.HeroShenling);
         if (mCurSkillBuff.Count == 0)
         {
             cs.SetPartEffectActive(cs, mCurRolePart, false);
         }
     }
 }
Beispiel #14
0
 public bool CheckInvisiblityCanReveal(CharacterState cs)
 {
     if (cs.Invisible)
     {
         List <SkillBuff> mCurSkillBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => (SkillBuffType)a.id == SkillBuffType.Invisible);
         if (mCurSkillBuff.Count > 0)
         {
             return((mCurSkillBuff[mCurSkillBuff.Count - 1] as BF_Invisible).CanReveal);
         }
         else
         {
             return(false);
         }
     }
     return(false);
 }
Beispiel #15
0
 public void SetControlSwitch(bool b)
 {
     if (b)
     {
         canControlSwitch++;
     }
     else
     {
         canControlSwitch--;
     }
     if (cs == CharacterManager.playerCS)
     {
         SkillBuff mExistBuff = null;
         if (!b)
         {
             mExistBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).Find(a => (SkillBuffType)a.id == SkillBuffType.Silence);
         }
         FightTouch._instance.ChangeAllCDTo(b ? b: !(mExistBuff == null && GameLibrary.Instance().CanControlSwitch(this)));
     }
 }
Beispiel #16
0
    public override void Excute(CharacterState cs, float mCurValue)
    {
        base.Excute(cs, mCurValue);
        //查询所有的减益效果
        List <SkillBuff> mAllDebuff = SkillBuffManager.GetInst().GetAllDebuffByCs(cs);

        for (int i = mAllDebuff.Count - 1; i >= 0; i--)
        {
            SkillBuff mTempBuff = mAllDebuff[i];
            if (mTempBuff.node.type == BuffType.DelayEffective)
            {
                SkillBuffManager.GetInst().RemoveBuffFrom(mTempBuff, mTempBuff.target);
                mTempBuff.RemoveBuffEffect();
            }
            else
            {
                SkillBuffManager.GetInst().RemoveCalculateCurTargetProp(mTempBuff.target, mTempBuff);
            }
            SkillBuffManager.GetInst().RemoveContinousSkillBuff(mTempBuff);
        }
    }
Beispiel #17
0
    void AddBuffEffect(string path, Transform parent = null)
    {
        if (buffGo != null)
        {
            GameObject.Destroy(buffGo);
        }
        GameObject prefab = Resources.Load(path) as GameObject;

        if (prefab != null)
        {
            buffGo = GameObject.Instantiate(prefab);
            buffGo.transform.parent        = parent;
            buffGo.transform.localPosition = Vector3.zero;
            buffGo.transform.localScale    = Vector3.one;
            buffGo.SetActive(false);
            SkillBuffManager.GetInst().SetBuffActive(target, node.effectPos);
        }
        else
        {
            buffGo = null;
        }
    }
Beispiel #18
0
    IEnumerator Restart()
    {
        for (int i = 0; i < agents.size; i++)
        {
            SkillBuffManager.GetInst().ClearBuffsFrom(agents[i]);
            agents[i].DeleteHpAndHud(0f, 0f);
        }
        npcList.Clear();
        heroIcon.Clear();
        ClearAllCs();

        Destroy(CharacterManager.player);
        for (int i = 0; i < partnerPos.Length; i++)
        {
            partnerPos[i].DestroyChildren();
        }
        yield return(new WaitForSeconds(0.1f));

        InitScene();
        endBattle = false;
        round++;
    }
Beispiel #19
0
 public void SetCsInvisible(CharacterState cs, bool b, SkinnedMeshRenderer[] skinned)
 {
     if (b)
     {
         SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).ForEach(a =>
         {
             if (a.buffGo != null)
             {
                 a.buffGo.gameObject.SetActive(false);
             }
         });
     }
     else
     {
         for (int i = 0; i < 3; i++)
         {
             SkillBuffManager.GetInst().SetBuffActive(cs, i);
         }
     }
     for (int i = 0; i < skinned.Length; i++)
     {
         if (skinned[i] != null)
         {
             skinned[i].enabled = !b;
         }
     }
     if (cs == CharacterManager.playerCS && CharacterManager.instance.redCircle != null && CharacterManager.instance.redCircle.gameObject.activeSelf)
     {
         CharacterManager.instance.redCircle.gameObject.SetActive(!b);
     }
     if (cs.mShadowTrans != null)
     {
         cs.mShadowTrans.gameObject.SetActive(!b);
     }
     cs.SetPartEffectActive(cs, cs.mShowPart, !b);
     cs.SetHpBarEnable(!b);
 }
Beispiel #20
0
 public override void Reverse(CharacterState cs, float mCurValue)
 {
     base.Reverse(cs, mCurValue);
     if (cs != null && !cs.isDie)
     {
         for (int i = 0; i < talentBuff.Count; i++)
         {
             SkillBuffManager.GetInst().AddBuffs(talentBuff[i].baseValue,
                                                 new object[2] {
                 talentBuff[i].id, talentBuff[i].last
             }, cs, attacker, talentBuff[i].skillNode, talentBuff[i].lvl);
             if (talentBuff[i].baseValue != 0)
             {
                 int hpResult = GameLibrary.Instance().CalcSkillDamage(talentBuff[i].baseValue, node.damageType, talentBuff[i].lvl, cs, attacker);
                 cs.Hp(hpResult, cs.state == Modestatus.Player ? HUDType.DamagePlayer : HUDType.DamageEnemy, showHud);
             }
             if (prefab != null)
             {
                 GameObject hitGo = NGUITools.AddChild(cs.mHitPoint == null ? cs.gameObject : cs.mHitPoint.gameObject, prefab);
                 GameObject.Destroy(hitGo, 1.5f);
             }
         }
     }
 }
Beispiel #21
0
    /// <summary>
    /// 通过技能类型分类
    /// </summary>
    /// <param name="mCurSkillNode"></param>
    /// <param name="go"></param>
    /// <returns></returns>
    public EffectTrackBase SetSkillCategory(SkillNode mCurSkillNode, GameObject go)
    {
        if (mCurSkillNode == null)
        {
            return(null);
        }
        SkillCastType type = mCurSkillNode.skill_type;

        EffectTrackBase[] effectBase = go.GetComponents <EffectTrackBase>();
        for (int i = 0; i < effectBase.Length; i++)
        {
            Destroy(effectBase[i]);
        }
        EffectTrackBase et = null;

        switch (type)
        {
        case SkillCastType.MeleeEffect:
            et             = go.AddComponent <EffectMelee>();
            et.distance    = mCurSkillNode.dist;
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.CastSkill:
            et             = go.AddComponent <EffectMonomer>();
            et.destoryTime = mCurSkillNode.max_fly / mCurSkillNode.flight_speed;
            break;

        case SkillCastType.FlyEffect:
            et             = go.AddComponent <FlyPropUnit>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.BlinkSkill:
            et = go.AddComponent <EffectBlink>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.FrontSprintSkill:
            et             = go.AddComponent <EffectForward>();
            et.destoryTime = mCurSkillNode.max_fly / mCurSkillNode.flight_speed;
            et.distance    = mCurSkillNode.aoe_long;
            if (cs.mCurMobalId == MobaObjectID.HeroXiaoxiao)
            {
                SkillBuff mGrowBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).Find(a => a.id == (long)SkillBuffType.Grow);
                et.distance += mGrowBuff == null ? 0 : et.distance * 0.4f;
            }
            if (mCurSkillNode.efficiency_time != 0)
            {
                et.efficiency_time = mCurSkillNode.efficiency_time;
            }
            break;

        case SkillCastType.ShockWaveSkill:
            et                 = go.AddComponent <EffectStraightFly>();
            et.destoryTime     = mCurSkillNode.flight_speed == 0 ? mCurSkillNode.efficiency_time : mCurSkillNode.max_fly / mCurSkillNode.flight_speed;
            et.efficiency_time = mCurSkillNode.efficiency_time;
            et.distance        = mCurSkillNode.aoe_long;
            break;

        case SkillCastType.TrackSkill:
            et = go.AddComponent <EffectTrack>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.CenterSkill:
            et = go.AddComponent <EffectAOECenter>();
            if (mCurSkillNode.aoe_long != 0)
            {
                (et as EffectAOECenter).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe;
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.TrapSkill:
            break;

        case SkillCastType.SummonSkill:
            et = go.AddComponent <EffectSummon>();
            break;

        case SkillCastType.AoeSKill:
            et = go.AddComponent <EffectAOE>();
            if (mCurSkillNode.aoe_long != 0)
            {
                (et as EffectAOE).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe;
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.LinkSkill:
            et             = go.AddComponent <EffectLink>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            et.distance    = mCurSkillNode.aoe_long;
            break;

        case SkillCastType.ToSelfCenterSkill:
            et = go.AddComponent <EffectCircle>();
            if (mCurSkillNode.aoe_long != 0)
            {
                (et as EffectCircle).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe;
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.ChainSkill:
            et             = go.AddComponent <EffectChain>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.Boom:
            et = go.AddComponent <ThrowEffect>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.Bounce:
            et = go.AddComponent <EffectBounce>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.MultiTrackSkill:
            et = go.AddComponent <EffectTrack>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.MoveShrinkSkill:
            et = go.AddComponent <EffectMoveDiffusionShrink>();
            break;

        case SkillCastType.BurrowSkill:
            et = go.AddComponent <EffectBurrow>();
            if (mCurSkillNode.aoe_long != 0)
            {
                (et as EffectBurrow).aoeType = mCurSkillNode.aoe_wide == 0 ? AoeType.CircleAoe : AoeType.RectAoe;
                et.distance = mCurSkillNode.aoe_long;
            }
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.JumpChopSkill:
            et             = go.AddComponent <EffectJumpChop>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            et.distance    = mCurSkillNode.aoe_long;
            break;

        case SkillCastType.MultiBounce:
            et = go.AddComponent <EffectMultiBounce>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.GenerateObstacle:
            et             = go.AddComponent <EffectGenerateObstacle>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.DiffuseSkill:
            et             = go.AddComponent <EffectDiffuse>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.MultiTractionSkill:
            et = go.AddComponent <EffectTraction>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        case SkillCastType.LaunchDiffuseMeterSkill:
            et             = go.AddComponent <EffectLaunchDiffuseMeter>();
            et.destoryTime = mCurSkillNode.efficiency_time;
            break;

        case SkillCastType.SnakeSteerSkill:
            et = go.AddComponent <EffectSnakeSteer>();
            if (mCurSkillNode.aoe_long != 0)
            {
                et.distance = mCurSkillNode.aoe_long;
            }
            break;

        default:
            break;
        }
        return(et);
    }
Beispiel #22
0
 public virtual void Init()
 {
     cd = CDTimer.GetInstance().AddCD(last, (int c, long cid) => SkillBuffManager.GetInst().RemoveCalculateCurTargetProp(target, this));
     AddBuffEffect(GameLibrary.Effect_Buff + node.effect, GetBuffParent());
 }
Beispiel #23
0
 // 恢复到中buff之前的状态
 public virtual void Reverse(CharacterState cs, float mCurValue)
 {
     SkillBuffManager.GetInst().RemoveBuffFrom(this, target);
     RemoveBuffEffect();
     //Debug.Log("Reverse " + id);
 }
Beispiel #24
0
    public void Skill(int index)
    {
        if (cs.isDie || !CanSkillState())
        {
            return;
        }
        //技能延时buff释放技能buff生效
        List <SkillBuff> mCurSkillBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => a.node.type == BuffType.DelayEffective && a.node.buffActionType == buffActionType.skill);

        for (int i = 0; i < mCurSkillBuff.Count; i++)
        {
            SkillBuffManager.GetInst().RemoveCalculateCurTargetProp(cs, mCurSkillBuff[i]);
        }
        //if (index == 4)
        //{
        //    AngerPoint._instance.ChangePoint(-(cs.mCurSkillNode == null ? 2 : cs.mCurSkillNode.energy));
        //}
        GameLibrary.Instance().BrokenInvisibility(cs);
        AddPassiveBuff(index);
        if (gameObject == CharacterManager.player)
        {
            uint keyId = 0;
            if (cs.attackTarget != null)
            {
                if (cs != null)
                {
                    keyId = cs.keyId;
                }
            }
            ClientSendDataMgr.GetSingle().GetWalkSend().SendAttack(keyId, index + 3);
            //Debug.LogError( "~~~~~~~~~~~~~~~~~~~~~发送技能攻击" );
        }
        if (GameLibrary.Instance().CheckModelIsBoss006(cs) && index == 3)
        {
            transform.position = cs.attackTarget.transform.position;
        }
        if ((GameLibrary.Instance().CheckModelIsBoss006(cs) && index == 2))
        {
            canSkill  = false;
            canAttack = false;
            ++mCurSkillTime;
            SetNoAnimatorSkill(index);
            Invoke("ForceSkill", 1.0f);
        }
        else if ((cs.mCurMobalId == MobaObjectID.HeroShangjinlieren && index == 2) ||
                 (cs.mCurMobalId == MobaObjectID.HeroXiaohei && index == 3) ||
                 (cs.mCurMobalId == MobaObjectID.HeroHuonv && index == 1) ||
                 (cs.mCurMobalId == MobaObjectID.HeroChenmo && index == 2) ||
                 (cs.mCurMobalId == MobaObjectID.HeroMeidusha && index == 3) ||
                 (cs.mCurMobalId == MobaObjectID.HeroShenling && index == 3) ||
                 (cs.mCurMobalId == MobaObjectID.HeroLuosa && index == 3))
        {
            SetNoAnimatorSkill(index);
        }
        else
        {
            SetSkillAnimator(index);
        }
        SkillNode mCurSkillNode = GameLibrary.Instance().GetCurrentSkillNodeByCs(cs, index);

        if (GameLibrary.Instance().CheckNotHeroBoss(cs) && cs.attackTarget != null)
        {
            cs.SetForward();
        }
        else
        {
            cs.AttackSetForward(mCurSkillNode);
        }
        if (GameLibrary.Instance().CheckNotHeroBoss(cs))
        {
            if (mCurSkillNode != null && mCurSkillNode.alertedType != 0)
            {
                EffectBossWarn bossWarn = NGUITools.AddMissingComponent <EffectBossWarn>(gameObject);
                bossWarn.Init(mCurSkillNode, null, transform, null);
            }
        }
        RandomPlayDialogMusic(mSkillDlgRatio);
    }
Beispiel #25
0
 void Update()
 {
     if (attackerCs != null && (attackerCs.isDie || !GameLibrary.Instance().CanControlSwitch(attackerCs.pm)))
     {
         //打断声音
         AudioController.Instance.StopEffectSound(attackerCs);
         attackerCs.pm.ReachTarget(true);
         Destroy(gameObject);
         return;
     }
     if (mCurSkillNode.target == TargetState.Need)
     {
         if (transform != null && attackerTrans != null)
         {
             transform.position = attackerTrans.position;
         }
         if (mHitTargetCs == null)
         {
             attackerCs.pm.ReachTarget(true);
             Destroy(gameObject);
             return;
         }
         if (!isReachTarget)
         {
             attackerCs.transform.LookAt(mHitTargetCs.transform);
             if (Vector3.Distance(attackerCs.transform.position, mHitTargetCs.transform.position) <= GetTargetRadius(mHitTargetCs))
             {
                 if (attackerCs.mCurMobalId == MobaObjectID.HeroLuosa && mCurSkillNode.site == 1)
                 {
                     SkillBuff buff = SkillBuffManager.GetInst().GetSkillBuffListByCs(attackerCs).Find
                                          (a => (SkillBuffType)a.id == SkillBuffType.SkillTalent && a.attacker == attackerCs);
                     string     idIndex   = buff != null ? "_2_2" : "_1_2";
                     GameObject effect_go = BattleUtil.AddEffectTo(attackerCs.emission.GetEffectResourceRoot() + "skill" + mCurSkillNode.site + idIndex, transform);
                     attackerCs.pm.ReachTarget(true);
                     if (effect_go != null)
                     {
                         effect_go.transform.parent = attackerCs.emission.nip.transform;
                         effect_go.gameObject.SetActive(true);
                         Destroy(effect_go, 2f);
                     }
                 }
                 mCurMonsters.Clear();
                 mCurMonsters.Add(mHitTargetCs.gameObject);
                 Hit(mCurMonsters);
                 isReachTarget = true;
                 Destroy(gameObject);
                 return;
             }
             Vector3 dir = mHitTargetCs.transform.position - attackerCs.transform.position;
             attackerCs.pm.FastMove(Time.deltaTime * mCurSkillNode.flight_speed * dir.normalized, mIgnoreTerrain);
         }
     }
     else
     {
         mCurDeltaTime += Time.deltaTime;
         if (attackerTrans != null && mCurDeltaTime <= destoryTime)
         {
             if (transform != null && attackerTrans != null)
             {
                 transform.position = attackerTrans.position;
             }
             if (attackerCs != null && attackerCs.pm != null)
             {
                 attackerCs.pm.FastMove(transform.forward * Time.deltaTime * mCurSkillNode.flight_speed, mIgnoreTerrain);
             }
             if (!isContinue)
             {
                 GetCommonDamageRange(pos);
                 Hit(mCurMonsters);
             }
             if (attackerCs.mCurMobalId == MobaObjectID.HeroXiongmao && mCurSkillNode.site == 2)
             {
                 for (int i = 0; i < mCurMonsters.Count; i++)
                 {
                     CharacterState mCurTargetCs = mCurMonsters[i].GetComponent <CharacterState>();
                     if (mCurTargetCs != null && !mCurTargetCs.isDie && !mCurTargetCs.Invincible && mCurTargetCs.RecieveControl && !GameLibrary.Instance().CheckNotHeroBoss(mCurTargetCs))
                     {
                         mCurMonsters[i].AddMissingComponent <HitReAction>().Init(mCurTargetCs, (mCurSkillNode.max_fly - mCurSkillNode.flight_speed * mCurDeltaTime) / mCurSkillNode.flight_speed,
                                                                                  attackerCs.transform.forward, mCurSkillNode.flight_speed);
                     }
                 }
             }
         }
         else
         {
             DetectionNavMesh();
         }
     }
 }
Beispiel #26
0
    public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (GameLibrary.IsMajorOrLogin())
        {
            return;
        }
        base.OnStateExit(animator, stateInfo, layerIndex);

        GetSkillNodeByStateInfo(stateInfo);
        if (!mIsTouchRun)
        {
            pm.canMoveSwitch--;
        }
        OnStateExitHandle();
        if (cs.mCurMobalId == MobaObjectID.HeroJiansheng)
        {
            if (skillIndex == 4)
            {
                if (mCurSkillNode != null)
                {
                    GameLibrary.Instance().SetCsAttackTargetByChoseTarget(mCurSkillNode, cs);
                }
                if (cs.attackTarget != null && cs.attackTarget.tag != Tag.tower && pm.mCurSkillTime < 5)
                {
                    pm.mCurSkillTime++;
                    pm.SetSkillAnimator(4);
                }
                else
                {
                    pm.mCurSkillTime = 0;
                    pm.canSkill      = true;
                    pm.canAttack     = true;
                }
            }
            else
            {
                pm.canSkill  = true;
                pm.canAttack = true;
                if (skillIndex == 1)
                {
                    pm.canMoveSwitch++;
                }
                else if (skillIndex == 3)
                {
                    if (pm.isTriggerPassive)
                    {
                        pm.isTriggerPassive = false;
                    }
                }
            }
        }
        else
        {
            pm.canSkill  = true;
            pm.canAttack = true;
            if (cs.mCurMobalId == MobaObjectID.HeroHuanci)
            {
                if (skillIndex == 4)
                {
                    pm.canMoveSwitch++;
                }
            }
            else if (cs.mCurMobalId == MobaObjectID.HeroXiongmao)
            {
                if (skillIndex == 1)
                {
                    pm.canMoveSwitch++;
                }
            }
            else if (GameLibrary.Instance().CheckModelIsBoss006(cs))
            {
                if (skillIndex == 1)
                {
                    if (!pm.mIsHangIn && !cs.isDie)
                    {
                        pm.canMoveSwitch++;
                        pm.canAttackSwitch++;
                        pm.nav.enabled         = false;
                        cs.Invincible          = true;
                        pm.mIsHangIn           = true;
                        cs.mOriginPos          = cs.transform.position;
                        cs.transform.position += Vector3.up * 5f;
                    }
                }
                else if (skillIndex == 3)
                {
                    if (pm.mIsHangIn)
                    {
                        pm.canMoveSwitch--;
                        pm.canAttackSwitch--;
                        cs.Invincible  = false;
                        pm.nav.enabled = true;
                        pm.mIsHangIn   = false;
                    }
                }
            }
        }
        //动作结束移除跟随动作的buff
        if (!(skillIndex == 4 && cs.mCurMobalId == MobaObjectID.HeroJiansheng && pm.mCurSkillTime != 0))
        {
            for (int i = 0; i < mCurAddBuff.Count; i++)
            {
                SkillBuffManager.GetInst().RemoveCalculateCurTargetProp(cs, mCurAddBuff[i]);
            }
        }
    }
Beispiel #27
0
 public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     if (GameLibrary.IsMajorOrLogin())
     {
         return;
     }
     base.OnStateEnter(animator, stateInfo, layerIndex);
     GetSkillNodeByStateInfo(stateInfo);
     pm.canAttack = false;
     pm.canSkill  = false;
     pm.canMoveSwitch++;
     pm.canAttackSwitch++;
     pm.canSkillSwitch++;
     mSkillTouchIndex = 0;
     mIsStateStart    = true;
     mIsTouchRun      = false;
     if (!(cs.mCurMobalId == MobaObjectID.HeroJiansheng && skillIndex == 4 && pm.mCurSkillTime != 0))
     {
         mCurAddBuff.Clear();
     }
     //判断是否有跟随动作的buff
     if (GameLibrary.Instance().CheckExistSpecialBySkillNode(mCurSkillNode))
     {
         if (!(skillIndex == 4 && cs.mCurMobalId == MobaObjectID.HeroJiansheng && pm.mCurSkillTime != 0))
         {
             mCurAddBuff = mCurSkillNode.AddSpecialBuffs(cs);
         }
     }
     if (cs.mCurMobalId == MobaObjectID.HeroJiansheng)
     {
         if (skillIndex == 3)
         {
             SkillBuff mTempBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindLast(a => a.id == (long)SkillBuffType.AddAttack && a.attacker == cs);
             mCurAddBuff.Add(mTempBuff);
         }
         else if (skillIndex == 1)
         {
             pm.canMoveSwitch--;
         }
     }
     else if (cs.mCurMobalId == MobaObjectID.HeroLuosa)
     {
         List <SkillBuff> mExistTalentBuff = SkillBuffManager.GetInst().GetSkillBuffListByCs(cs).FindAll(a => a.attacker == cs &&
                                                                                                         ((a.node.type == BuffType.talent && a.node.buffActionType == buffActionType.skill) || (SkillBuffType)a.id == SkillBuffType.AddSkillDamage));
         for (int i = 0; i < mExistTalentBuff.Count; i++)
         {
             mCurAddBuff.Add(mExistTalentBuff[i]);
         }
     }
     else if (cs.mCurMobalId == MobaObjectID.HeroHuanci)
     {
         if (skillIndex == 4)
         {
             pm.canMoveSwitch--;
         }
     }
     else if (cs.mCurMobalId == MobaObjectID.HeroXiongmao)
     {
         if (skillIndex == 1)
         {
             pm.canMoveSwitch--;
         }
     }
     else if (GameLibrary.Instance().CheckModelIsBoss006(cs))
     {
         if (pm.mIsHangIn && !(skillIndex == 2 || skillIndex == 3))
         {
             cs.transform.position = cs.mOriginPos;
         }
     }
 }