-
Notifications
You must be signed in to change notification settings - Fork 0
/
ValheimEventHandler.cs
130 lines (104 loc) · 5.01 KB
/
ValheimEventHandler.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace PhValheimCompanion
{
public enum ValheimEvent
{
OnServerStarted,
OnServerStopped,
OnHungHead,
OnPlayerJoined,
OnPlayerDisconnected,
OnPlayerDeath,
OnPlayerMessage,
OnPlayerShout,
OnPlayerWhisper,
OnPlayerPing,
}
public class ValheimEventHandler
{
private static string GetRandomMessage(IReadOnlyList<string> messages) => messages[new System.Random().Next(0, messages.Count)];
public static void OnServerStarted(string ipAddress = null)
{
if (!Main.Configuration.Events[ValheimEvent.OnServerStarted].Value) return;
//Send to Discord
Utils.PostDiscordMessage(GetRandomMessage(Main.Configuration.messages.OnServerStart).Replace("{{serverAddress}}", ipAddress));
// PhValheim backend message for engine starting
World world = Utils.GetPrivateField<World>(WorldGenerator.instance, "m_world");
var Post = new PhValheimCompanion.JsonTemplates.PhValheimBackendPost_serverStarted()
{
action = "start",
world = world.m_name
};
var jsonPost = JsonConvert.SerializeObject(Post);
Utils.PostPhValheimBackendMessage(jsonPost, Configuration.phvalheimAdminApi);
}
public static void OnServerStopped()
{
if (!Main.Configuration.Events[ValheimEvent.OnServerStopped].Value) return;
Utils.PostDiscordMessage(GetRandomMessage(Main.Configuration.messages.OnServerStop));
}
public static void OnPlayerJoined(ZNet.PlayerInfo playerInfo)
{
if (!Main.Configuration.Events[ValheimEvent.OnPlayerJoined].Value || playerInfo.m_characterID.IsNone()) return;
Utils.PostDiscordMessage(GetRandomMessage(Main.Configuration.messages.OnPlayerJoined).Replace("{{username}}", playerInfo.m_name).Replace("{{userId}}", playerInfo.m_characterID.userID.ToString()));
// PhValheim backend message for player join
World world = Utils.GetPrivateField<World>(WorldGenerator.instance, "m_world");
var Post = new PhValheimCompanion.JsonTemplates.PhValheimBackendPost_playerJoined()
{
action = "join",
world = world.m_name,
citizen = playerInfo.m_name,
steamid = playerInfo.m_host,
//clientip = playerInfo.
};
var jsonPost = JsonConvert.SerializeObject(Post);
Utils.PostPhValheimBackendMessage(jsonPost, Configuration.phvalheimAdminApi);
}
public static void OnPlayerDisconnected(ZNet.PlayerInfo playerInfo)
{
if (!Main.Configuration.Events[ValheimEvent.OnPlayerDisconnected].Value || playerInfo.m_characterID.IsNone()) return;
Utils.PostDiscordMessage(
GetRandomMessage(Main.Configuration.messages.OnPlayerDisconnect)
.Replace("{{username}}", playerInfo.m_name)
.Replace("{{userId}}", playerInfo.m_characterID.userID.ToString())
);
}
public static void OnPlayerDeath(ZNet.PlayerInfo playerInfo)
{
if (!Main.Configuration.Events[ValheimEvent.OnPlayerDeath].Value || playerInfo.m_characterID.IsNone()) return;
Utils.PostDiscordMessage(
GetRandomMessage(Main.Configuration.messages.OnPlayerDeath)
.Replace("{{username}}", playerInfo.m_name)
.Replace("{{userId}}", playerInfo.m_characterID.userID.ToString())
);
}
public static void OnPlayerMessage(Talker.Type type, string user, string message, Vector3 pos)
{
switch (type)
{
case Talker.Type.Whisper:
if (!Main.Configuration.Events[ValheimEvent.OnPlayerWhisper].Value) return;
Utils.PostDiscordMessage(message, $"{user} said");
break;
case Talker.Type.Normal:
if (!Main.Configuration.Events[ValheimEvent.OnPlayerMessage].Value) return;
Utils.PostDiscordMessage(message, $"{user} said");
break;
case Talker.Type.Shout:
if (!Main.Configuration.Events[ValheimEvent.OnPlayerShout].Value) return;
if (Main.Configuration.UpperCaseShout.Value) message = message.ToUpper();
Utils.PostDiscordMessage(message, $"{user} yelled");
break;
case Talker.Type.Ping:
if (!Main.Configuration.Events[ValheimEvent.OnPlayerPing].Value) return;
Utils.PostDiscordMessage($"Location: ({pos.x}x, {pos.y}y, {pos.z}z)", $"{user} pinged");
break;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
}
}