void Update() { lifetime -= Time.deltaTime; if (lifetime < 0) { Explode(); } else if (torpedoShip.Target) { /* if target dies, the ship will just keep moving towards its last position */ var toTarget = torpedoShip.Target.transform.position - transform.position; var dist2 = toTarget.sqrMagnitude; var proximity2 = explodeProximity * explodeProximity; if (dist2 < proximity2) { //TODO: damage in a sphere instead var damage = new HitDamage(transform.position, explodeDamage, owner); torpedoShip.Target.SendMessage("OnTakeDamage", damage, SendMessageOptions.DontRequireReceiver); Explode(); } else { torpedoShip.ResetControls(thrust: 1); torpedoShip.RotateToDirection(toTarget.normalized); } } }
public static void CheckHitEffectAfter(LiveMonster src, LiveMonster dest, HitDamage dam) { if (!src.BuffManager.HasBuff(BuffEffectTypes.NoSkill)) { src.SkillManager.CheckHitEffectAfter(src, dest, dam); } if (!dest.BuffManager.HasBuff(BuffEffectTypes.NoSkill)) { dest.SkillManager.CheckHitEffectAfter(src, dest, dam); } }
public static HitDamage GetDamage(LiveMonster src, LiveMonster dest) { HitDamage damage; double attrRateOn = 1; //属性相克的伤害修正 bool isCrt = false; if (dest.Avatar.MonsterConfig.AttrDef != null) { attrRateOn -= dest.Avatar.MonsterConfig.AttrDef[src.AttackType]; } if (src.RealCrt > 0)//存在暴击率 { if (MathTool.GetRandom(100) < src.RealCrt * GameConstants.CrtToRate) { attrRateOn *= (GameConstants.DefaultCrtDamage + src.CrtDamAddRate); isCrt = true; } } var realAttackType = MonsterBook.HasTag(src.CardId, "mattack") ? src.Attr : src.AttackType; if (realAttackType == 0) //物理攻击 { var damValue = Math.Max(1, (int)(src.RealAtk * (1 - FormulaBook.GetPhyDefRate(dest.RealDef)) * attrRateOn)); //至少有1点伤害 var noDefDamValue = (int)(src.RealAtk * attrRateOn); damage = new HitDamage(damValue, noDefDamValue, 0, DamageTypes.Physical); } else { var damValue = (int)(src.RealAtk * (1 + src.RealMag * GameConstants.MagToRate) * (1 - FormulaBook.GetMagDefRate(dest.RealMag)) * attrRateOn); damage = new HitDamage(damValue, damValue, realAttackType, DamageTypes.Magic); dest.CheckMagicDamage(damage); } damage.IsCrt = isCrt; bool nodef = false; //无视防御 if (!src.BuffManager.HasBuff(BuffEffectTypes.NoSkill)) { src.SkillManager.CheckDamage(src, dest, true, damage, ref nodef); } if (!dest.BuffManager.HasBuff(BuffEffectTypes.NoSkill)) { dest.SkillManager.CheckDamage(src, dest, false, damage, ref nodef); } damage.SetDamage(DamageTypes.All, damage.Value); return(damage); }
public FlowDamageInfo(HitDamage dam, Point point) : base("", point, 3, "Coral", 0, -10, 0, 2, 30) { damage = dam; word = damage.Value.ToString(); if (damage.IsCrt) { size += 6;//±©»÷×ÖÌå·Å´ó£¬Òƶ¯ËٶȼõÂý font.Dispose(); font = new Font("΢ÈíÑźÚ", this.size * 1.33f, FontStyle.Bold, GraphicsUnit.Pixel); speedY--; //-4 word = damage.Value.ToString() + "!"; } }
private void CheckDamageBuffEffect(LiveMonster src, HitDamage dam) { if (dam.Dtype == DamageTypes.Physical) { if (BuffManager.HasBuff(BuffEffectTypes.Chaos) && MathTool.GetRandom(100) < 25) { src.HpBar.OnDamage(dam); dam.SetDamage(DamageTypes.Physical, 0); } } if (BuffManager.HasBuff(BuffEffectTypes.Shield)) { dam.SetDamage(DamageTypes.All, 1); } }
public void OnDamage(HitDamage damage) { BattleManager.Instance.StatisticData.GetPlayer(!self.IsLeft).DamageTotal += damage.Value; if (damage.Dtype != DamageTypes.Magic && PArmor > 0) { AddPArmor(-damage.Value); return; } if (damage.Dtype != DamageTypes.Physical && MArmor > 0) { AddMArmor(-damage.Value); return; } Life -= damage.Value; BattleManager.Instance.FlowWordQueue.Add(new FlowDamageInfo(damage, self.CenterPosition), false);//掉血显示 }
public void CheckHitEffectAfter(LiveMonster src, LiveMonster dest, HitDamage damage, int key) { if (SkillInfo.SkillConfig.AfterHit != null) { SkillInfo.SkillConfig.AfterHit(SkillInfo, src, dest, damage, Level); SendSkillIcon(key); if (SkillInfo.SkillConfig.EffectArea != "") { SendAreaEffect(SkillInfo.SkillConfig.PointSelf ? Self.Position : dest.Position); } } if (SkillInfo.SkillConfig.DeathHit != null && !dest.IsAlive) { SkillInfo.SkillConfig.DeathHit(SkillInfo, src, dest, damage, Level); SendSkillIcon(key); if (SkillInfo.SkillConfig.EffectArea != "") { SendAreaEffect(SkillInfo.SkillConfig.PointSelf ? Self.Position : dest.Position); } } }
void OnTakeDamage(HitDamage damage) { ai.ClearTasks(); }
void OnTakeDamage(HitDamage damage) { TakeDamage(damage.Amount); }
public void Hit(HitDamage place) { if (place == HitDamage.Left && !(place == HitDamage.Right && place == HitDamage.Full)) { hp = hp - FruitKill.hitDamge; if (hp >= 100) { blade1.SetActive(true); blade2.SetActive(true); blade3.SetActive(true); blade4.SetActive(true); blade5.SetActive(true); } if (hp <= 99 && hp >= 50) { blade1.SetActive(false); blade2.SetActive(true); blade3.SetActive(false); blade4.SetActive(false); blade5.SetActive(false); } if (hp < 50 && hp >= 20) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(true); blade4.SetActive(false); blade5.SetActive(false); } if (hp < 20 && hp >= 1) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(false); blade4.SetActive(true); blade5.SetActive(false); } if (hp <= 0) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(false); blade4.SetActive(false); blade5.SetActive(true); OnPlayerDied(); hp = 100; } } if (place == HitDamage.Right && !(place == HitDamage.Left && place == HitDamage.Full)) { hp = hp - 10; if (hp == 100) { blade1.SetActive(true); blade2.SetActive(true); blade3.SetActive(true); blade4.SetActive(true); blade5.SetActive(true); } if (hp == 90) { blade1.SetActive(false); blade2.SetActive(true); blade3.SetActive(false); blade4.SetActive(false); blade5.SetActive(false); } if (hp == 60) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(true); blade4.SetActive(false); blade5.SetActive(false); } if (hp == 30) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(false); blade4.SetActive(true); blade5.SetActive(false); } if (hp <= 0) { blade1.SetActive(false); blade2.SetActive(false); blade3.SetActive(false); blade4.SetActive(false); blade5.SetActive(true); OnPlayerDied(); hp = 100; } } }
public void NextAction(float pastRound) { LeftCount = 0; RightCount = 0; List <int> removeMids = new List <int>(); foreach (var mon in monsters) { var rival = mon.Rival as Player; if (rival.DirectDamage > 0) { HitDamage damage = new HitDamage(rival.DirectDamage, rival.DirectDamage, 0, DamageTypes.Magic); mon.HpBar.OnDamage(damage); } if (!mon.IsAlive) { if (!mon.IsGhost) { mon.OnDie(); } else { if (mon.OwnerPlayer.SpikeManager.HasSpike("grave") || (mon.Rival as Player).SpikeManager.HasSpike("grave")) { mon.GhostTime += 0.005f; } else { mon.GhostTime += 0.01f; } if (mon.GhostTime >= 1) { removeMids.Add(mon.Id); } } } else { if (!mon.IsLeft) { RightCount = RightCount + 1; } else { LeftCount = LeftCount + 1; } } } BattleManager.Instance.PlayerManager.LeftPlayer.DirectDamage = 0;//伤害清除 BattleManager.Instance.PlayerManager.RightPlayer.DirectDamage = 0; foreach (int mid in removeMids) { Remove(mid); } foreach (var roundMonster in monsters) { if (roundMonster.IsGhost) { continue; } int tile = BattleManager.Instance.MemMap.GetMouseCell(roundMonster.Position.X, roundMonster.Position.Y).Tile; var match = TileBook.IsTileMatch(tile, roundMonster.Avatar.MonsterConfig.Attr); roundMonster.Next(pastRound, match); } foreach (var lm in toAdd)//添加延时怪 { Add(lm); } toAdd.Clear(); }