public virtual void ApplyDamage(float damage, DamageElement damageElement = DamageElement.Physical) { if (damage > 0) { GameManager.instance.objectPoolManager.Spawn(ObjectPoolType.DamagePopup, damagePopupSpawnTransform, transform.localScale, damage); } if (AttributesController.health > 0) { AttributesController.health -= damage; EnemyGetDamaged?.Invoke(this); ///Blood Effect Spawn. GameManager.instance.objectPoolManager.Spawn(ObjectPoolType.BloodSprayEffect, bloodEffectSpawnTransform, transform.localScale); } if (AttributesController.health <= 0) { Die(); } else { AnimationController.SetAnimationParameter(EnemyAnimatorParameter.Hit); } }
public Damage(float amount, DamageType type, DamageElement element, Vector3 origin) { this.amount = amount; this.type = type; this.element = element; this.origin = origin; }
public void AppendDamageLog(Player source, Player target, int magnitude, DamageElement element) { if (!Logs.ContainsKey(target)) { return; } Trace.Assert(target != null); List <FlowDocument> docs = new List <FlowDocument>() { Logs[target], GlobalLog }; if (source != null) { docs.Add(Logs[source]); } foreach (var doc in docs) { Paragraph para = LogFormatter.RichTranslateDamage(source, target, magnitude, element); if (para != null) { doc.Blocks.Add(para); } } }
public DamageInfo(DamageType type, DamageElement element, float dmg, Pawn source, bool passed = false) { Type = type; Element = element; Damage = dmg; Source = source; Passed = passed; }
private void DisplayDamage(DamageElement element, float amount) { GameObject lostHP = Instantiate(lostHPPrefab, lostHpPoint); Destroy(lostHP, DISPLAY_DURATION); Text txt = lostHP.GetComponent <Text>(); // amount txt.text = Mathf.Round(amount).ToString(); // Color txt.material = DamageManager.dm.ElementMaterial(element); }
public void AppendDamageLog(Player source, Player target, int magnitude, DamageElement element) { Trace.Assert(target != null); List<FlowDocument> docs = new List<FlowDocument>() { Logs[target], GlobalLog }; if (source != null) docs.Add(Logs[source]); foreach (var doc in docs) { Paragraph para = LogFormatter.RichTranslateDamage(source, target, magnitude, element); if (para != null) { doc.Blocks.Add(para); } } }
public CombatEventArgs(string sourceName, string targetName, AttackType attackType, DamageElement damageElemenet, bool isFailedAttack, bool isCriticalHit, bool isOverpower, bool isKillingBlow, int damageAmount) { SourceName = sourceName; TargetName = targetName; AttackType = attackType; DamageElemenet = damageElemenet; IsFailedAttack = isFailedAttack; IsCriticalHit = isCriticalHit; IsOverpower = isOverpower; IsKillingBlow = isKillingBlow; DamageAmount = damageAmount; }
public static string Translate(DamageElement element) { switch (element) { case DamageElement.None: return(string.Empty); case DamageElement.Fire: return("火属性"); case DamageElement.Lightning: return("雷属性"); } Trace.Assert(false); return(string.Empty); }
public static string ItemPrefix(this DamageElement e) { switch (e) { case DamageElement.Air: return("Lofty "); case DamageElement.Earth: return("Rock-Hewn "); case DamageElement.Fire: return("Ignited "); case DamageElement.Physical: return(""); case DamageElement.Spirit: return("Haunted "); case DamageElement.Water: return("Soaked "); } return(""); }
/// <summary> /// For deserialization from a binary table. /// </summary> public EO3Skill(BinaryReader reader, int skillId, Table nameTable) : base(reader, skillId, nameTable) { Game = SkillModes.EO3; MaxLevel = reader.ReadByte(); Type = reader.ReadByte(); UseRequirements = new EO3UseRequirements(reader.ReadUInt16()); TargetStatus = new TargetStatus(reader.ReadUInt16()); TargetType = reader.ReadByte(); TargetTeam = reader.ReadByte(); UsableLocation = new UsableLocation(reader.ReadByte()); ModifierStatus = reader.ReadByte(); ModifierType = reader.ReadByte(); reader.ReadByte(); // Unknown. ModifierElement = new Element(reader.ReadUInt16()); DamageElement = new DamageElement(reader.ReadUInt16()); InflictionStatus = reader.ReadUInt16(); AssociatedDisables = new Disables(reader.ReadUInt16()); SkillFlags = new EO3SkillFlags(reader.ReadInt32()); DataSections = new DataSections(reader, Game); }
public static string GetNameOfColorByElement(DamageElement ele) { if (ele == DamageElement.Fire) { return("red"); } if (ele == DamageElement.Ice) { return("blue"); } if (ele == DamageElement.Poison) { return("green"); } if (ele == DamageElement.Electric) { return("yellow"); } return("white"); }
public static Color GetColorByElement(DamageElement ele) { if (ele == DamageElement.Fire) { return(Color.red); } if (ele == DamageElement.Ice) { return(Color.blue); } if (ele == DamageElement.Poison) { return(Color.green); } if (ele == DamageElement.Electric) { return(Color.yellow); } return(Color.white); }
public Material ElementMaterial(DamageElement element) { switch (element) { case DamageElement.Energy: return(EnergyMaterial); case DamageElement.Fire: return(FireMaterial); case DamageElement.Ice: return(IceMaterial); case DamageElement.Light: return(LightMaterial); case DamageElement.Pure: return(PureMaterial); default: return(PhysicalMaterial); } }
float ElementResistance(DamageElement dType) { switch (dType) { case DamageElement.Earth: return(earthF.DamageMultiplier()); case DamageElement.Air: return(airF.DamageMultiplier()); case DamageElement.Fire: return(fireF.DamageMultiplier()); case DamageElement.Water: return(waterF.DamageMultiplier()); case DamageElement.Physical: Player player = GetComponent <Player>(); if (physicalF == Foible.Immune || player == null) { return(physicalF.DamageMultiplier()); } else if (player.inventory.GetSpellInSlot(0).GetShieldActive() || player.inventory.GetSpellInSlot(1).GetShieldActive()) { return(Foible.Resistant.DamageMultiplier()); } else { return(physicalF.DamageMultiplier()); } case DamageElement.Spirit: return(spiritF.DamageMultiplier()); } return(1.0f); }
public void ApplyDamage(float damage, DamageElement damageElement = DamageElement.Physical) { var TotalDamage = damage - AttributesController.armor; GameManager.instance.objectPoolManager.Spawn(ObjectPoolType.DamagePopup, damagePopupSpawnTransform, transform.localScale, TotalDamage); if (AttributesController.health > 0) { AttributesController.health -= TotalDamage; PlayerGetDamaged?.Invoke(this); /// Used For PlayerUI. ///Blood Effect Spawn. GameManager.instance.objectPoolManager.Spawn(ObjectPoolType.BloodSprayEffect, bloodEffectSpawnTransform, transform.localScale); } if (AttributesController.health <= 0) { Die(); } else { AnimationController.SetAnimationParameter(PlayerAnimatorParameter.Hit); //AnimationController.SetHit(); } }
public static string Translate(DamageElement element) { switch (element) { case DamageElement.None: return string.Empty; case DamageElement.Fire: return "火属性"; case DamageElement.Lightning: return "雷属性"; } Trace.Assert(false); return string.Empty; }
/// <summary> /// 造成伤害 /// </summary> /// <param name="source">伤害来源</param> /// <param name="dest">伤害目标</param> /// <param name="magnitude">伤害点数</param> /// <param name="elemental">伤害属性</param> /// <param name="cards">造成伤害的牌</param> public void DoDamage(Player source, Player dest, int magnitude, DamageElement elemental, ICard card, ReadOnlyCard readonlyCard) { var damageArgs = new DamageEventArgs() { Source = source, Targets = new List<Player>(), Magnitude = magnitude, Element = elemental }; HealthChangedEventArgs healthChangedArgs; int ironShackledDamage = 0; DamageElement ironShackledDamageElement = DamageElement.None; damageArgs.ReadonlyCard = readonlyCard; if (card is CompositeCard) { if ((card as CompositeCard).Subcards != null) { damageArgs.Cards = new List<Card>((card as CompositeCard).Subcards); } } else if (card is Card) { damageArgs.Cards = new List<Card>() { card as Card }; } else { damageArgs.Cards = new List<Card>(); } damageArgs.Targets.Add(dest); damageArgs.Card = card; try { Game.CurrentGame.Emit(GameEvent.DamageSourceConfirmed, damageArgs); Game.CurrentGame.Emit(GameEvent.DamageElementConfirmed, damageArgs); Game.CurrentGame.Emit(GameEvent.BeforeDamageComputing, damageArgs); Game.CurrentGame.Emit(GameEvent.DamageComputingStarted, damageArgs); Game.CurrentGame.Emit(GameEvent.DamageCaused, damageArgs); Game.CurrentGame.Emit(GameEvent.DamageInflicted, damageArgs); if (damageArgs.Magnitude == 0) { Trace.TraceInformation("Damage is 0, aborting"); return; } if (damageArgs.Targets[0].IsIronShackled && damageArgs.Element != DamageElement.None) { ironShackledDamage = damageArgs.Magnitude; Trace.TraceInformation("IronShackled damage {0}", ironShackledDamage); ironShackledDamageElement = damageArgs.Element; damageArgs.Targets[0].IsIronShackled = false; } healthChangedArgs = new HealthChangedEventArgs(damageArgs); Game.CurrentGame.Emit(GameEvent.BeforeHealthChanged, healthChangedArgs); damageArgs.Magnitude = -healthChangedArgs.Delta; } catch (TriggerResultException e) { if (e.Status == TriggerResult.End) { Trace.TraceInformation("Damage Aborted"); return; } Trace.Assert(false); return; } Trace.Assert(damageArgs.Targets.Count == 1); damageArgs.Targets[0].Health -= damageArgs.Magnitude; Trace.TraceInformation("Player {0} Lose {1} hp, @ {2} hp", damageArgs.Targets[0].Id, damageArgs.Magnitude, damageArgs.Targets[0].Health); NotificationProxy.NotifyDamage(source, damageArgs.Targets[0], damageArgs.Magnitude, damageArgs.Element); try { Game.CurrentGame.Emit(GameEvent.AfterHealthChanged, healthChangedArgs); } catch (TriggerResultException) { } Game.CurrentGame.Emit(GameEvent.AfterDamageCaused, damageArgs); Game.CurrentGame.Emit(GameEvent.AfterDamageInflicted, damageArgs); Game.CurrentGame.Emit(GameEvent.DamageComputingFinished, damageArgs); if (ironShackledDamage != 0) { List<Player> toProcess = new List<Player>(Game.CurrentGame.AlivePlayers); Game.CurrentGame.SortByOrderOfComputation(damageArgs.Targets[0], toProcess); foreach (Player p in toProcess) { if (p.IsIronShackled) { DoDamage(damageArgs.Source, p, ironShackledDamage, ironShackledDamageElement, card, readonlyCard); } } } }
public CrowdControl(CrowdControlType ccType, DamageType damageType, DamageElement element) { this.ccType = ccType; this.damageType = damageType; this.element = element; }
public static Paragraph RichTranslateDamage(Player source, Player target, int magnitude, DamageElement element) { Paragraph para = new Paragraph(); para.Inlines.Add(new Run(Translate(target))); string sourceStr = Translate(source); if (sourceStr != string.Empty) { sourceStr += "造成的"; } string damageStr = string.Format("受到{0}{1}点{2}伤害,体力为{3}", sourceStr, magnitude, Translate(element), target.Health); para.Inlines.Add(new Run(damageStr) { Foreground = RedBrush }); return para; }
public void Infuse(DamageElement element) { dElement = element; //damageModifier *= 0.75f; }
public void SetRandomAvailableElement() { int variation = Random.Range(1, 9); switch (variation) { case 2: { weapon_element = DamageElement.photon; weapon_piercing = 1; weapon_bounces = 0; break; } case 3: { weapon_element = DamageElement.nuclear; weapon_piercing = 0; weapon_bounces = 0; break; } case 4: { weapon_element = DamageElement.cryo; weapon_piercing = 0; weapon_bounces = 1; break; } case 5: { weapon_element = DamageElement.electric; weapon_piercing = 0; weapon_bounces = 0; break; } case 6: { weapon_element = DamageElement.plasma; weapon_piercing = 0; weapon_bounces = 0; break; } case 7: { weapon_element = DamageElement.gamma; weapon_piercing = 0; weapon_bounces = 0; break; } case 8: { weapon_element = DamageElement.graviton; weapon_piercing = 0; weapon_bounces = 0; break; } default: { weapon_element = DamageElement.pulse; weapon_piercing = 0; weapon_bounces = 0; break; } } }
/// <summary> /// 造成伤害 /// </summary> /// <param name="source">伤害来源</param> /// <param name="dest">伤害目标</param> /// <param name="originalTarget">最初的伤害目标</param> /// <param name="magnitude">伤害点数</param> /// <param name="elemental">伤害属性</param> /// <param name="cards">造成伤害的牌</param> public void DoDamage(Player source, Player dest, Player originalTarget, int magnitude, DamageElement elemental, ICard card, ReadOnlyCard readonlyCard) { if (dest.IsDead) return; var damageArgs = new DamageEventArgs() { Source = source, OriginalTarget = originalTarget, Targets = new List<Player>(), Magnitude = magnitude, Element = elemental }; HealthChangedEventArgs healthChangedArgs; int ironShackledDamage = 0; DamageElement ironShackledDamageElement = DamageElement.None; if (readonlyCard == null) { readonlyCard = new ReadOnlyCard(new Card() { Place = new DeckPlace(null, null) }); } damageArgs.ReadonlyCard = readonlyCard; if (card is CompositeCard) { if ((card as CompositeCard).Subcards != null) { damageArgs.Cards = new List<Card>((card as CompositeCard).Subcards); } } else if (card is Card) { damageArgs.Cards = new List<Card>() { card as Card }; } else { damageArgs.Cards = new List<Card>(); } damageArgs.Targets.Add(dest); damageArgs.Card = card; try { //伤害来源与基数、属性的确定发生在伤害结算前,连环,以及转移的伤害不会重新确定来源与基数,所以不会多次触发【裸衣】,以及【酒】 while (damageArgs.ReadonlyCard[SourceAndElementIsConfirmed] == 0) { Emit(GameEvent.DamageSourceConfirmed, damageArgs); Emit(GameEvent.DamageElementConfirmed, damageArgs); damageArgs.ReadonlyCard[SourceAndElementIsConfirmed] = 1; break; } Emit(GameEvent.BeforeDamageComputing, damageArgs); Emit(GameEvent.DamageComputingStarted, damageArgs); Emit(GameEvent.DamageCaused, damageArgs); Emit(GameEvent.DamageInflicted, damageArgs); if (damageArgs.Magnitude == 0) { Trace.TraceInformation("Damage is 0, aborting"); return; } if (damageArgs.Targets[0].IsIronShackled && damageArgs.Element != DamageElement.None) { ironShackledDamage = damageArgs.Magnitude; Trace.TraceInformation("IronShackled damage {0}", ironShackledDamage); ironShackledDamageElement = damageArgs.Element; damageArgs.Targets[0].IsIronShackled = false; // if this is TieSuo damage already, prevent itself from spreading... if (readonlyCard[IsIronShackleDamage] == 1) ironShackledDamage = 0; } healthChangedArgs = new HealthChangedEventArgs(damageArgs); Emit(GameEvent.BeforeHealthChanged, healthChangedArgs); damageArgs.Magnitude = -healthChangedArgs.Delta; } catch (TriggerResultException e) { if (e.Status == TriggerResult.End) { //伤害结算完毕事件应该总是被触发 //受到伤害的角色如果存活能发动的技能/会执行的技能效果:【酒诗②】、执行【天香】摸牌的效果。 Emit(GameEvent.DamageComputingFinished, damageArgs); Trace.TraceInformation("Damage Aborted"); return; } Trace.Assert(false); return; } Trace.Assert(damageArgs.Targets.Count == 1); damageArgs.Targets[0].Health -= damageArgs.Magnitude; Trace.TraceInformation("Player {0} Lose {1} hp, @ {2} hp", damageArgs.Targets[0].Id, damageArgs.Magnitude, damageArgs.Targets[0].Health); NotificationProxy.NotifyDamage(source, damageArgs.Targets[0], damageArgs.Magnitude, damageArgs.Element); try { Emit(GameEvent.AfterHealthChanged, healthChangedArgs); } catch (TriggerResultException) { } Emit(GameEvent.AfterDamageCaused, damageArgs); Emit(GameEvent.AfterDamageInflicted, damageArgs); Emit(GameEvent.DamageComputingFinished, damageArgs); if (ironShackledDamage != 0) { List<Player> toProcess = new List<Player>(AlivePlayers); SortByOrderOfComputation(CurrentPlayer, toProcess); foreach (Player p in toProcess) { if (p.IsIronShackled) { GameDelays.Delay(GameDelayTypes.TieSuoDamage); readonlyCard[IsIronShackleDamage] = 1; DoDamage(damageArgs.Source, p, originalTarget, ironShackledDamage, ironShackledDamageElement, card, readonlyCard); } } } }
/// <summary> /// 造成伤害 /// </summary> /// <param name="source">伤害来源</param> /// <param name="dest">伤害目标</param> /// <param name="originalTarget">最初的伤害目标</param> /// <param name="magnitude">伤害点数</param> /// <param name="elemental">伤害属性</param> /// <param name="cards">造成伤害的牌</param> public void DoDamage(Player source, Player dest, Player originalTarget, int magnitude, DamageElement elemental, ICard card, ReadOnlyCard readonlyCard) { if (dest.IsDead) { return; } var damageArgs = new DamageEventArgs() { Source = source, OriginalTarget = originalTarget, Targets = new List <Player>(), Magnitude = magnitude, Element = elemental }; HealthChangedEventArgs healthChangedArgs; int ironShackledDamage = 0; DamageElement ironShackledDamageElement = DamageElement.None; if (readonlyCard == null) { readonlyCard = new ReadOnlyCard(new Card() { Place = new DeckPlace(null, null) }); } damageArgs.ReadonlyCard = readonlyCard; if (card is CompositeCard) { if ((card as CompositeCard).Subcards != null) { damageArgs.Cards = new List <Card>((card as CompositeCard).Subcards); } } else if (card is Card) { damageArgs.Cards = new List <Card>() { card as Card }; } else { damageArgs.Cards = new List <Card>(); } damageArgs.Targets.Add(dest); damageArgs.Card = card; try { //伤害来源与基数、属性的确定发生在伤害结算前,连环,以及转移的伤害不会重新确定来源与基数,所以不会多次触发【裸衣】,以及【酒】 while (damageArgs.ReadonlyCard[SourceAndElementIsConfirmed] == 0) { Emit(GameEvent.DamageSourceConfirmed, damageArgs); Emit(GameEvent.DamageElementConfirmed, damageArgs); damageArgs.ReadonlyCard[SourceAndElementIsConfirmed] = 1; break; } Emit(GameEvent.BeforeDamageComputing, damageArgs); Emit(GameEvent.DamageComputingStarted, damageArgs); Emit(GameEvent.DamageCaused, damageArgs); Emit(GameEvent.DamageInflicted, damageArgs); if (damageArgs.Magnitude == 0) { Trace.TraceInformation("Damage is 0, aborting"); return; } if (damageArgs.Targets[0].IsIronShackled && damageArgs.Element != DamageElement.None) { ironShackledDamage = damageArgs.Magnitude; Trace.TraceInformation("IronShackled damage {0}", ironShackledDamage); ironShackledDamageElement = damageArgs.Element; damageArgs.Targets[0].IsIronShackled = false; // if this is TieSuo damage already, prevent itself from spreading... if (readonlyCard[IsIronShackleDamage] == 1) { ironShackledDamage = 0; } } healthChangedArgs = new HealthChangedEventArgs(damageArgs); Emit(GameEvent.BeforeHealthChanged, healthChangedArgs); damageArgs.Magnitude = -healthChangedArgs.Delta; } catch (TriggerResultException e) { if (e.Status == TriggerResult.End) { //伤害结算完毕事件应该总是被触发 //受到伤害的角色如果存活能发动的技能/会执行的技能效果:【酒诗②】、执行【天香】摸牌的效果。 Emit(GameEvent.DamageComputingFinished, damageArgs); Trace.TraceInformation("Damage Aborted"); return; } Trace.Assert(false); return; } Trace.Assert(damageArgs.Targets.Count == 1); damageArgs.Targets[0].Health -= damageArgs.Magnitude; Trace.TraceInformation("Player {0} Lose {1} hp, @ {2} hp", damageArgs.Targets[0].Id, damageArgs.Magnitude, damageArgs.Targets[0].Health); NotificationProxy.NotifyDamage(damageArgs.Source, damageArgs.Targets[0], damageArgs.Magnitude, damageArgs.Element); GameDelays.Delay(GameDelays.Damage); try { Emit(GameEvent.AfterHealthChanged, healthChangedArgs); } catch (TriggerResultException) { } Emit(GameEvent.AfterDamageCaused, damageArgs); Emit(GameEvent.AfterDamageInflicted, damageArgs); Emit(GameEvent.DamageComputingFinished, damageArgs); if (ironShackledDamage != 0) { List <Player> toProcess = new List <Player>(AlivePlayers); SortByOrderOfComputation(CurrentPlayer, toProcess); foreach (Player p in toProcess) { if (p.IsIronShackled) { readonlyCard[IsIronShackleDamage] = 1; DoDamage(damageArgs.Source, p, originalTarget, ironShackledDamage, ironShackledDamageElement, card, readonlyCard); } } } }
public void SufferDamage(float damage, DamageType dType, DamageElement dElement, Vector3 origin) { float multiplier = TypeResistance(dType); multiplier *= ElementResistance(dElement); Color damageNumberColour = Color.red; if (multiplier > 1.0f) { damageNumberColour = Color.magenta; } if (multiplier < 1.0f) { damageNumberColour = Color.yellow; } UI.inst.SpawnDamageNumbers(Mathf.CeilToInt(damage), damageNumberColour, transform.position + new Vector3(0.5f, 1.5f, 0f)); if (this is Enemy) { UI.inst.SpawnHealthbar(this); } if (audioSrc != null) { audioSrc.Play(); } for (int i = 0; i < 30; i++) { Particles.inst.Emit(transform.position + Vector3.up, 3f * ((transform.position - origin).normalized + Random.insideUnitSphere), 0.1f, 3.0f, bloodColour, Particles.Type.BLOOD, 1); } damage *= multiplier; if (damage <= 0) { return; } hitTimeCountdown = hitTimeDelay; if (tempHealth >= 0) { if (damage >= tempHealth) { tempHealth = 0.0f; damage -= tempHealth; } } if (damage >= health) { health = 0.0f; Die(); } else { health -= damage; } }
public void DoDamage(Player source, Player dest, int magnitude, DamageElement elemental, ICard card, ReadOnlyCard readonlyCard) { DoDamage(source, dest, dest, magnitude, elemental, card, readonlyCard); }
void Current_ChatBoxMessage(object sender, ChatTextInterceptEventArgs e) { try { if (String.IsNullOrEmpty(e.Text)) { return; } if (Util.IsChat(e.Text)) { return; } string sourceName = String.Empty; string targetName = String.Empty; AttackType attackType = AttackType.Unknown; DamageElement damageElemenet = DamageElement.Unknown; bool isFailedAttack = false; bool isCriticalHit = e.Text.Contains("Critical hit!"); bool isOverpower = e.Text.Contains("Overpower!"); bool isSneakAttack = e.Text.Contains("Sneak Attack!"); bool isRecklessness = e.Text.Contains("Recklessness!"); bool isKillingBlow = false; int damageAmount = 0; // You evaded Remoran Corsair! // Ruschk S****t evaded your attack. // You resist the spell cast by Remoran Corsair // Sentient Crystal Shard resists your spell if (CombatMessages.IsFailedAttack(e.Text)) { isFailedAttack = true; string parsedName = string.Empty; foreach (Regex regex in CombatMessages.FailedAttacks) { Match match = regex.Match(e.Text); if (match.Success) { parsedName = match.Groups["targetname"].Value; break; } } if (e.Text.StartsWith("You evaded ")) { sourceName = parsedName; targetName = CoreManager.Current.CharacterFilter.Name; attackType = AttackType.MeleeMissle; } else if (e.Text.Contains(" evaded your attack")) { sourceName = CoreManager.Current.CharacterFilter.Name; targetName = parsedName; attackType = AttackType.MeleeMissle; } else if (e.Text.StartsWith("You resist the spell cast by ")) { sourceName = parsedName; targetName = CoreManager.Current.CharacterFilter.Name; attackType = AttackType.Magic; } else if (e.Text.Contains(" resists your spell")) { sourceName = CoreManager.Current.CharacterFilter.Name; targetName = parsedName; attackType = AttackType.Magic; } } // You flatten Noble Remains's body with the force of your assault! // Your killing blow nearly turns Shivering Crystalline Wisp inside-out! // The thunder of crushing Pyre Minion is followed by the deafening silence of death! // Old Bones is shattered by your assault! else if (CombatMessages.IsKilledByMeMessage(e.Text)) { isKillingBlow = true; sourceName = CoreManager.Current.CharacterFilter.Name; foreach (Regex regex in CombatMessages.TargetKilledByMe) { Match match = regex.Match(e.Text); if (match.Success) { targetName = match.Groups["targetname"].Value; break; } } } else { foreach (Regex regex in CombatMessages.MeleeMissileReceivedAttacks) { Match match = regex.Match(e.Text); if (match.Success) { sourceName = match.Groups["targetname"].Value; targetName = CoreManager.Current.CharacterFilter.Name; attackType = AttackType.MeleeMissle; damageElemenet = GetElementFromText(e.Text); int.TryParse(match.Groups["points"].Value, out damageAmount); goto Found; } } foreach (Regex regex in CombatMessages.MeleeMissileGivenAttacks) { Match match = regex.Match(e.Text); if (match.Success) { sourceName = CoreManager.Current.CharacterFilter.Name; targetName = match.Groups["targetname"].Value; attackType = AttackType.MeleeMissle; damageElemenet = GetElementFromText(e.Text); int.TryParse(match.Groups["points"].Value, out damageAmount); goto Found; } } foreach (Regex regex in CombatMessages.MagicReceivedAttacks) { Match match = regex.Match(e.Text); if (match.Success) { sourceName = match.Groups["targetname"].Value; targetName = CoreManager.Current.CharacterFilter.Name; attackType = AttackType.Magic; damageElemenet = GetElementFromText(e.Text); int.TryParse(match.Groups["points"].Value, out damageAmount); goto Found; } } foreach (Regex regex in CombatMessages.MagicGivenAttacks) { Match match = regex.Match(e.Text); if (match.Success) { sourceName = CoreManager.Current.CharacterFilter.Name; targetName = match.Groups["targetname"].Value; attackType = AttackType.Magic; damageElemenet = GetElementFromText(e.Text); int.TryParse(match.Groups["points"].Value, out damageAmount); goto Found; } } foreach (Regex regex in CombatMessages.MagicCastAttacks) { Match match = regex.Match(e.Text); if (match.Success) { sourceName = CoreManager.Current.CharacterFilter.Name; targetName = match.Groups["targetname"].Value; attackType = AttackType.Magic; damageElemenet = DamageElement.None; goto Found; } } Found :; } if (sourceName == String.Empty && targetName == String.Empty) { return; } if (!isKillingBlow && attackType == AttackType.Unknown) { Debug.WriteToChat("Unable to parse attack type from: " + e.Text); } if (!isKillingBlow && !isFailedAttack && damageElemenet == DamageElement.Unknown) { Debug.WriteToChat("Unable to parse damage element from: " + e.Text); } CombatEventArgs combatEventArgs = new CombatEventArgs(sourceName, targetName, attackType, damageElemenet, isFailedAttack, isCriticalHit, isOverpower, isSneakAttack, isRecklessness, isKillingBlow, damageAmount); if (CombatEvent != null) { CombatEvent(combatEventArgs); } } catch (Exception ex) { Debug.LogException(ex, e.Text); } }
public void NotifyDamage(Player source, Player target, int magnitude, DamageElement element) { }
public void AddDamageType(DamageElement element) { switch (element) { case DamageElement.Blaster: { Impact.AddImpact(direction, 5); takeDamage(5); blasterHit = false; break; } case DamageElement.Flak: { Impact.AddImpact(direction, 5); takeDamage(3); flakHit = false; break; } case DamageElement.Photon: { Impact.AddImpact(direction, 3); takeDamage(4); photonHit = false; break; } case DamageElement.Piercer: { Impact.AddImpact(direction, 1); takeDamage(1); piercerHit = false; break; } case DamageElement.Titan: { Impact.AddImpact(direction, 50); takeDamage(10); titanHit = false; break; } case DamageElement.Hyper: { Impact.AddImpact(direction, 30); takeDamage(30); hyperHit = false; break; } case DamageElement.Vortex: { Impact.AddImpact(direction, 50); takeDamage(80); vortexHit = false; break; } } }
public DamageElementAmountTuple(DamageElement damageElement, MinMaxFloat amount) { this.damageElement = damageElement; this.amount = amount; }
public DamageElementInflictionTuple(DamageElement damageElement, float infliction) { this.damageElement = damageElement; this.infliction = infliction; }
public void NotifyDamage(Player source, Player target, int magnitude, DamageElement element) { Application.Current.Dispatcher.Invoke((ThreadStart)delegate() { foreach (var profile in playersMap.Values) { if (profile.PlayerModel.Player == target) { profile.PlayAnimation(new DamageAnimation(), 1, new Point(0, 0)); profile.Tremble(); } } gameLogs.AppendDamageLog(source, target, magnitude, element); rtbLog.ScrollToEnd(); Uri uri = GameSoundLocator.GetSystemSound("Damage"); GameSoundPlayer.PlaySoundEffect(uri); }); }
public static Paragraph RichTranslateDamage(Player source, Player target, int magnitude, DamageElement element) { Paragraph para = new Paragraph(); para.Inlines.Add(new Run(Translate(target))); string sourceStr = Translate(source); if (sourceStr != string.Empty) { sourceStr += "造成的"; } string damageStr = string.Format("受到{0}{1}点{2}伤害,体力为{3}", sourceStr, magnitude, Translate(element), target.Health); para.Inlines.Add(new Run(damageStr) { Foreground = RedBrush }); return(para); }