public void Handle(ImpactEvent arg) { if (arg.Hit <= 0) { return; } var component = arg.Source.Find <HealImpact>(); var sourceEntity = component.GetEntity(); var stats = sourceEntity.Get <StatsContainer>(); if (component == null || stats == null) { return; } var target = component.HealSelf ? arg.Origin : arg.Target; var power = RulesSystem.CalculateTotal(stats, Stats.Power, component.NormalizedPercent); var logSystem = World.Get <GameLogSystem>(); logSystem.StartNewMessage(out var logMsg, out var hoverMsg); logMsg.Append(arg.Origin.GetName()); logMsg.Append(" healed "); logMsg.Append(target.GetName()); logMsg.Append(" for "); logMsg.Append(power.ToString("F0")); hoverMsg.Append(RulesSystem.LastQueryString); logSystem.PostCurrentStrings(GameLogSystem.DamageColor); target.Post(new HealingEvent(power, arg.Origin, target, component.TargetVital)); }
public void Handle(ImpactEvent arg) { if (arg.Hit <= 0) { return; } var addMod = arg.Source.Find <AddModImpact>(); var sourceEntity = addMod.GetEntity(); var stats = sourceEntity.Get <StatsContainer>(); if (addMod == null || stats == null) { return; } var stat = stats.Get(addMod.TargetStat); if (stat == null) { return; } if (stat.HasMod(addMod.ID)) { RemoveStatMod(addMod.ID); } var power = RulesSystem.CalculateTotal(stats, Stats.Power, addMod.NormalizedPercent); stat.AddValueMod(new BaseStat.StatValueMod(power, addMod.ID)); _fastString.Clear(); _fastString.Append("+"); _fastString.Append(power); _fastString.Append(" "); _fastString.Append(stat.Label); var label = _fastString.ToString(); AddStatRemovalTimer( new RemoveStatModifier( stat, new ModEntry( label, label, addMod.ID, addMod.Length, arg.Origin.Entity, arg.Target.Entity, addMod.Icon))); arg.Target.Post(new ModifiersChanged(arg.Target.Entity)); var logSystem = World.Get <GameLogSystem>(); logSystem.StartNewMessage(out var logMsg, out var hoverMsg); logMsg.Append(arg.Origin.GetName()); logMsg.Append(" added "); logMsg.Append(stat.Label); logMsg.Append(" modifier to "); logMsg.Append(arg.Target.GetName()); hoverMsg.AppendNewLine(RulesSystem.LastQueryString.ToString()); hoverMsg.Append(label); hoverMsg.Append(" for "); hoverMsg.Append(addMod.Length); hoverMsg.Append(" "); hoverMsg.Append(StringConst.TimeUnits); logSystem.PostCurrentStrings(power > 0 ? GameLogSystem.HealColor : GameLogSystem.DamageColor); }
/* * var amt = arg.Amount; * bool isCritical = false; * string source = arg.Origin.Get<LabelComponent>()?.Text; * if (string.IsNullOrEmpty(source)) { * var msg = isCritical ? CombatMessages.DamagedCritNoActor : CombatMessages.DamagedNoActor; * msg.Show(UIStyle.Damage.ToHex(), Name, amt.ToString("F0")); * } * else { * var msg = isCritical ? CombatMessages.DamagedCritActor : CombatMessages.DamageFromActor; * msg.Show(UIStyle.Damage.ToHex(), source, Name, amt.ToString("F0")); * } */ public void Handle(ImpactEvent arg) { if (arg.Hit <= 0) { return; } var component = arg.Source.Find <DamageImpact>(); var sourceEntity = component.GetEntity(); var stats = sourceEntity.Get <StatsContainer>(); if (component == null || stats == null) { return; } var targetStat = arg.Target.Stats.GetVital(component.TargetVital); if (targetStat == null) { return; } var power = RulesSystem.CalculateTotal(stats, Stats.Power, component.NormalizedPercent); var logSystem = World.Get <GameLogSystem>(); logSystem.StartNewMessage(out var logMsg, out var hoverMsg); logMsg.Append(arg.Origin.GetName()); logMsg.Append(" hit "); logMsg.Append(power.ToString("F0")); logMsg.Append(" "); logMsg.Append(targetStat.Label); logMsg.Append(" for "); logMsg.Append(arg.Target.GetName()); hoverMsg.Append(RulesSystem.LastQueryString); logSystem.PostCurrentStrings(GameLogSystem.DamageColor); //CollisionExtensions.GetHitMultiplier(impact.Hit, impact.Target) arg.Target.Post(new TakeDamageEvent(power, arg, component.DamageType, component.TargetVital)); }