private static void Drawing_OnDraw(EventArgs args) { if (!Enabled) { return; } foreach ( var unit in ObjectManager.Get <Obj_AI_Hero>().Where(h => h.IsValid && h.IsHPBarRendered && h.IsEnemy)) { var barPos = unit.HPBarPosition; var damage = DamageToUnit(unit); var percentHealthAfterDamage = Math.Max(0, unit.Health - damage) / unit.MaxHealth; var champOffset = unit.ChampionName == "Jhin" ? new Vector2(-9, -16) : Vector2.Zero; var xPos = barPos.X + XOffset + champOffset.X; var xPosDamage = xPos + Width * percentHealthAfterDamage; var xPosCurrentHp = xPos + Width * unit.Health / unit.MaxHealth; var yPos = barPos.Y + YOffset + champOffset.Y; if (Killable && damage > unit.Health) { Text.X = (int)(barPos.X + XOffset + champOffset.X); Text.Y = (int)barPos.Y + YOffset + 20; Text.text = "KILLABLE"; Text.OnEndScene(); } if (Fill) { var differenceInHp = xPosCurrentHp - xPosDamage; DamageBar.Color = DamageColor.ToSharpDXColor(); DamageBar.X = (int)(barPos.X + 9 + 107 * percentHealthAfterDamage + champOffset.X); DamageBar.Y = (int)yPos - 1; DamageBar.Width = (int)Math.Round(differenceInHp); DamageBar.Height = Height + 3; DamageBar.OnEndScene(); } if (PredictedHealth) { HealthLine.Start = new Vector2(xPosDamage, yPos - 1); HealthLine.End = new Vector2(xPosDamage, yPos + Height); HealthLine.Width = 2; HealthLine.Color = HealthColor.ToSharpDXColor(); HealthLine.OnEndScene(); } } }
//[PermissionSet(SecurityAction.Assert, Unrestricted = true)] private static void Drawing_OnDraw(EventArgs args) { if (!Enabled) { return; } foreach ( var unit in ObjectManager.Get <AIHeroClient>().Where(h => h.IsValid && h.IsHPBarRendered && h.IsEnemy)) { var barPos = unit.HPBarPosition; var damage = DamageToUnit(unit); var percentHealthAfterDamage = Math.Max(0, unit.Health - damage) / unit.MaxHealth; var yPos = barPos.Y + YOffset; var xPosDamage = barPos.X + XOffset + Width * percentHealthAfterDamage; var xPosCurrentHp = barPos.X + XOffset + Width * unit.Health / unit.MaxHealth; if (Killable && damage > unit.Health) { Text.X = (int)barPos.X + XOffset; Text.Y = (int)barPos.Y + YOffset + 20; Text.text = "KILLABLE"; Text.OnEndScene(); } if (Fill) { var differenceInHp = xPosCurrentHp - xPosDamage; DamageBar.Color = DamageColor.ToBGRA(); DamageBar.X = (int)(barPos.X + 9 + (107 * percentHealthAfterDamage)); DamageBar.Y = (int)yPos - 5; DamageBar.Width = (int)Math.Round(differenceInHp); DamageBar.Height = Height + 14; DamageBar.OnEndScene(); } if (PredictedHealth) { HealthLine.Start = new Vector2(xPosDamage, yPos - 1); HealthLine.End = new Vector2(xPosDamage, yPos + Height); HealthLine.Width = 2; HealthLine.Color = HealthColor.ToBGRA(); HealthLine.OnEndScene(); } } }
private void GlobalEventManager_OnPlayerCharacterDeath(On.RoR2.GlobalEventManager.orig_OnPlayerCharacterDeath orig, GlobalEventManager self, DamageReport damageReport, NetworkUser netUser) { orig(self, damageReport, netUser); if (!netUser) { return; } var attackerBody = damageReport.attackerBody; var damageTaken = damageReport.damageInfo.damage; var healthLeft = damageReport.combinedHealthBeforeDamage; bool wasCrit = damageReport.damageInfo.crit; var dotType = damageReport.dotType; bool wasDot = dotType != DotIndex.None; string prefixStr = string.Empty; if (wasCrit || wasDot) { prefixStr = "<style=cDeath>"; if (wasCrit) { Color critColor = DamageColor.FindColor(DamageColorIndex.WeakPoint); string critStr = Util.GenerateColoredString("Crit ", critColor); prefixStr += critStr; } if (wasDot) { string dotStr = DotIndexToString(dotType); if (!string.IsNullOrWhiteSpace(dotStr)) { Color dotColor = DamageColor.FindColor(damageReport.damageInfo.damageColorIndex); dotStr = Util.GenerateColoredString($"{dotStr} ", dotColor); prefixStr += dotStr; } } prefixStr += "from </style>"; } string text = $"<style=cDeath>Killed by: <style=cIsDamage>{prefixStr}{(attackerBody ? attackerBody.GetDisplayName() : "Unknown causes")}</style> <style=cIsUtility>({damageTaken:F2} damage dealt to '{netUser.userName}' with {healthLeft:F2} health left)</style></style>"; Chat.SendBroadcastChat(new Chat.SimpleChatMessage { baseToken = text }); }
public static string GetDamageColorCode(DamageColorIndex damageColorIndex) { return("#" + ColorUtility.ToHtmlStringRGB(DamageColor.FindColor(damageColorIndex))); }