/* TShock, a server mod for Terraria Copyright (C) 2011-2019 Pryaxis & TShock Contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.ComponentModel; using TShockAPI.DB; namespace TShockAPI.Hooks { public class AccountDeleteEventArgs { public UserAccount Account { get; private set; } public AccountDeleteEventArgs(UserAccount account) { this.Account = account; } } public class AccountCreateEventArgs { public UserAccount Account { get; private set; } public AccountCreateEventArgs(UserAccount account) { this.Account = account; } } public abstract class AccountGroupUpdateEventArgs : HandledEventArgs { public string AccountName { get; private set; } public Group Group { get; set; } public AccountGroupUpdateEventArgs(string accountName, Group group) { this.AccountName = accountName; this.Group = group; } } public class AccountGroupUpdateByPluginEventArgs : AccountGroupUpdateEventArgs { public AccountGroupUpdateByPluginEventArgs(string accountName, Group group) : base(accountName, group) { } } public class AccountGroupUpdateByPlayerEventArgs : AccountGroupUpdateEventArgs { /// /// The player who updated the user's group /// public TSPlayer Player { get; private set; } public AccountGroupUpdateByPlayerEventArgs(TSPlayer player, string accountName, Group group) : base(accountName, group) { this.Player = player; } } public class AccountHooks { public delegate void AccountCreateD(AccountCreateEventArgs e); public static event AccountCreateD AccountCreate; public static void OnAccountCreate(UserAccount u) { if (AccountCreate == null) return; AccountCreate(new AccountCreateEventArgs(u)); } public delegate void AccountDeleteD(AccountDeleteEventArgs e); public static event AccountDeleteD AccountDelete; public static void OnAccountDelete(UserAccount u) { if (AccountDelete == null) return; AccountDelete(new AccountDeleteEventArgs(u)); } public delegate void AccountGroupUpdateD(AccountGroupUpdateEventArgs e); public static event AccountGroupUpdateD AccountGroupUpdate; public static bool OnAccountGroupUpdate(UserAccount account, TSPlayer author, ref Group group) { AccountGroupUpdateEventArgs args = new AccountGroupUpdateByPlayerEventArgs(author, account.Name, group); AccountGroupUpdate?.Invoke(args); group = args.Group; return args.Handled; } public static bool OnAccountGroupUpdate(UserAccount account, ref Group group) { AccountGroupUpdateEventArgs args = new AccountGroupUpdateByPluginEventArgs(account.Name, group); AccountGroupUpdate?.Invoke(args); group = args.Group; return args.Handled; } } }