-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserManagement.cs
More file actions
117 lines (103 loc) · 5.09 KB
/
UserManagement.cs
File metadata and controls
117 lines (103 loc) · 5.09 KB
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
using System;
using System.Collections.Generic;
using System.Linq;
using TaleWorlds.Core;
using TaleWorlds.MountAndBlade;
using TaleWorlds.MountAndBlade.Diamond;
namespace CommunityAdminTools
{
internal class UserManagement
{
private readonly AdminTools _adminTools;
public UserManagement(AdminTools adminTools)
{
_adminTools = adminTools;
}
public void Open()
{
var players = GameNetwork.NetworkPeers;
var inquiry = new List<InquiryElement> {new InquiryElement(players, "Everyone", new ImageIdentifier())};
inquiry.AddRange(players.Select(player => new InquiryElement(player, player.UserName.ToString(), new ImageIdentifier(player.VirtualPlayer.Id))));
_adminTools.InquiryData(inquiry,OnSelectPlayers,OnSelectPlayersAborted);
}
private void OnSelectPlayersAborted(List<InquiryElement> obj)
{
InformationManager.HideInquiry();
}
private void OnSelectPlayers(List<InquiryElement> inquiryAnswers)
{
InformationManager.HideInquiry();
var players = inquiryAnswers.Where(i => i.IsEnabled).SelectMany(x =>
{
switch (x.Identifier)
{
case NetworkCommunicator peer:
return new List<NetworkCommunicator> {peer};
case List<NetworkCommunicator> peers:
return peers;
default:
return new List<NetworkCommunicator>();
}
}).ToList();
var inquiry = new List<InquiryElement>
{
new InquiryElement(players, "Kick", new ImageIdentifier()),
new InquiryElement(players, "Ban", new ImageIdentifier()),
new InquiryElement(players, "Goto", new ImageIdentifier()),
new InquiryElement(players, "Heal", new ImageIdentifier()),
new InquiryElement(players, "To me", new ImageIdentifier())
};
_adminTools.InquiryData(inquiry,OnActionsSelected,OnSelectPlayersAborted);
}
private void OnActionsSelected(List<InquiryElement> obj)
{
InformationManager.HideInquiry();
var actionstoTake = obj.Where(j=>j.IsEnabled);
foreach (var action in actionstoTake)
{
switch (action.Title)
{
case "Kick":
foreach (var player in (List<NetworkCommunicator>)action.Identifier)
{
DisconnectInfo disconnectInfo = player.PlayerConnectionInfo.GetParameter<DisconnectInfo>("DisconnectInfo") ?? new DisconnectInfo();
disconnectInfo.Type = DisconnectType.KickedByHost;
player.PlayerConnectionInfo.AddParameter("DisconnectInfo", disconnectInfo);
GameNetwork.AddNetworkPeerToDisconnectAsServer(player);
}
break;
case "Ban":
foreach (var player in (List<NetworkCommunicator>)action.Identifier)
{
//Ban For 1H
BannedPlayerManagerCustomGameClient.AddBannedPlayer(player.VirtualPlayer.Id,Environment.TickCount+1000*60*60);
DisconnectInfo disconnectInfo = player.PlayerConnectionInfo.GetParameter<DisconnectInfo>("DisconnectInfo") ?? new DisconnectInfo();
disconnectInfo.Type = DisconnectType.BannedByPoll;
player.PlayerConnectionInfo.AddParameter("DisconnectInfo", disconnectInfo);
GameNetwork.AddNetworkPeerToDisconnectAsServer(player);
}
break;
case "Goto":
var firstPlayer = ((List<NetworkCommunicator>) action.Identifier).First();
if (firstPlayer.ControlledAgent != null)
{
Mission.Current.MainAgent.TeleportToPosition(firstPlayer.ControlledAgent.Position);
}
break;
case "Heal":
foreach (var player in ((List<NetworkCommunicator>)action.Identifier).Where(player => player.ControlledAgent != null))
{
player.ControlledAgent.Health = player.ControlledAgent.HealthLimit;
}
break;
case "To me":
foreach (var player in (List<NetworkCommunicator>)action.Identifier)
{
player.ControlledAgent.TeleportToPosition(Mission.Current.MainAgent.Position);
}
break;
}
}
}
}
}