/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo) { bool result = base.ApplyDamage(Info, attackgo); Hit(Info.m_Damage); return(result); }
/// <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; } }
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); }
/// <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); }
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; }
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); } }
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); } }
/// <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); }
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); } } } } } } }
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); } } }
/// <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); }
/// <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); }
/// <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); }
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); } }
/// <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); }
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); }
/// <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); }
/// <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; } } } }
public override bool ApplyDamage(SkillReleaseInfo Info, Transform attackgo) { //base.ApplyDamage (Info, attackgo); return(true); }
/// <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); }
/// <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); } }