Skip to content

Commit c9ac218

Browse files
author
尧杰 曾
committed
添加项目文件。
1 parent 04ef9e2 commit c9ac218

20 files changed

+656
-0
lines changed

PermissionSync.sln

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.2.32526.322
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PermissionSync", "PermissionSync\PermissionSync.csproj", "{86E989A1-B0FC-4874-94C0-6129E89CAE9E}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{86E989A1-B0FC-4874-94C0-6129E89CAE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{86E989A1-B0FC-4874-94C0-6129E89CAE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{86E989A1-B0FC-4874-94C0-6129E89CAE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{86E989A1-B0FC-4874-94C0-6129E89CAE9E}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {F32EBC57-495D-46F3-9A94-C9D2A190B14C}
24+
EndGlobalSection
25+
EndGlobal
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Rocket.API;
7+
using Rocket.Unturned.Player;
8+
using Rocket.Unturned.Chat;
9+
10+
namespace PermissionSync.Command
11+
{
12+
public class PermissionSync :IRocketCommand
13+
{
14+
public string Name => "PermissionSync";
15+
16+
public List<string> Aliases => new List<string>() { "ps", "permssionsy" };
17+
18+
public List<string> Permissions => new List<string>() { "permissionsync.sync" };
19+
20+
public string Help => "Sync permission group between multiple servers";
21+
22+
public string Syntax => "<add | remove > <player> <PermiisonGroupId> [ExpireDate] ";
23+
24+
public AllowedCaller AllowedCaller => AllowedCaller.Both;
25+
26+
public void Execute(IRocketPlayer caller, string[] args)
27+
{
28+
if (args.Length > 2 && args.Length <= 4)
29+
{
30+
if (args.Length == 3)
31+
{
32+
if (args[0] == "add")
33+
{
34+
if (ulong.TryParse(args[1], out ulong result))
35+
{
36+
var player = UnturnedPlayer.FromCSteamID(new Steamworks.CSteamID(result));
37+
Main.Instance.databese.AddPermission((caller.Id),player, args[2]);
38+
UnturnedChat.Say(caller, Main.Instance.Translate("add_permission"));
39+
}
40+
else
41+
{
42+
var player = UnturnedPlayer.FromName(args[1]);
43+
if (player != null)
44+
{
45+
Main.Instance.databese.AddPermission(caller.Id, player, args[2]);
46+
UnturnedChat.Say(caller, Main.Instance.Translate("add_permission"));
47+
}
48+
else
49+
{
50+
UnturnedChat.Say(caller, Main.Instance.Translate("player_not_found"), UnityEngine.Color.red);
51+
}
52+
}
53+
}
54+
if (args[0] == "remove")
55+
{
56+
if (ulong.TryParse(args[1], out ulong result))
57+
{
58+
var player = UnturnedPlayer.FromCSteamID(new Steamworks.CSteamID(result));
59+
Main.Instance.databese.RemovePermission(player, args[2]);
60+
UnturnedChat.Say(caller, Main.Instance.Translate("remove_permission"));
61+
}
62+
else
63+
{
64+
var player = UnturnedPlayer.FromName(args[1]);
65+
if (player != null)
66+
{
67+
Main.Instance.databese.RemovePermission(player, args[2]);
68+
UnturnedChat.Say(caller, Main.Instance.Translate("remove_permission"));
69+
}
70+
else
71+
{
72+
UnturnedChat.Say(caller, Main.Instance.Translate("player_not_found"), UnityEngine.Color.red);
73+
}
74+
}
75+
}
76+
}
77+
if(args.Length == 4)
78+
{
79+
if (args[0] == "add")
80+
{
81+
if (ulong.TryParse(args[1], out ulong result))
82+
{
83+
var player = UnturnedPlayer.FromCSteamID(new Steamworks.CSteamID(result));
84+
Main.Instance.databese.AddPermission(caller.Id,player, args[2], args[3]);
85+
UnturnedChat.Say(caller, Main.Instance.Translate("add_permission"));
86+
}
87+
else
88+
{
89+
var player = UnturnedPlayer.FromName(args[1]);
90+
if (player != null)
91+
{
92+
Main.Instance.databese.AddPermission(caller.Id, player, args[2], args[3]);
93+
}
94+
else
95+
{
96+
UnturnedChat.Say(caller, Main.Instance.Translate("player_not_found"), UnityEngine.Color.red);
97+
}
98+
}
99+
}
100+
if (args[0] == "remove")
101+
{
102+
if (ulong.TryParse(args[1], out ulong result))
103+
{
104+
var player = UnturnedPlayer.FromCSteamID(new Steamworks.CSteamID(result));
105+
Main.Instance.databese.RemovePermission(player, args[2]);
106+
}
107+
else
108+
{
109+
var player = UnturnedPlayer.FromName(args[1]);
110+
if (player != null)
111+
{
112+
Main.Instance.databese.RemovePermission(player, args[2]);
113+
}
114+
else
115+
{
116+
UnturnedChat.Say(caller, Main.Instance.Translate("player_not_found"), UnityEngine.Color.red);
117+
}
118+
}
119+
}
120+
}
121+
}
122+
else
123+
{
124+
UnturnedChat.Say(caller, Main.Instance.Translate(""), UnityEngine.Color.red);
125+
}
126+
}
127+
}
128+
}

PermissionSync/Configuration.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Rocket.API;
7+
8+
namespace PermissionSync
9+
{
10+
public class Configuration :IRocketPluginConfiguration
11+
{
12+
public string DatabaseAddress;
13+
public string DatabaseUsername;
14+
public string DatabasePassword;
15+
public string DatabaseName;
16+
public string DatabaseTableName;
17+
public int DatabasePort;
18+
public void LoadDefaults()
19+
{
20+
DatabaseAddress = "127.0.0.1";
21+
DatabaseUsername = "unturned";
22+
DatabasePassword = "password";
23+
DatabaseName = "unturned";
24+
DatabaseTableName = "permissionsync";
25+
DatabasePort = 3306;
26+
}
27+
}
28+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Steamworks;
7+
8+
namespace PermissionSync.Data
9+
{
10+
public class PermissionData
11+
{
12+
public CSteamID SteamID { get; internal set; }
13+
14+
public string OperatorID { get; internal set; }
15+
public string PermissionID { get; internal set; }
16+
public DateTime ExpireDate { get; internal set; }
17+
18+
19+
public PermissionData(CSteamID steamID, string permissionID, DateTime expireDate, string operatorID)
20+
{
21+
SteamID = steamID;
22+
PermissionID = permissionID;
23+
ExpireDate = expireDate;
24+
OperatorID = operatorID;
25+
}
26+
}
27+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using MySql.Data.MySqlClient;
7+
using Rocket.Core.Logging;
8+
9+
namespace PermissionSync.Database
10+
{
11+
internal class DBConnectionManager
12+
{
13+
internal MySqlConnection CreateConnection()
14+
{
15+
MySqlConnection connection = null;
16+
17+
try
18+
{
19+
if(Main.Instance.Configuration.Instance.DatabasePort == 0)
20+
{
21+
Main.Instance.Configuration.Instance.DatabasePort = 3306;
22+
}
23+
connection = new MySqlConnection(
24+
$"SERVER={Main.Instance.Configuration.Instance.DatabaseAddress};DATABASE={Main.Instance.Configuration.Instance.DatabaseName};UID={Main.Instance.Configuration.Instance.DatabaseUsername};PASSWORD={Main.Instance.Configuration.Instance.DatabasePassword};PORT={Main.Instance.Configuration.Instance.DatabasePort};");
25+
}
26+
catch(Exception ex)
27+
{
28+
Logger.LogException(ex);
29+
}
30+
return connection;
31+
}
32+
33+
/// <summary>
34+
/// Executes a MySql query.
35+
/// </summary>
36+
/// <param name="isScalar">If the query is expected to return a value.</param>
37+
/// <param name="query">The query to execute.</param>
38+
/// <returns>The value if isScalar is true, null otherwise.</returns>
39+
internal object ExecuteQuery(bool isScalar, string query)
40+
{
41+
// This method is to reduce the amount of copy paste that there was within this class.
42+
// Initiate result and connection globally instead of within TryCatch context.
43+
var connection = CreateConnection();
44+
object result = null;
45+
46+
try
47+
{
48+
// Initialize command within try context, and execute within it as well.
49+
var command = connection.CreateCommand();
50+
command.CommandText = query;
51+
connection.Open();
52+
if (isScalar)
53+
result = command.ExecuteScalar();
54+
else
55+
command.ExecuteNonQuery();
56+
}
57+
catch (Exception ex)
58+
{
59+
// Catch and log any errors during execution, like connection or similar.
60+
Logger.LogException(ex);
61+
}
62+
finally
63+
{
64+
// No matter what happens, close the connection at the end of execution.+
65+
connection.Close();
66+
}
67+
68+
return result;
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)