-
Notifications
You must be signed in to change notification settings - Fork 0
/
LogPatch.cs
110 lines (95 loc) · 4.05 KB
/
LogPatch.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using TaleWorlds.CampaignSystem;
using TaleWorlds.CampaignSystem.Actions;
using TaleWorlds.Core;
using TaleWorlds.Library;
using TaleWorlds.MountAndBlade;
using TaleWorlds.MountAndBlade.ViewModelCollection.HUD.KillFeed;
using TaleWorlds.MountAndBlade.ViewModelCollection.HUD.KillFeed.Personal;
namespace WarbandCasualtyLog
{
internal class LogPatch
{
public static Color CYAN;
public static Color ORANGE;
public static Color RED;
public static Color PURPLE;
public static Color LIGHT_PURPLE;
/**
* Cancel main method call by returning false, don't want the normal log to display.
* In future would be best to add a separate option from "Report Casualties", but haven't quite figured that out yet.
*/
[HarmonyPatch(typeof(SPKillFeedVM), "OnAgentRemoved")]
public class OnAgentRemovedPatch
{
public static bool Prefix(ref Agent affectedAgent, ref Agent affectorAgent, bool isHeadshot)
{
var builder = new StringBuilder();
builder.Append(affectedAgent.Name);
builder.Append(affectedAgent.State == AgentState.Unconscious ? " knocked unconscious by " : " killed by ");
builder.Append(affectorAgent.Name);
InformationManager.DisplayMessage(new InformationMessage(builder.ToString(), GetColor(affectedAgent, affectedAgent.State == AgentState.Unconscious)));
return false;
}
}
[HarmonyPatch(typeof(SPKillFeedVM), "OnPersonalKill")]
public class OnPersonalKillPatch
{
public static bool Prefix(int damageAmount, bool isMountDamage, bool isFriendlyFire, bool isHeadshot, string killedAgentName, bool isUnconscious)
{
var builder = new StringBuilder();
builder.Append("Delivered damage ");
builder.Append(damageAmount);
InformationManager.DisplayMessage(new InformationMessage(builder.ToString()));
return false;
}
}
[HarmonyPatch(typeof(SPKillFeedVM), "OnPersonalDamage")]
public class OnPersonalDamagePatch
{
public static bool Prefix(int totalDamage, bool isVictimAgentMount, bool isFriendlyFire, string victimAgentName)
{
var builder = new StringBuilder();
builder.Append("Delivered damage ");
builder.Append(totalDamage);
InformationManager.DisplayMessage(new InformationMessage(builder.ToString()));
return false;
}
}
public static void LoadConfigValues()
{
CYAN = Color.ConvertStringToColor(WarbandCasualtyLog.SubModule.DefaultFriendlyKill);
ORANGE = Color.ConvertStringToColor(WarbandCasualtyLog.SubModule.DefaultFriendlyUnconscious);
RED = Color.ConvertStringToColor(WarbandCasualtyLog.SubModule.DefaultFriendlyKilled);
PURPLE = Color.ConvertStringToColor(WarbandCasualtyLog.SubModule.DefaultAllyKilled);
LIGHT_PURPLE = Color.ConvertStringToColor(WarbandCasualtyLog.SubModule.DefaultAllyUnconscious);
}
private static Color GetColor(Agent killed, bool isUnconscious)
{
if (killed.Team != null)
{
if (killed.Team.IsPlayerTeam)
{
return isUnconscious ? ORANGE : RED;
}
else if (killed.Team.IsPlayerAlly)
{
return isUnconscious ? LIGHT_PURPLE : PURPLE;
}
return CYAN;
}
else
{
InformationManager.DisplayMessage(new InformationMessage("ERROR: Warband log exception!"));
return Color.FromUint(4294967295u);
}
}
}
}