Merge pull request #463 from TShock/general-devel

General devel
This commit is contained in:
Lucas Nicodemus 2012-11-13 19:19:01 -08:00
commit eefa7b539c
10 changed files with 161 additions and 32 deletions

View file

@ -140,7 +140,8 @@ namespace TShockAPI
ChatCommands.Add(new Command(Permissions.tp, TPHere, "tphere") { AllowServer = false });
ChatCommands.Add(new Command(Permissions.tpallow, TPAllow, "tpallow") { AllowServer = false });
add(Permissions.kick, Kick, "kick");
add(Permissions.ban, Ban, "ban", "banip", "listbans", "unban", "unbanip", "clearbans");
add(Permissions.ban, DeprecateBans, "banip", "listbans", "unban", "unbanip", "clearbans");
add(Permissions.ban, Ban, "ban");
add(Permissions.whitelist, Whitelist, "whitelist");
add(Permissions.maintenance, Off, "off", "exit");
add(Permissions.maintenance, Restart, "restart"); //Added restart command
@ -161,7 +162,8 @@ namespace TShockAPI
add(Permissions.spawnboss, SkeletronPrime, "skeletronp", "prime");
add(Permissions.spawnboss, Hardcore, "hardcore");
add(Permissions.spawnmob, SpawnMob, "spawnmob", "sm");
add(Permissions.warp, Warp, "warp", "setwarp", "delwarp", "sendwarp", "sw");
add(Permissions.warp, Warp, "warp");
add(null, DeprecateWarp, "setwarp", "sendwarp", "delwarp", "sw");
add(Permissions.managegroup, AddGroup, "addgroup");
add(Permissions.managegroup, DeleteGroup, "delgroup");
add(Permissions.managegroup, ModifyGroup, "modgroup");
@ -209,6 +211,7 @@ namespace TShockAPI
add(Permissions.cfg, WorldInfo, "world");
add(Permissions.savessi, SaveSSI, "savessi");
add(Permissions.savessi, OverrideSSI, "overridessi", "ossi");
add(Permissions.xmas, ForceXmas, "forcexmas");
//add(null, TestCallbackCommand, "test");
}
@ -223,9 +226,9 @@ namespace TShockAPI
string cmdName = args[0].ToLower();
args.RemoveAt(0);
Command cmd = ChatCommands.FirstOrDefault(c => c.HasAlias(cmdName));
IEnumerable<Command> cmds = ChatCommands.Where(c => c.HasAlias(cmdName));
if (cmd == null)
if (cmds.Count() == 0)
{
if (player.AwaitingResponse.ContainsKey(cmdName))
{
@ -237,23 +240,25 @@ namespace TShockAPI
player.SendErrorMessage("Invalid command entered. Type /help for a list of valid commands.");
return true;
}
if (!cmd.CanRun(player))
{
TShock.Utils.SendLogs(string.Format("{0} tried to execute /{1}.", player.Name, cmdText), Color.Red);
player.SendErrorMessage("You do not have access to that command.");
}
else if (!cmd.AllowServer && !player.RealPlayer)
{
player.SendErrorMessage("You must use this command in-game.");
}
else
{
if (cmd.DoLog)
TShock.Utils.SendLogs(string.Format("{0} executed: /{1}.", player.Name, cmdText), Color.Red);
cmd.Run(cmdText, player, args);
}
return true;
foreach (Command cmd in cmds)
{
if (!cmd.CanRun(player))
{
TShock.Utils.SendLogs(string.Format("{0} tried to execute /{1}.", player.Name, cmdText), Color.Red);
player.SendErrorMessage("You do not have access to that command.");
}
else if (!cmd.AllowServer && !player.RealPlayer)
{
player.SendErrorMessage("You must use this command in-game.");
}
else
{
if (cmd.DoLog)
TShock.Utils.SendLogs(string.Format("{0} executed: /{1}.", player.Name, cmdText), Color.Red);
cmd.Run(cmdText, player, args);
}
}
return true;
}
/// <summary>
@ -437,6 +442,8 @@ namespace TShockAPI
args.Player.LoginHarassed = false;
}
Hooks.PlayerLoginEvent.OnPlayerLogin(args.Player);
}
else
{
@ -798,10 +805,19 @@ namespace TShockAPI
}
}
private static void DeprecateBans(CommandArgs args)
{
args.Player.SendInfoMessage("All ban commands were merged into one in TShock 4.0.");
args.Player.SendInfoMessage("Syntax: /ban [option] [arguments]");
args.Player.SendInfoMessage("Options: list, listip, clear, add, addip, del, delip");
args.Player.SendInfoMessage("Arguments: list, listip, clear [code], add [name], addip [ip], del [name], delip [name]");
args.Player.SendInfoMessage("In addition, a reason may be provided for all new bans after the arguments.");
return;
}
private static void Ban(CommandArgs args)
{
if (args.Parameters[0].ToLower() == "help")
if (args.Parameters.Count == 0 || args.Parameters[0].ToLower() == "help")
{
args.Player.SendInfoMessage("All ban commands were merged into one in TShock 4.0.");
args.Player.SendInfoMessage("Syntax: /ban [option] [arguments]");
@ -1136,6 +1152,38 @@ namespace TShockAPI
}
}
private static void ForceXmas(CommandArgs args)
{
if(args.Parameters.Count == 0)
{
args.Player.SendErrorMessage("Usage: /forcexmas [true/false]");
args.Player.SendInfoMessage(
String.Format("The server is currently {0} force Christmas mode.",
(TShock.Config.ForceXmas ? "in" : "not in")));
return;
}
if(args.Parameters[0].ToLower() == "true")
{
TShock.Config.ForceXmas = true;
Main.checkXMas();
}
else if(args.Parameters[0].ToLower() == "false")
{
TShock.Config.ForceXmas = false;
Main.checkXMas();
}
else
{
args.Player.SendErrorMessage("Usage: /forcexmas [true/false]");
return;
}
args.Player.SendInfoMessage(
String.Format("The server is currently {0} force Christmas mode.",
(TShock.Config.ForceXmas ? "in" : "not in")));
}
#endregion Player Management Commands
#region Server Maintenence Commands
@ -1619,6 +1667,25 @@ namespace TShockAPI
args.Player.TPAllow = !args.Player.TPAllow;
}
private static void DeprecateWarp(CommandArgs args)
{
if (args.Player.Group.HasPermission(Permissions.managewarp))
{
args.Player.SendInfoMessage("All warp commands were merged into one in TShock 4.0.");
args.Player.SendInfoMessage("Previous warps with spaces should be wrapped in single quotes.");
args.Player.SendInfoMessage("Invalid syntax. Syntax: /warp [command] [arguments]");
args.Player.SendInfoMessage("Commands: add, del, hide, list, send, [warpname]");
args.Player.SendInfoMessage("Arguments: add [warp name], del [warp name], list [page]");
args.Player.SendInfoMessage("Arguments: send [player] [warp name], hide [warp name] [Enable(true/false)]");
args.Player.SendInfoMessage("Examples: /warp add foobar, /warp hide foobar true, /warp foobar");
}
else
{
args.Player.SendErrorMessage("Invalid syntax. Syntax: /warp [name] or /warp list <page>");
args.Player.SendErrorMessage("Previous warps with spaces should be wrapped in single quotes.");
}
}
private static void Warp(CommandArgs args)
{
bool hasManageWarpPermission = args.Player.Group.HasPermission(Permissions.managewarp);
@ -2267,8 +2334,19 @@ namespace TShockAPI
return;
}
int amount = Convert.ToInt32(args.Parameters[0]);
int.TryParse(args.Parameters[0], out amount);
int amount = -1;
if (!int.TryParse(args.Parameters[0], out amount))
{
args.Player.SendWarningMessage(string.Format("Invalid spawnrate ({0})", args.Parameters[0]));
return;
}
if (amount < 0)
{
args.Player.SendWarningMessage("Spawnrate cannot be negative!");
return;
}
NPC.defaultSpawnRate = amount;
TShock.Config.DefaultSpawnRate = amount;
TSPlayer.All.SendInfoMessage(string.Format("{0} changed the spawn rate to {1}.", args.Player.Name, amount));

View file

@ -243,6 +243,8 @@ namespace TShockAPI
[Description("Hide stat tracker console messages.")] public bool HideStatTrackerDebugMessages = true;
[Description("Force Christmas only events to occur all year.")] public bool ForceXmas = false;
/// <summary>
/// Reads a configuration file from a given path
/// </summary>

View file

@ -1384,6 +1384,7 @@ namespace TShockAPI
}
args.Player.SendMessage("Authenticated as " + args.Player.Name + " successfully.", Color.LimeGreen);
Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
Hooks.PlayerLoginEvent.OnPlayerLogin(args.Player);
return true;
}
TShock.Utils.ForceKick(args.Player, "Invalid user account password.", true);

View file

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TShockAPI.Hooks
{
class PlayerLoginEventArgs
{
public TSPlayer Player { get; set; }
public PlayerLoginEventArgs(TSPlayer ply)
{
Player = ply;
}
}
class PlayerLoginEvent
{
public delegate void PlayerLoginD(PlayerLoginEventArgs e);
public static event PlayerLoginD PlayerLogin;
public static void OnPlayerLogin(TSPlayer ply)
{
if(PlayerLogin == null)
{
return;
}
PlayerLoginEventArgs args = new PlayerLoginEventArgs(ply);
PlayerLogin(args);
}
}
}

View file

@ -169,6 +169,8 @@ namespace TShockAPI
[Description("User can use rest api calls.")]
public static readonly string restapi;
[Description("User can force the server to Christmas mode.")] public static readonly string xmas;
static Permissions()
{
foreach (var field in typeof (Permissions).GetFields())

View file

@ -48,5 +48,5 @@ using System.Runtime.InteropServices;
// Build Number
// MMdd of the build
[assembly: AssemblyVersion("3.9.1.0526")]
[assembly: AssemblyFileVersion("3.9.1.0526")]
[assembly: AssemblyVersion("4.0.0.0923")]
[assembly: AssemblyFileVersion("4.0.0.0923")]

View file

@ -40,11 +40,11 @@ namespace TShockAPI
[APIVersion(1, 12)]
public class TShock : TerrariaPlugin
{
private const string LogFormatDefault = "yyyyMMddHHmmss";
private const string LogFormatDefault = "yyyy-MM-dd_HH-mm-ss";
private static string LogFormat = LogFormatDefault;
private static bool LogClear = false;
public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version;
public static readonly string VersionCodename = "4.x & 50,000th download milestone";
public static readonly string VersionCodename = "Welcome to the future.";
public static string SavePath = "tshock";
@ -223,6 +223,7 @@ namespace TShockAPI
ProjectileHooks.SetDefaults += OnProjectileSetDefaults;
WorldHooks.StartHardMode += OnStartHardMode;
WorldHooks.SaveWorld += SaveManager.Instance.OnSaveWorld;
WorldHooks.ChristmasCheck += OnXmasCheck;
NetHooks.NameCollision += NetHooks_NameCollision;
GetDataHandlers.InitGetDataHandler();
@ -323,6 +324,7 @@ namespace TShockAPI
ProjectileHooks.SetDefaults -= OnProjectileSetDefaults;
WorldHooks.StartHardMode -= OnStartHardMode;
WorldHooks.SaveWorld -= SaveManager.Instance.OnSaveWorld;
WorldHooks.ChristmasCheck -= OnXmasCheck;
NetHooks.NameCollision -= NetHooks_NameCollision;
if (File.Exists(Path.Combine(SavePath, "tshock.pid")))
@ -367,6 +369,17 @@ namespace TShockAPI
return;
}
void OnXmasCheck(ChristmasCheckEventArgs args)
{
if (args.Handled)
return;
if(Config.ForceXmas)
{
args.Xmas = true;
args.Handled = true;
}
}
/// <summary>
/// Handles exceptions that we didn't catch or that Red fucked up
/// </summary>

View file

@ -86,6 +86,7 @@
<ItemGroup>
<Compile Include="BackupManager.cs" />
<Compile Include="DB\RegionManager.cs" />
<Compile Include="Hooks\PlayerLoginEvent.cs" />
<Compile Include="SaveManager.cs" />
<Compile Include="DB\BanManager.cs" />
<Compile Include="DB\InventoryManager.cs" />
@ -188,7 +189,7 @@
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_IncrementBeforeBuild="False" BuildVersion_StartDate="2011/6/17" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_BuildAction="Both" BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" />
<UserProperties BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_StartDate="2011/6/17" BuildVersion_IncrementBeforeBuild="False" />
</VisualStudio>
</ProjectExtensions>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View file

@ -212,8 +212,8 @@ namespace TShockAPI
public void Broadcast(int ply, string msg, byte red, byte green, byte blue)
{
TSPlayer.All.SendMessageFromPlayer(msg, red, green, blue, ply);
TSPlayer.Server.SendMessage(msg, red, green, blue);
Log.Info(string.Format("Broadcast: {0}", msg));
TSPlayer.Server.SendMessage(Main.player[ply].name + ": " + msg, red, green, blue);
Log.Info(string.Format("Broadcast: {0}", Main.player[ply].name + ": " + msg));
}
/// <summary>