Exemple #1
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        m_RoleList.Clear();
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            foreach (Life w in RoleList)
            {
                m_RoleList.Add(w);
                GridActionCmd action = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
            m_fAttackTrigger = Time.time;
            m_bBomb          = true;
            SoundPlay.Play("littleboom", false, false);
            SetAnimator(Build_AnimatorState.Trigger30000);
            m_goEffect1003031.SetActive(true);
        }
        return(IsRelease);
    }
Exemple #2
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            SetAnimator(Build_AnimatorState.Trigger30000);
            //foreach(Life w in RoleList)
            {
                Life    w       = RoleList[0];
                Vector3 posSrc  = Pao.transform.position;
                Vector3 posRole = new Vector3(w.GetPos().x, w.GetPos().y, w.GetPos().z);
                float   fgreed  = NdUtil.V2toAngle(posSrc, posRole, Vector3.right);
                m_vDirGreed = new Vector3(fgreed, 90f, 0);
                bool          InterruptSkill = false;
                GridActionCmd action         = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
            m_bAttack     = true;
            m_fAttackTime = Time.time;
            ActiveEffect1915011(true);
        }
        return(IsRelease);
    }
Exemple #3
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        Role.WakeEnemy(this);
        Info.bVertical           = true;
        Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        ApplyDamage(sInfo, null);
        if (isDead)   //破了
        {
            Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
            Info.bApplyDamage       = true;
            EffectM.LoadEffect(EffectM.sPath, "zamen_02", m_thisT.position, null);
        }
        else          //没破
        {
            Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
            Info.bApplyDamage       = false;
            GameObjectActionExcute       gae1      = EffectM.LoadEffect(EffectM.sPath, "zamen_01", m_thisT.position, null);
            GameObjectActionDelayDestory ndEffect1 = new GameObjectActionDelayDestory(1f);
            gae1.AddAction(ndEffect1);
        }
    }
Exemple #4
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            m_bCDOver = false;

            IsRelease = true;
            foreach (Life w in RoleList)
            {
                Role             flyRole = w as Role;
                SkillReleaseInfo Info    = m_Skill.SkillRelease(this, flyRole, null, m_Skill.PropSkillInfo);
                if (flyRole != null)
                {
                    flyRole.ApplyDamage(Info, m_thisT);
                    if (flyRole.m_Status != null && flyRole.m_Status.HaveState(StatusType.ClickFly) == true)
                    {
                        flyRole.HitFly(m_dir, 3f, 0.1f);
                    }
                }
            }
        }
        return(IsRelease);
    }
Exemple #5
0
    /// <summary>
    /// 伤害后死亡返回false,否则true
    /// </summary>
    /// <param name="damage"></param>
    /// <param name="attackgo"></param>
    /// <param name="InterruptSkill">是否打断技能</param>
    /// <returns>伤害后死亡返回false,否则true</returns>
    public virtual bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo)
    {
        if (m_isDead)
        {
            return(false);
        }
        HP += Info.m_Damage;
        if (HP >= fullHP)
        {
            HP = fullHP;
        }
        if ((Info.Result == AttackResult.Normal && Info.m_Damage != 0) || Info.Result == AttackResult.Miss || Info.Result == AttackResult.Crit || Info.Result == AttackResult.Fire)
        {
            ShowHp(HP, fullHP, Info.m_Damage, Info.Result);
        }
        if (HP <= 0)
        {
            if (attackgo != null)
            {
                Life target = attackgo.GetComponent <LifeObj>().GetLife();
                if (m_Core.m_type == LifeMType.SOLDIER && target.m_Core.m_type == LifeMType.SOLDIER)
                {
                    BattleKillLogWnd wnd = WndManager.GetDialog <BattleKillLogWnd>();
                    wnd.Show(target.m_SceneID, m_SceneID);
                }
            }

            Dead();
            return(false);
        }
        return(true);
    }
Exemple #6
0
    public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo)
    {
        bool result = base.ApplyDamage(Info, attackgo);

        Hit(Info.m_Damage);
        return(result);
    }
Exemple #7
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        //Info.bVertical = m_bVertical;
        Info.FlyfallSTandGridPos = GetMapPos();
        Info.lifemCollision      = this;
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        bool result = ApplyDamage(sInfo, null);

        if (!m_isDead)
        {
            Info.FlyfallSTandGridPos = m_Attr.Pos;
            Info.bVertical           = false;
            Info.flyCollisionAction  = FlyCollisionAction.DropInBoat;
            //Debug.Log("not dead " + Info.flyCollisionAction + "," + Info.FlyfallSTandGridPos);
            Info.bApplyDamage = false;
        }
        else
        {
            Info.FlyfallSTandGridPos = m_Attr.Pos;
            Info.bVertical           = false;
            Info.flyCollisionAction  = FlyCollisionAction.FlyDirectional;
            //Debug.Log(" dead " + Info.flyCollisionAction + "," +Info.FlyfallSTandGridPos);
            Info.bApplyDamage = false;
        }
    }
Exemple #8
0
    public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo)
    {
        Shake();
        bool result = base.ApplyDamage(Info, attackgo);

        /*if (Info.m_struckeffect!=null&&Info.m_struckeffect != ""&& Info.m_struckeffect != "null")
         * {
         *
         *              //SkillEffects._instance.LoadEffect("effect/prefab/", Info.m_struckeffect, t.position, 0.5f, true);
         *      MapGrid g = GetMapGrid();
         *      Vector3 pos = g.pos;
         *      pos.y += 1.5f;
         *      GameObjectActionExcute gae = EffectM.LoadEffect(EffectM.sPath, Info.m_struckeffect, pos, m_thisT);
         *      GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1);
         *      gae.AddAction(ndEffect);
         * }*/
        if (!m_bDark && attackgo == null)
        {
            m_Skin.PlayEffectColor(SkinEffectColor.BeHit, 0.12f);
        }
        if (result)
        {
            ActiveHidecdTimer();
            Hit(Info.m_Damage);
        }

        return(result);
    }
Exemple #9
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            {
                Life    w       = RoleList[0];
                Vector3 posSrc  = m_goPao.transform.position;
                Vector3 posRole = new Vector3(w.GetPos().x, w.GetPos().y, w.GetPos().z);
                float   fgreed  = NdUtil.V2toAngle(posSrc, posRole, Vector3.right);
                if (fgreed < 0f || fgreed > 270)
                {
                    fgreed = 0f;
                }
                else if (fgreed > 180f)
                {
                    fgreed = 180f;
                }
                m_vDirGreed = new Vector3(0, -fgreed, 0);
                bool          InterruptSkill = false;
                GridActionCmd action         = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
        }
        return(IsRelease);
    }
Exemple #10
0
 public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo)
 {
     for (int i = 0; i < m_rooms.Count;) {
         if (m_rooms[i].ApplyDamage(Info, attackgo)) {
             i++;
         }
     }
     return true;
 }
Exemple #11
0
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        Role.WakeEnemy(this);
        Info.bVertical           = true;
        Info.bLeft               = true;
        Info.lifemCollision      = this;
        Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        ApplyDamage(sInfo, null);
        if (isDead)   //破了
        //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003021", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
        {
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000291", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, 90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            //go.transform.Rotate(new Vector3(0,0,90),Space.Self);
            Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
            Info.bApplyDamage       = true;
            //EffectM.LoadEffect(EffectM.sPath, "zamen_02", transform.position, null);
        }
        else          //没破
        {
            shake();
            //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003011", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000281", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, 90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            //go.transform.Rotate(new Vector3(0,0,90),Space.Self);
            if (m_DefenceColider.IsInRightCollider(collision.collider))
            {
                Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                Info.bApplyDamage       = false;
            }
            else if (m_DefenceColider.IsInLeftCollider(collision.collider))
            {
                Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                //设置左右板信息,并非移动方向
                Info.HitDir       = WalkDir.WALKLEFT;
                Info.bApplyDamage = false;
            }
            GameObjectActionExcute       gae1      = EffectM.LoadEffect(EffectM.sPath, "zamen_01", m_thisT.position, null);
            GameObjectActionDelayDestory ndEffect1 = new GameObjectActionDelayDestory(1f);
            gae1.AddAction(ndEffect1);
        }
    }
Exemple #12
0
    public void DoSkill(int times)
    {
        if (m_skill == null)
        {
            return;
        }
        SoldierSkill skill      = m_skill as SoldierSkill;
        List <Life>  targetlist = new List <Life>();
        LifeMCamp    camp       = m_parent.m_Core.m_Camp == LifeMCamp.ATTACK?LifeMCamp.DEFENSE : LifeMCamp.ATTACK;

        targetlist = GetRangeAttackList(MapGrid.GetMG(m_parent.m_Pos), skill, camp, null);
        if (skill.m_actiontype == 0)
        {
            StatusSelfBuff(m_parent, m_skill);
            for (int i = 0; i < targetlist.Count; i++)
            {
                if (!targetlist[i].InBoat)
                {
                    continue;
                }
                SkillReleaseInfo info = Life.CalcDamage(m_parent, targetlist[i], null, m_skill);
                if (skill.m_attckmodeid > 0)
                {
                    float power = skill.GetAttackPower(times);
                    info.m_Damage = (int)(info.m_Damage * power);
                }
                Transform attackT = m_parent.m_thisT;
                targetlist[i].ApplyDamage(info, attackT);
            }
            //Debug.Log(str);
        }
        else if (skill.m_actiontype == 1)
        {
            StatusSelfBuff(m_parent, m_skill);
            for (int i = 0; i < targetlist.Count; i++)
            {
                if (!targetlist[i].InBoat)
                {
                    continue;
                }
                SkillReleaseInfo info = Life.CalcDamage(m_parent, targetlist[i], null, m_skill);
                Debug.Log("doskill  " + m_skill.m_name + "," + info.m_Damage);
                if (skill.m_attckmodeid > 0)
                {
                    float power = skill.GetAttackPower(times);
                    info.m_Damage = (int)(info.m_Damage * power);
                }
                Transform attackT = m_parent.m_thisT;
                targetlist[i].ApplyDamage(info, attackT);
            }
            //Debug.Log(str);
        }
    }
Exemple #13
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            m_bCDOver = false;

            m_fAttackTimer = Time.time;

            IsRelease = true;
            bool ispress = true;            //是否可以压扁

            /*{
             *      foreach(Life life in RoleList)
             *      {
             *              if (life.m_Attr.AntiPress > 100)
             *              {
             *                      ispress = false;
             *                      GridActionCmd action = null;
             *                      if (life is Role)
             *                              action = (life as Role).CurrentAction;
             *                      SkillReleaseInfo Info = m_Skill.SkillRelease(this,life,action,m_Skill.PropSkillInfo);
             *                      //life.ApplyDamage(Info, transform);
             *                      SetAnimator (Build_AnimatorState.Trigger30100);
             *                      m_bAttackedToDie=true;
             *              }
             *      }
             * }*/
            if (ispress)
            {
                foreach (Life lifepress in RoleList)
                {
                    GridActionCmd action = null;
                    if (lifepress is Role)
                    {
                        action = (lifepress as Role).CurrentAction;
                    }
                    SkillReleaseInfo Info = m_Skill.SkillRelease(this, lifepress, action, m_Skill.PropSkillInfo);
                    lifepress.ApplyDamage(Info, m_thisT);
                }
                SetAnimator(Build_AnimatorState.Trigger30000);
                m_bAttacke = true;

                SoundPlay.Play("Trap/trap_flattening", false, false);
                m_goEffect1914021.SetActive(true);
            }
        }
        return(IsRelease);
    }
Exemple #14
0
 public override void NDUpdate(float deltaTime)
 {
     if (CheckCombatIng())
     {
         if (m_timecount > m_info.m_time)
         {
             return;
         }
         m_timecount += deltaTime;
         if (m_timecount > m_info.m_time)
         {
             GameObject.Destroy(m_thisT.gameObject);
         }
         else
         {
             if (m_timecount > m_cout * m_info.m_timeinterval)
             {
                 m_cout++;
                 List <Life> lr   = new List <Life>();
                 LifeMCamp   camp = m_Parent.m_Core.m_Camp == LifeMCamp.ATTACK ? LifeMCamp.DEFENSE : LifeMCamp.ATTACK;
                 CM.SearchLifeMListInBoat(ref lr, LifeMType.SOLDIER, camp);
                 for (int i = 0; i < lr.Count; i++)
                 {
                     if (NdUtil.IsSameMapLayer(lr[i].GetMapPos(), m_Pos))
                     {
                         if (lr[i].m_thisT.localPosition.x > m_MapGrid.pos.x - m_info.m_range && lr[i].m_thisT.localPosition.x < m_MapGrid.pos.x + m_info.m_range)
                         {
                             SkillReleaseInfo sInfo = new SkillReleaseInfo();
                             sInfo.m_InterruptSkill = false;
                             sInfo.m_MakeStatus     = new List <StatusType> ();
                             sInfo.m_bImmunity      = false;
                             sInfo.m_Damage         = m_info.m_ReduceAttr.GetAttr(EffectType.RecoHp);
                             int fire = m_info.m_ReduceAttr.GetAttr(EffectType.FireAttack);
                             if (fire > 0)
                             {
                                 sInfo.m_Damage = Skill.CalcAttributableSkillDamage(AttributeType.Fire, lr[i].m_Attr, sInfo.m_Damage);
                             }
                             sInfo.Result = AttackResult.Normal;
                             lr[i].ApplyDamage(sInfo, null);
                         }
                     }
                 }
             }
         }
     }
 }
Exemple #15
0
    public void DoSkill()
    {
        List <Life> targets = GetBuildSkillTarget();

        if (targets.Count > 0)
        {
            foreach (Life t in targets)
            {
                GridActionCmd action = null;
                if (t is Role)
                {
                    action = (t as Role).CurrentAction;
                }
                SkillReleaseInfo Info = SkillRelease(m_Parent, t, action, m_skill);
                t.ApplyDamage(Info, null);
            }
        }
    }
Exemple #16
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            foreach (Life w in RoleList)
            {
                bool          InterruptSkill = false;
                GridActionCmd action         = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
        }
        return(IsRelease);
    }
Exemple #17
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            foreach (Life w in RoleList)
            {
                GridActionCmd action = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
            m_fAttackTrigger = Time.time;
            m_goEffect1003031.SetActive(true);
        }
        return(IsRelease);
    }
Exemple #18
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            IsRelease = true;
            SetAnimator(Build_AnimatorState.Trigger30000);
            foreach (Life w in RoleList)
            {
                //Life w = RoleList[0];
                GridActionCmd action = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
            //m_Skill.PropSkillInfo.m_LifeTarget=null;
        }
        return(IsRelease);
    }
Exemple #19
0
 public override void BuildUpdate()
 {
     base.BuildUpdate();
     if (m_bAttackedToDie && Time.time - m_fAttackTimer > 0.7f)
     {
         Debug.Log("add m_bAttackedToDie .........................." + Time.time);
         m_bAttackedToDie = false;
         SkillReleaseInfo sInfo = new SkillReleaseInfo();
         sInfo.m_Damage = -fullHP * 2;
         sInfo.Result   = AttackResult.Normal;
         ApplyDamage(sInfo, null);
     }
     if (m_bAttacke && TimerCheckAttackOver())
     {
         m_bAttacke = false;
         m_goEffect1914021.SetActive(false);
     }
     if (!m_bCDOver && GetCDTime() < 2f)
     {
         m_bCDOver = true;
         SetAnimator(Build_AnimatorState.CDOver40100);
     }
 }
Exemple #20
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        if (RoleList.Count > 0)
        {
            m_fAttackTimer = Time.time;
            IsRelease      = true;
            m_TriggerIng   = true;
            SetAnimator(Build_AnimatorState.Trigger30000);
            SoundPlay.Play("Trap/trap_prison", false, false);
            foreach (Life w in RoleList)
            {
                GridActionCmd action = null;
                if (w is Role)
                {
                    action = (w as Role).CurrentAction;
                }
                SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                w.ApplyDamage(Info, m_thisT);
            }
        }
        return(IsRelease);
    }
Exemple #21
0
    public void DoGodSkill()
    {
        //Debug.Log("2 & 2  "+ (2 & 2) + ",  7 & 2  " + (7 & 2));

        List <Life> ltarget = GetRangeAttackList(m_godskill.m_target, m_godskill.m_multiple, m_targetpos, m_godskill.m_range, m_Camp);

        /*  if (ltarget.Count == 0)//目标不是来自技能
         * {
         *
         * }*/

        if (m_godskill.m_action == 1)
        {
            foreach (Life l in ltarget)
            {
                if (l.m_Core.m_Camp == m_Camp)
                {
                    StatusBuff(l);
                }
                else
                {
                    SkillReleaseInfo Info = new SkillReleaseInfo();
                    Info.m_InterruptSkill = false;
                    Info.m_MakeStatus     = new List <StatusType> ();
                    Info.m_bImmunity      = false;
                    if (l is Building)
                    {
                        Info.m_Damage = -Mathf.CeilToInt(m_godskill.m_power2 * l.fullHP * 1.0f / l.m_Attr.Bear);
                    }
                    else
                    {
                        Info.m_Damage = -m_godskill.m_power;
                    }
                    Info.m_struckeffect = "";
                    Info.Result         = AttackResult.Normal;
                    if (StatusDeBuff(l))
                    {
                        Info.m_InterruptSkill = true;
                    }
                    //else Damage = Defense.HP;
                    //判断受击方受到的伤害值,是否大于可被打断伤害值。
                    int LimitHp = l.m_Attr.Hp * ConfigM.GetSkillData0() / 100;
                    if (m_godskill.m_power > LimitHp)
                    {
                        Info.m_InterruptSkill = true;
                    }
                    l.ApplyDamage(Info, null);
                }
            }
        }
        else if (m_godskill.m_action == 2)
        {
            ltarget = m_listSkillTarget;
            if (m_listSkillTarget.Count > 0)
            {
                Life life = m_listSkillTarget[0];
                Role role = life as Role;
                if (role != null)
                {
                    role.ReBorn();
                }
            }
        }
        else if (m_godskill.m_action == 3)
        {
            CreatePet(m_godskill.m_power, m_targetg);
        }
        //NGUIUtil.DebugLog("name = " + ltarget[0].transform.name + " hp =" + ltarget[0].HP);
    }
Exemple #22
0
    /// <summary>
    /// 技能释放
    /// </summary>
    /// <param name="Attack">技能释放者</param>
    /// <param name="Defense">受击者</param>
    /// <param name="DefenseAction">防守方,攻击处于的状态</param>
    /// <returns>技能伤害值</returns>
    public SkillReleaseInfo SkillRelease(Life Attack, Life Defense, GridActionCmd DefenseAction, SkillInfo skill)
    {
        //异常处理
        AttackResult     Result = AttackResult.Normal;
        SkillReleaseInfo Info   = new SkillReleaseInfo();

        Info.m_InterruptSkill = false;
        Info.m_MakeStatus     = new List <StatusType> ();
        Info.m_bImmunity      = false;
        Info.m_Damage         = 0;
        Info.m_struckeffect   = "";
        Info.Result           = AttackResult.Normal;
        Info.HitAttributeType = skill.m_AttributeType;
        if (Attack == null || Defense == null || skill == null)
        {
            Debug.Log(Attack + "," + Defense + "," + skill.m_name);
            return(Info);
        }
        if (Defense is Role && (Defense as Role).NoDie)
        {
            return(Info);
        }
        //处于攻击中(过了前要阶段)

        /*if(DefenseAction != null && DefenseAction is GridActionCmdAttack)
         * {
         *      if((DefenseAction as GridActionCmdAttack).IsPlayed() == true)
         *      return Info;
         * }*/
        Info.HitType        = (AttackType)skill.m_attacktype;
        Info.m_struckeffect = skill.m_struckeffect;
        //判断是否技能免疫 ,免疫技能不受到伤害及状态。
        AttackType Type = (AttackType)skill.m_attacktype;
        bool       ret  = ImmunitySkill(Type, skill.m_type, Defense.m_Status);

        if (ret == true)
        {
            Info.m_bImmunity = true;
            Info.Result      = AttackResult.Immunity;
            return(Info);
        }
        //根据m_interrupt_skill 判断受击方技能是否打断
        if (skill.m_interrupt_skill == 1)
        {
            if (skill is SoldierSkill)
            {
                float random = Random.Range(0, 1f);
                if (Defense.m_Attr.Level <= (skill as SoldierSkill).m_rankslevel || random <= (skill as SoldierSkill).m_status_hitratio)
                {
                    Info.m_InterruptSkill = true;
                }
            }
            else
            {
                Info.m_InterruptSkill = true;
            }
        }

        if (Attack.m_Attr == null || Defense.m_Attr == null)
        {
            return(Info);
        }
        //计算技能伤害
        int Damage  = 0;
        int regenhp = 0;

        if (Attack.m_Core.m_Camp == Defense.m_Core.m_Camp)
        {
            regenhp = CalcSkillRegenHP(Attack.m_Attr, Defense.m_Attr, ref Result, skill);
        }
        else
        {
            Damage = CalcSkillDamage(Attack.m_Attr, Defense.m_Attr, ref Result, skill);
        }
        Damage = CalcDistanInfo(Attack.m_Attr, Defense.m_Attr, Damage);
        Damage = CalcAttributableSkillDamage(skill.m_AttributeType, Defense.m_Attr, Damage);
        //计算技能治疗量
        //盾抵抗伤害
        if (Defense.m_Status != null)
        {
            Damage = Damage - Defense.m_Status.ReduceHpbyShield((AttackType)skill.m_attacktype, Damage);
        }
        //miss 不产生状态
        if (Result == AttackResult.Miss)
        {
            Info.Result = AttackResult.Miss;
            return(Info);
        }
        else if (Result == AttackResult.Crit)
        {
            Info.Result = AttackResult.Crit;
        }

        if ((Defense.m_Attr.Hp - Damage) > 0)
        {
            //产生debuff,根据ememy_status,判断debuff中是包含打断技能状态
            if (StatusDeBuff(Defense, skill) == true)
            {
                Info.m_InterruptSkill = true;
            }
            //魅惑状态下的BUFF效果无效
            if (!Attack.m_Attr.Charmed && StatusBuff(Defense, skill) == true)
            {
                Info.m_InterruptSkill = true;
            }
            if (Defense is Building)
            {
                StatusBuildDeBuff(Defense);
            }
        }



        //else Damage = Defense.HP;
        //判断受击方受到的伤害值,是否大于可被打断伤害值。
        int LimitHp = Defense.m_Attr.Hp * ConfigM.GetSkillData0() / 100;

        if (Damage > LimitHp)
        {
            Info.m_InterruptSkill = true;
        }
        if (Attack.m_Attr.Vampire > 0)
        {
            int vampriehp = CalcVampireHP(Attack.m_Attr, Damage);
            Attack.HP += vampriehp;
            Attack.StatusUpdateHp(vampriehp);
        }

        if (Attack.m_Core.m_Camp == Defense.m_Core.m_Camp)
        {
            Info.m_Damage = regenhp;
        }
        else
        {
            Info.m_Damage = -Damage;
        }

        return(Info);
    }
Exemple #23
0
 /// <summary>
 /// 撞击处理
 /// </summary>
 /// <param name="Damage">撞击伤害</param>
 /// <param name="dir">撞击方向</param>
 /// <param name="Info">返回撞击信息</param>
 /// <returns></returns>
 public override void CollisionProcByFire(Collision collision, int Damage/*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
 {
     //惊醒防御方
     Role.WakeEnemy(this);
     Info.bVertical = m_bVertical;
     Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
     Info.lifemCollision = this;
     
     SkillReleaseInfo sInfo = new SkillReleaseInfo();
     sInfo.m_InterruptSkill = false;
     sInfo.m_MakeStatus = new List<StatusType> ();
     sInfo.m_bImmunity = false;
     sInfo.m_Damage = Damage;
     sInfo.Result = AttackResult.Fire;
     ApplyDamage(sInfo, null);
     
     //........................................................................
     // 需要继续查..........................
     if (m_DefenceColider == null) {
         isDead = true;
     }
     //........................................................................
     
     if (isDead) { //穿了
     
         GameObjectActionExcute gae = EffectM.LoadEffect(EffectM.sPath, "2000291", collision.contacts[0].point, BattleEnvironmentM.GetLifeMBornNode(true));
         GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
         gae.AddAction(ndEffect);
         Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
         Info.bApplyDamage = true;
         MakeHole();
     } else {
         if (Info.bReleaseSkill) {
             shake(collision.contacts[0].point);
             SetDamageTexture();
             GameObjectActionExcute gae = EffectM.LoadEffect(EffectM.sPath, "2000281", collision.contacts[0].point, BattleEnvironmentM.GetLifeMBornNode(true));
             GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
             gae.AddAction(ndEffect);
         }
         if (flydir == FlyDir.LeftTop || flydir == FlyDir.RightTop || flydir == FlyDir.Top) {
             if (m_FloorType == FloorType.bottom) {
                 Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             } else {
                 Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             }
             
             Info.bApplyDamage = false;
         } else if (flydir == FlyDir.LeftBottom || flydir == FlyDir.RightBottom || flydir == FlyDir.Bottom) {
             Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
             Info.bApplyDamage = false;
         } else {
             if (m_FloorType == FloorType.top) {
                 Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
                 Info.bApplyDamage = false;
             } else if (m_DefenceColider.IsInBottomCollider(collision.collider)) {
                 if (m_FloorType == FloorType.bottom) {
                     Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
                 } else {
                     Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                 }
                 Info.bApplyDamage = false;
             } else if (m_DefenceColider.IsInTopCollider(collision.collider)) { //从上往下撞
                 Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
                 Info.bApplyDamage = false;
             }
         }
     }
 }
Exemple #24
0
 public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo)
 {
     //base.ApplyDamage (Info, attackgo);
     return(true);
 }
Exemple #25
0
    /// <summary>
    /// 释放技能主逻辑
    /// </summary>
    protected override bool ReleaseSkill(ref List <Life> RoleList, ref int nAttackIndex)
    {
        bool IsRelease = false;

        m_AttackRoleList.Clear();
        m_SkillReleaseInfoList.Clear();
        if (RoleList.Count > 0)
        {
            if (nAttackIndex == 0)
            {
                IsRelease      = true;
                m_fAttackTimer = Time.time;
                Vector3 posSrc  = m_goEffectLeft1905021_03.transform.position;
                Vector3 posRole = new Vector3(RoleList[0].GetPos().x, RoleList[0].GetPos().y + 1.5f, RoleList[0].GetPos().z);
                float   fRate   = Vector2.Distance(posSrc, posRole) / 3.8f;
                m_goEffectLeft1905021_03.transform.localScale = new Vector3(fRate, 1.0f, 1.0f);
                float fAngle = NdUtil.V2toAngle(posSrc, posRole, Vector2.right);
                m_goEffectLeft1905021_03.transform.rotation = Quaternion.Euler(new Vector3(0, 180f, fAngle));

                posSrc = m_goEffectRight1905021_03.transform.position;
                fRate  = Vector2.Distance(posSrc, posRole) / 3.8f;
                m_goEffectRight1905021_03.transform.localScale = new Vector3(fRate, 1.0f, 1.0f);
                fAngle = NdUtil.V2toAngle(posSrc, posRole, Vector2.right);
                m_goEffectRight1905021_03.transform.rotation = Quaternion.Euler(new Vector3(0, 180f, fAngle));


                foreach (Life w in RoleList)
                {
                    IsRelease = true;
                    GridActionCmd action = null;
                    if (w is Role)
                    {
                        action = (w as Role).CurrentAction;
                    }
                    SkillReleaseInfo Info = m_Skill.SkillRelease(this, w, action, m_Skill.PropSkillInfo);
                    m_SkillReleaseInfoList.Add(Info);
                    m_AttackRoleList.Add(w);
                }
                m_bAttack = true;
            }
            int nRoleCount = m_AttackRoleList.Count;
            for (int nCnt = 0; nCnt < nRoleCount; nCnt++)
            {
                Life w = m_AttackRoleList[nCnt];

                if (!w.InBoat || w.isDead)
                {
                    continue;
                }
                SkillReleaseInfo info  = m_SkillReleaseInfoList[nCnt];
                BuildSkill       rs    = m_Skill as BuildSkill;
                float            power = rs.PropSkillInfo.GetAttackPower(nAttackIndex + 1);
                info.m_Damage    = (int)(info.m_Damage * power);
                info.mOwnerLevel = m_Attr.Level;
                w.ApplyDamage(info, m_thisT);
            }
            if (nRoleCount > 0)
            {
                SoundPlay.Play("Trap/trap_electricshock", false, false);
            }
        }
        return(IsRelease);
    }
Exemple #26
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        Role.WakeEnemy(this);
        Info.bVertical           = true;
        Info.bLeft               = false;
        Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
        Info.lifemCollision      = this;
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        ApplyDamage(sInfo, null);
        if (isDead)   //破了
        //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003021", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
        {
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000291", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, -90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            GameObject go = gae.gameObject;
            //go.transform.Rotate(new Vector3(0,0,-90),Space.Self);
            Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
            Info.bApplyDamage       = true;
            //EffectM.LoadEffect(EffectM.sPath, "zamen_02", transform.position, null);
        }
        else          //没破
        {
            shake();
            //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003011", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000281", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, -90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            GameObject go = gae.gameObject;
            //go.transform.Rotate(new Vector3(0,0,-90),Space.Self);

            /*	if (flydir == FlyDir.Left || flydir == FlyDir.LeftTop || flydir == FlyDir.LeftBottom || flydir == FlyDir.Top || flydir == FlyDir.Bottom)
             *  {
             *          Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             *          Info.bApplyDamage = false;
             *
             *  }
             *  else if (flydir == FlyDir.Right || flydir == FlyDir.RightTop || flydir == FlyDir.RightBottom)
             *  {
             *          Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             *          //设置左右板信息,并非移动方向
             *          Info.HitDir = WalkDir.WALKLEFT;
             *          Info.bApplyDamage = false;
             *  }
             *  else
             *  {
             *          if(m_DefenceColider.IsInLeftCollider(collision.collider))
             *          {
             *                  {
             *                          Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             *                          Info.bApplyDamage = false;
             *                  }
             *          }
             *          else if(m_DefenceColider.IsInRightCollider(collision.collider)||m_DefenceColider.IsInTopCollider(collision.collider))
             *          {
             *                  Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             *                  //设置左右板信息,并非移动方向
             *                  Info.HitDir= WalkDir.WALKRIGHT;
             *                  Info.bApplyDamage = false;
             *          }
             *  }*/

            Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
            for (int i = Layer; i >= 0; i--)
            {
                MapGrid g = MapGrid.GetMG(i, StartUnit);
                if (g != null && (g.Type != GridType.GRID_HOLE && g.Type != GridType.GRID_HOLESTAIR))
                {
                    Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                    break;
                }
            }
            Info.droppos = new Vector3(1f, 0, 0);
            GameObjectActionExcute       gae1      = EffectM.LoadEffect(EffectM.sPath, "zamen_01", m_thisT.position, null);
            GameObjectActionDelayDestory ndEffect1 = new GameObjectActionDelayDestory(1f);
            gae1.AddAction(ndEffect1);
        }
    }