forked from Megghy/DamageStatistic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDamageStatistic.cs
72 lines (66 loc) · 2.67 KB
/
DamageStatistic.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Terraria;
using TerrariaApi.Server;
using TShockAPI;
namespace DamageStatistic
{
[ApiVersion(2, 1)]
public class DamageStatistic : TerrariaPlugin
{
public override string Name => "DamageStatistic-伤害统计";
public override Version Version => new Version(1, 0);
public override string Author => "Megghy,肝帝熙恩兼容1449";
public override string Description => "显示每个玩家在每次BOSS战后造成的伤害";
public DamageStatistic(Main game) : base(game)
{
}
public override void Initialize()
{
ServerApi.Hooks.NpcSpawn.Register(this, OnNpcSpawn);
ServerApi.Hooks.NpcStrike.Register(this, OnStrike);
ServerApi.Hooks.NpcKilled.Register(this, OnNpcKill);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
ServerApi.Hooks.NpcSpawn.Deregister(this, OnNpcSpawn);
ServerApi.Hooks.NpcStrike.Deregister(this, OnStrike);
ServerApi.Hooks.NpcKilled.Deregister(this, OnNpcKill);
DamageList.Clear();
}
base.Dispose(disposing);
}
private readonly Dictionary<NPC, Dictionary<string, double>> DamageList = new Dictionary<NPC, Dictionary<string, double>>();
private void OnNpcSpawn(NpcSpawnEventArgs args)
{
NPC npc = Main.npc[args.NpcId];
if (npc.boss) DamageList.Add(npc, new Dictionary<string, double>());
}
private void OnStrike(NpcStrikeEventArgs args)
{
if (DamageList.ContainsKey(args.Npc))
{
if (!DamageList[args.Npc].ContainsKey(args.Player.name)) DamageList[args.Npc].Add(args.Player.name, 0);
DamageList[args.Npc][args.Player.name] += args.Damage;
}
}
private void OnNpcKill(NpcKilledEventArgs args)
{
if (DamageList.ContainsKey(args.npc) && DamageList[args.npc].Any())
{
var data = DamageList[args.npc];
double npcLifeMax = 0;
data.ForEach(p => npcLifeMax += data[p.Key]);
var text = new StringBuilder();
data.Keys.ForEach(p => text.Append($"{p}: [c/74F3C9:{data[p]}] <{data[p] / npcLifeMax:0.00%}>, "));
TShock.Utils.Broadcast($"[c/74F3C9:{data.Count}] 位玩家击败了 [c/74F3C9:{args.npc.FullName}]\n{text}", new Color(247, 244, 150));
DamageList.Remove(args.npc);
}
}
}
}