Initial work to move all Server Side Character code to its own module.
This commit is contained in:
parent
afffa46ef2
commit
915e791406
11 changed files with 137 additions and 43 deletions
|
|
@ -735,7 +735,7 @@ namespace TShockAPI
|
|||
|
||||
var group = TShock.Utils.GetGroup(user.Group);
|
||||
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
if (group.HasPermission(Permissions.bypassssc))
|
||||
{
|
||||
|
|
@ -758,7 +758,7 @@ namespace TShockAPI
|
|||
args.Player.IsLoggedIn = true;
|
||||
args.Player.IgnoreActionsForInventory = "none";
|
||||
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter)
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.PlayerData.CopyCharacter(args.Player);
|
||||
TShock.CharacterDB.InsertPlayerData(args.Player);
|
||||
|
|
@ -1347,7 +1347,7 @@ namespace TShockAPI
|
|||
|
||||
private static void SaveSSC(CommandArgs args)
|
||||
{
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.SendSuccessMessage("SSC has been saved.");
|
||||
foreach (TSPlayer player in TShock.Players)
|
||||
|
|
@ -1362,7 +1362,7 @@ namespace TShockAPI
|
|||
|
||||
private static void OverrideSSC(CommandArgs args)
|
||||
{
|
||||
if (!TShock.Config.ServerSideCharacter)
|
||||
if (!Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.SendErrorMessage("Server Side Characters is disabled.");
|
||||
return;
|
||||
|
|
@ -1473,7 +1473,7 @@ namespace TShockAPI
|
|||
private static void Off(CommandArgs args)
|
||||
{
|
||||
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
foreach (TSPlayer player in TShock.Players)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -201,15 +201,6 @@ namespace TShockAPI
|
|||
[Description("Disables the dungeon guardian from being spawned by player packets, this will instead force a respawn.")]
|
||||
public bool DisableDungeonGuardian;
|
||||
|
||||
[Description("Enable server side characters, This stops the client from saving character data! EXPERIMENTAL!!!!!")]
|
||||
public bool ServerSideCharacter;
|
||||
|
||||
[Description("How often SSC should save, in minutes.")]
|
||||
public int ServerSideCharacterSave = 5;
|
||||
|
||||
[Description("Time, in milliseconds, to disallow discarding items after logging in when ServerSideInventory is ON.")]
|
||||
public int LogonDiscardThreshold = 250;
|
||||
|
||||
[Description("Disables clown bomb projectiles from spawning.")]
|
||||
public bool DisableClownBombs;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using MySql.Data.MySqlClient;
|
||||
using Terraria;
|
||||
|
||||
|
|
@ -102,11 +103,36 @@ namespace TShockAPI.DB
|
|||
|
||||
public bool SeedInitialData(User user)
|
||||
{
|
||||
string initialItems = "-15,1,0~-13,1,0~-16,1,45~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0~0,0,0";
|
||||
var inventory = new StringBuilder();
|
||||
for (int i = 0; i < Terraria.Main.maxInventory; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
inventory.Append("~");
|
||||
}
|
||||
if (i < TShock.ServerSideCharacterConfig.StartingInventory.Count)
|
||||
{
|
||||
var item = TShock.ServerSideCharacterConfig.StartingInventory[i];
|
||||
inventory.Append(item.netID).Append(',').Append(item.stack).Append(',').Append(item.prefix);
|
||||
}
|
||||
else
|
||||
{
|
||||
inventory.Append("0,0,0");
|
||||
}
|
||||
}
|
||||
string initialItems = inventory.ToString();
|
||||
try
|
||||
{
|
||||
database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);", user.ID,
|
||||
100, 100, 20, 20, initialItems, -1, -1, 0);
|
||||
database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);",
|
||||
user.ID,
|
||||
TShock.ServerSideCharacterConfig.StartingHealth,
|
||||
TShock.ServerSideCharacterConfig.StartingHealth,
|
||||
TShock.ServerSideCharacterConfig.StartingMana,
|
||||
TShock.ServerSideCharacterConfig.StartingMana,
|
||||
initialItems,
|
||||
-1,
|
||||
-1,
|
||||
0);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
using System;
|
||||
using System.IO;
|
||||
using TShockAPI.ServerSideCharacters;
|
||||
|
||||
namespace TShockAPI
|
||||
{
|
||||
|
|
@ -55,6 +56,14 @@ namespace TShockAPI
|
|||
get { return Path.Combine(TShock.SavePath, "config.json"); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Path to the file containing the config.
|
||||
/// </summary>
|
||||
internal static string ServerSideCharacterConfigPath
|
||||
{
|
||||
get { return Path.Combine(TShock.SavePath, "sscconfig.json"); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an empty file at the given path.
|
||||
/// </summary>
|
||||
|
|
@ -98,6 +107,12 @@ namespace TShockAPI
|
|||
}
|
||||
TShock.Config.Write(ConfigPath);
|
||||
|
||||
if (File.Exists(ServerSideCharacterConfigPath))
|
||||
{
|
||||
TShock.ServerSideCharacterConfig = ServerSideConfig.Read(ServerSideCharacterConfigPath);
|
||||
// Add all the missing config properties in the json file
|
||||
}
|
||||
TShock.ServerSideCharacterConfig.Write(ServerSideCharacterConfigPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1306,7 +1306,7 @@ namespace TShockAPI
|
|||
args.Player.PlayerData.StoreSlot(slot, type, prefix, stack);
|
||||
}
|
||||
else if (
|
||||
TShock.Config.ServerSideCharacter && TShock.Config.DisableLoginBeforeJoin && !bypassTrashCanCheck &&
|
||||
Main.ServerSideCharacter && TShock.Config.DisableLoginBeforeJoin && !bypassTrashCanCheck &&
|
||||
args.Player.HasSentInventory && !args.Player.Group.HasPermission(Permissions.bypassssc)
|
||||
) {
|
||||
// The player might have moved an item to their trash can before they performed a single login attempt yet.
|
||||
|
|
@ -1453,7 +1453,7 @@ namespace TShockAPI
|
|||
|
||||
var group = TShock.Utils.GetGroup(user.Group);
|
||||
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
if (group.HasPermission(Permissions.bypassssc))
|
||||
{
|
||||
|
|
@ -1476,7 +1476,7 @@ namespace TShockAPI
|
|||
args.Player.IsLoggedIn = true;
|
||||
args.Player.IgnoreActionsForInventory = "none";
|
||||
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter)
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.PlayerData.CopyCharacter(args.Player);
|
||||
TShock.CharacterDB.InsertPlayerData(args.Player);
|
||||
|
|
@ -1531,7 +1531,7 @@ namespace TShockAPI
|
|||
|
||||
var group = TShock.Utils.GetGroup(user.Group);
|
||||
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
if (group.HasPermission(Permissions.bypassssc))
|
||||
{
|
||||
|
|
@ -1554,7 +1554,7 @@ namespace TShockAPI
|
|||
args.Player.IsLoggedIn = true;
|
||||
args.Player.IgnoreActionsForInventory = "none";
|
||||
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter)
|
||||
if (!args.Player.IgnoreActionsForClearingTrashCan && Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.PlayerData.CopyCharacter(args.Player);
|
||||
TShock.CharacterDB.InsertPlayerData(args.Player);
|
||||
|
|
@ -1965,7 +1965,7 @@ namespace TShockAPI
|
|||
args.Player.SendTileSquare(tileX, tileY, 4);
|
||||
return true;
|
||||
}
|
||||
if (action == EditAction.PlaceTile && (editData == 29 || editData == 97) && TShock.Config.ServerSideCharacter)
|
||||
if (action == EditAction.PlaceTile && (editData == 29 || editData == 97) && Main.ServerSideCharacter)
|
||||
{
|
||||
args.Player.SendErrorMessage("You cannot place this tile because server side characters are enabled.");
|
||||
args.Player.SendTileSquare(tileX, tileY, 3);
|
||||
|
|
@ -2625,7 +2625,7 @@ namespace TShockAPI
|
|||
}
|
||||
}
|
||||
|
||||
if (args.TPlayer.difficulty == 2 && TShock.Config.ServerSideCharacter && args.Player.IsLoggedIn)
|
||||
if (args.TPlayer.difficulty == 2 && Main.ServerSideCharacter && args.Player.IsLoggedIn)
|
||||
{
|
||||
User user = TShock.Users.GetUserByName(args.Player.UserAccountName);
|
||||
if (TShock.CharacterDB.RemovePlayer(user.ID))
|
||||
|
|
@ -2826,7 +2826,7 @@ namespace TShockAPI
|
|||
else
|
||||
args.Player.InitSpawn = true;
|
||||
|
||||
if ((TShock.Config.ServerSideCharacter) && (args.Player.sX > 0) && (args.Player.sY > 0) && (args.TPlayer.SpawnX > 0) && ((args.TPlayer.SpawnX != args.Player.sX) && (args.TPlayer.SpawnY != args.Player.sY)))
|
||||
if ((Main.ServerSideCharacter) && (args.Player.sX > 0) && (args.Player.sY > 0) && (args.TPlayer.SpawnX > 0) && ((args.TPlayer.SpawnX != args.Player.sX) && (args.TPlayer.SpawnY != args.Player.sY)))
|
||||
{
|
||||
|
||||
args.Player.sX=args.TPlayer.SpawnX;
|
||||
|
|
@ -2836,7 +2836,7 @@ namespace TShockAPI
|
|||
args.Player.Teleport(args.Player.sX * 16, (args.Player.sY * 16) -48);
|
||||
}
|
||||
|
||||
else if ((TShock.Config.ServerSideCharacter) && (args.Player.sX > 0) && (args.Player.sY > 0))
|
||||
else if ((Main.ServerSideCharacter) && (args.Player.sX > 0) && (args.Player.sY > 0))
|
||||
{
|
||||
if (((Main.tile[args.Player.sX, args.Player.sY - 1].active() && Main.tile[args.Player.sX, args.Player.sY - 1].type == 79)) && (WorldGen.StartRoomCheck(args.Player.sX, args.Player.sY -1)))
|
||||
args.Player.Teleport(args.Player.sX * 16, (args.Player.sY * 16) -48);
|
||||
|
|
@ -3098,7 +3098,7 @@ namespace TShockAPI
|
|||
args.Player.SendData(PacketTypes.ItemDrop, "", id);
|
||||
return true;
|
||||
}
|
||||
if ((TShock.Config.ServerSideCharacter) && (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - args.Player.LoginMS < TShock.Config.LogonDiscardThreshold))
|
||||
if ((Main.ServerSideCharacter) && (DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond - args.Player.LoginMS < TShock.ServerSideCharacterConfig.LogonDiscardThreshold))
|
||||
{
|
||||
//Player is probably trying to sneak items onto the server in their hands!!!
|
||||
Log.ConsoleInfo(string.Format("Player {0} tried to sneak {1} onto the server!", args.Player.Name, item.name));
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ namespace TShockAPI
|
|||
rules.Add("PvPMode", TShock.Config.PvPMode);
|
||||
rules.Add("SpawnProtection", TShock.Config.SpawnProtection);
|
||||
rules.Add("SpawnProtectionRadius", TShock.Config.SpawnProtectionRadius);
|
||||
rules.Add("ServerSideInventory", TShock.Config.ServerSideCharacter);
|
||||
rules.Add("ServerSideInventory", Main.ServerSideCharacter);
|
||||
|
||||
ret.Add("rules", rules);
|
||||
}
|
||||
|
|
|
|||
50
TShockAPI/ServerSideCharacters/ServerSideConfig.cs
Normal file
50
TShockAPI/ServerSideCharacters/ServerSideConfig.cs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.UI;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace TShockAPI.ServerSideCharacters
|
||||
{
|
||||
public class ServerSideConfig
|
||||
{
|
||||
[Description("Enable server side characters, This stops the client from saving character data! EXPERIMENTAL!!!!!")]
|
||||
public bool Enabled;
|
||||
|
||||
[Description("How often SSC should save, in minutes.")]
|
||||
public int ServerSideCharacterSave = 5;
|
||||
|
||||
[Description("Time, in milliseconds, to disallow discarding items after logging in when ServerSideInventory is ON.")]
|
||||
public int LogonDiscardThreshold = 250;
|
||||
|
||||
[Description("The starting default health for new SSC.")]
|
||||
public int StartingHealth = 100;
|
||||
|
||||
[Description("The starting default mana for new SSC.")]
|
||||
public int StartingMana = 20;
|
||||
|
||||
[Description("The starting default inventory for new SSC.")]
|
||||
public List<NetItem> StartingInventory = new List<NetItem>();
|
||||
|
||||
public static ServerSideConfig Read(string path)
|
||||
{
|
||||
using (var reader = new StreamReader(path))
|
||||
{
|
||||
string txt = reader.ReadToEnd();
|
||||
var config = JsonConvert.DeserializeObject<ServerSideConfig>(txt);
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(string path)
|
||||
{
|
||||
using (var writer = new StreamWriter(path))
|
||||
{
|
||||
writer.Write(JsonConvert.SerializeObject(this, Formatting.Indented));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -379,7 +379,7 @@ namespace TShockAPI
|
|||
/// <returns>bool - True/false if it saved successfully</returns>
|
||||
public bool SaveServerCharacter()
|
||||
{
|
||||
if (!TShock.Config.ServerSideCharacter)
|
||||
if (!Main.ServerSideCharacter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -402,7 +402,7 @@ namespace TShockAPI
|
|||
/// <returns>bool - True/false if it saved successfully</returns>
|
||||
public bool SendServerCharacter()
|
||||
{
|
||||
if (!TShock.Config.ServerSideCharacter)
|
||||
if (!Main.ServerSideCharacter)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1129,10 +1129,10 @@ namespace TShockAPI
|
|||
public class PlayerData
|
||||
{
|
||||
public NetItem[] inventory = new NetItem[NetItem.maxNetInventory];
|
||||
public int health = 100;
|
||||
public int maxHealth = 100;
|
||||
public int mana = 20;
|
||||
public int maxMana = 20;
|
||||
public int health = TShock.ServerSideCharacterConfig.StartingHealth;
|
||||
public int maxHealth = TShock.ServerSideCharacterConfig.StartingHealth;
|
||||
public int mana = TShock.ServerSideCharacterConfig.StartingMana;
|
||||
public int maxMana = TShock.ServerSideCharacterConfig.StartingMana;
|
||||
public bool exists;
|
||||
public int spawnX= -1;
|
||||
public int spawnY= -1;
|
||||
|
|
@ -1167,6 +1167,11 @@ namespace TShockAPI
|
|||
if (player.TPlayer.inventory[2] != null && player.TPlayer.inventory[2].netID == -16)
|
||||
this.inventory[2].prefix = player.TPlayer.inventory[2].prefix;
|
||||
|
||||
for (int i = 0; i < TShock.ServerSideCharacterConfig.StartingInventory.Count; i++)
|
||||
{
|
||||
var item = TShock.ServerSideCharacterConfig.StartingInventory[i];
|
||||
StoreSlot(i, item.netID, item.prefix, item.stack);
|
||||
}
|
||||
}
|
||||
|
||||
public void StoreSlot(int slot, int netID, int prefix, int stack)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ using TShockAPI.DB;
|
|||
using TShockAPI.Net;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using TShockAPI.ServerSideCharacters;
|
||||
|
||||
namespace TShockAPI
|
||||
{
|
||||
|
|
@ -66,6 +67,7 @@ namespace TShockAPI
|
|||
public static RememberedPosManager RememberedPos;
|
||||
public static CharacterManager CharacterDB;
|
||||
public static ConfigFile Config { get; set; }
|
||||
public static ServerSideConfig ServerSideCharacterConfig;
|
||||
public static IDbConnection DB;
|
||||
public static bool OverridePort;
|
||||
public static PacketBufferer PacketBuffer;
|
||||
|
|
@ -112,6 +114,10 @@ namespace TShockAPI
|
|||
: base(game)
|
||||
{
|
||||
Config = new ConfigFile();
|
||||
ServerSideCharacterConfig = new ServerSideConfig();
|
||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -15, prefix = 0, stack = 1 });
|
||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -13, prefix = 0, stack = 1 });
|
||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -16, prefix = 0, stack = 1 });
|
||||
Order = 0;
|
||||
}
|
||||
|
||||
|
|
@ -132,7 +138,7 @@ namespace TShockAPI
|
|||
ConfigFile.ConfigRead += OnConfigRead;
|
||||
FileTools.SetupConfig();
|
||||
|
||||
Main.ServerSideCharacter = Config.ServerSideCharacter;
|
||||
Main.ServerSideCharacter = ServerSideCharacterConfig.Enabled;
|
||||
|
||||
DateTime now = DateTime.Now;
|
||||
string logFilename;
|
||||
|
|
@ -658,7 +664,7 @@ namespace TShockAPI
|
|||
LastCheck = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
if (TShock.Config.ServerSideCharacter && (DateTime.UtcNow - LastSave).TotalMinutes >= Config.ServerSideCharacterSave)
|
||||
if (Main.ServerSideCharacter && (DateTime.UtcNow - LastSave).TotalMinutes >= ServerSideCharacterConfig.ServerSideCharacterSave)
|
||||
{
|
||||
foreach (TSPlayer player in Players)
|
||||
{
|
||||
|
|
@ -725,13 +731,13 @@ namespace TShockAPI
|
|||
if (player.RecentFuse >0)
|
||||
player.RecentFuse--;
|
||||
|
||||
if ((TShock.Config.ServerSideCharacter) && (player.TPlayer.SpawnX > 0) &&(player.sX != player.TPlayer.SpawnX))
|
||||
if ((Main.ServerSideCharacter) && (player.TPlayer.SpawnX > 0) &&(player.sX != player.TPlayer.SpawnX))
|
||||
{
|
||||
player.sX=player.TPlayer.SpawnX;
|
||||
player.sY=player.TPlayer.SpawnY;
|
||||
}
|
||||
|
||||
if ((TShock.Config.ServerSideCharacter) && (player.sX > 0) && (player.sY > 0) && (player.TPlayer.SpawnX < 0))
|
||||
if ((Main.ServerSideCharacter) && (player.sX > 0) && (player.sY > 0) && (player.TPlayer.SpawnX < 0))
|
||||
{
|
||||
player.TPlayer.SpawnX = player.sX;
|
||||
player.TPlayer.SpawnY = player.sY;
|
||||
|
|
@ -991,7 +997,7 @@ namespace TShockAPI
|
|||
Utils.Broadcast(tsplr.Name + " has left.", Color.Yellow);
|
||||
Log.Info(string.Format("{0} disconnected.", tsplr.Name));
|
||||
|
||||
if (tsplr.IsLoggedIn && !tsplr.IgnoreActionsForClearingTrashCan && TShock.Config.ServerSideCharacter && (!tsplr.Dead || tsplr.TPlayer.difficulty != 2))
|
||||
if (tsplr.IsLoggedIn && !tsplr.IgnoreActionsForClearingTrashCan && Main.ServerSideCharacter && (!tsplr.Dead || tsplr.TPlayer.difficulty != 2))
|
||||
{
|
||||
tsplr.PlayerData.CopyCharacter(tsplr);
|
||||
CharacterDB.InsertPlayerData(tsplr);
|
||||
|
|
@ -1213,7 +1219,7 @@ namespace TShockAPI
|
|||
|
||||
if (!player.IsLoggedIn)
|
||||
{
|
||||
if (Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
{
|
||||
player.SendMessage(
|
||||
player.IgnoreActionsForInventory = "Server side characters is enabled! Please /register or /login to play!",
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@
|
|||
<Compile Include="Rest\RestObject.cs" />
|
||||
<Compile Include="Rest\RestVerbs.cs" />
|
||||
<Compile Include="Rest\SecureRest.cs" />
|
||||
<Compile Include="ServerSideCharacters\ServerSideConfig.cs" />
|
||||
<Compile Include="StatTracker.cs" />
|
||||
<Compile Include="Utils.cs" />
|
||||
<Compile Include="TShock.cs" />
|
||||
|
|
@ -179,7 +180,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.
|
||||
|
|
|
|||
|
|
@ -574,7 +574,7 @@ namespace TShockAPI
|
|||
/// <param name="reason">string reason (default: "Server shutting down!")</param>
|
||||
public void RestartServer(bool save = true, string reason = "Server shutting down!")
|
||||
{
|
||||
if (TShock.Config.ServerSideCharacter)
|
||||
if (Main.ServerSideCharacter)
|
||||
foreach (TSPlayer player in TShock.Players)
|
||||
if (player != null && player.IsLoggedIn && !player.IgnoreActionsForClearingTrashCan)
|
||||
TShock.CharacterDB.InsertPlayerData(player);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue