Skip to content
Closed
175 changes: 79 additions & 96 deletions TShockAPI/GetDataHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,25 @@ private static bool OnPlayerSlot(TSPlayer player, MemoryStream data, byte _plr,
return args.Handled;
}

/// <summary>
/// Connecting - called at a Connecting event
/// </summary>
public static HandlerList<GetDataHandledEventArgs> Connecting = new HandlerList<GetDataHandledEventArgs>();
private static bool OnConnecting(TSPlayer player, MemoryStream data)
{
if (Connecting == null)
return false;

var args = new GetDataHandledEventArgs
{
Player = player,

Data = data
};
Connecting.Invoke(null, args);
return args.Handled;
}

/// <summary>The arguments to a GetSection packet.</summary>
public class GetSectionEventArgs : GetDataHandledEventArgs
{
Expand Down Expand Up @@ -936,6 +955,35 @@ private static bool OnPlayerZone(TSPlayer player, MemoryStream data, byte plr, B
PlayerZone.Invoke(null, args);
return args.Handled;
}

/// <summary>
/// For use in a Password Event
/// </summary>
public class PasswordEventArgs : GetDataHandledEventArgs
{
/// <summary>
/// The Password
/// </summary>
public string Password { get; set; }
}
/// <summary>
/// Password - When clients send password to server
/// </summary>
public static HandlerList<PasswordEventArgs> Password = new HandlerList<PasswordEventArgs>();
private static bool OnPassword(TSPlayer player, MemoryStream data, string password)
{
if (Password == null)
return false;

var args = new PasswordEventArgs
{
Player = player,
Data = data,
Password = password
};
Password.Invoke(null, args);
return args.Handled;
}

/// <summary>
/// For use with a PlayerAnimation event
Expand Down Expand Up @@ -1942,29 +1990,24 @@ private static bool HandleConnecting(GetDataHandlerArgs args)
args.Player.tempGroup = null;
args.Player.Account = account;
args.Player.IsLoggedIn = true;
args.Player.IsDisabledForSSC = false;

if (Main.ServerSideCharacter)
if (OnConnecting(args.Player, args.Data))
{
if (args.Player.HasPermission(Permissions.bypassssc))
{
args.Player.PlayerData.CopyCharacter(args.Player);
TShock.CharacterDB.InsertPlayerData(args.Player);
}
args.Player.PlayerData.RestoreCharacter(args.Player);
return true;
}
args.Player.LoginFailsBySsi = false;

if (args.Player.HasPermission(Permissions.ignorestackhackdetection))
args.Player.IsDisabledForStackDetection = false;
else
{
if (args.Player.HasPermission(Permissions.ignorestackhackdetection))
args.Player.IsDisabledForStackDetection = false;

if (args.Player.HasPermission(Permissions.usebanneditem))
args.Player.IsDisabledForBannedWearable = false;
if (args.Player.HasPermission(Permissions.usebanneditem))
args.Player.IsDisabledForBannedWearable = false;

args.Player.SendSuccessMessage("Authenticated as " + account.Name + " successfully.");
TShock.Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
args.Player.SendSuccessMessage("Authenticated as " + account.Name + " successfully.");
TShock.Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
}
}
}
else if (account != null && !TShock.Config.DisableLoginBeforeJoin)
Expand Down Expand Up @@ -2010,23 +2053,7 @@ private static bool HandleSpawn(GetDataHandlerArgs args)

if (OnPlayerSpawn(args.Player, args.Data, player, spawnx, spawny))
return true;

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;
args.Player.sY = args.TPlayer.SpawnY;

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);
}

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);
}


args.Player.Dead = false;
return false;
}
Expand Down Expand Up @@ -2138,36 +2165,7 @@ private static bool HandlePlayerUpdate(GetDataHandlerArgs args)
{
args.TPlayer.direction = -1;
}

if (args.Player.Confused && Main.ServerSideCharacter && args.Player.IsLoggedIn)
{
if (args.TPlayer.controlUp)
{
args.TPlayer.controlDown = true;
args.TPlayer.controlUp = false;
}
else if (args.TPlayer.controlDown)
{
args.TPlayer.controlDown = false;
args.TPlayer.controlUp = true;
}

if (args.TPlayer.controlLeft)
{
args.TPlayer.controlRight = true;
args.TPlayer.controlLeft = false;
}
else if (args.TPlayer.controlRight)
{
args.TPlayer.controlRight = false;
args.TPlayer.controlLeft = true;
}

args.TPlayer.Update(args.TPlayer.whoAmI);
NetMessage.SendData((int)PacketTypes.PlayerUpdate, -1, -1, NetworkText.Empty, args.Player.Index);
return true;
}


NetMessage.SendData((int)PacketTypes.PlayerUpdate, -1, args.Player.Index, NetworkText.Empty, args.Player.Index);
return true;
}
Expand Down Expand Up @@ -2513,31 +2511,25 @@ private static bool HandlePassword(GetDataHandlerArgs args)
args.Player.tempGroup = null;
args.Player.Account = account;
args.Player.IsLoggedIn = true;
args.Player.IsDisabledForSSC = false;

if (Main.ServerSideCharacter)
if (OnPassword(args.Player, args.Data, password))
{
if (args.Player.HasPermission(Permissions.bypassssc))
{
args.Player.PlayerData.CopyCharacter(args.Player);
TShock.CharacterDB.InsertPlayerData(args.Player);
}
args.Player.PlayerData.RestoreCharacter(args.Player);
return true;
}
else
{
if (args.Player.HasPermission(Permissions.ignorestackhackdetection))
args.Player.IsDisabledForStackDetection = false;

if (args.Player.HasPermission(Permissions.usebanneditem))
args.Player.IsDisabledForBannedWearable = false;

args.Player.SendMessage("Authenticated as " + args.Player.Name + " successfully.", Color.LimeGreen);
TShock.Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
TShock.UserAccounts.SetUserAccountUUID(account, args.Player.UUID);
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
}
args.Player.LoginFailsBySsi = false;

if (args.Player.HasPermission(Permissions.ignorestackhackdetection))
args.Player.IsDisabledForStackDetection = false;

if (args.Player.HasPermission(Permissions.usebanneditem))
args.Player.IsDisabledForBannedWearable = false;


args.Player.SendMessage("Authenticated as " + args.Player.Name + " successfully.", Color.LimeGreen);
TShock.Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user " + args.Player.Name + ".");
TShock.UserAccounts.SetUserAccountUUID(account, args.Player.UUID);
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
}
args.Player.Kick("Your password did not match this character's password.", true, true);
return true;
Expand Down Expand Up @@ -3319,15 +3311,6 @@ private static bool HandlePlayerKillMeV2(GetDataHandlerArgs args)
}
}

if (args.TPlayer.difficulty == 2 && Main.ServerSideCharacter && args.Player.IsLoggedIn)
{
if (TShock.CharacterDB.RemovePlayer(args.Player.Account.ID))
{
args.Player.SendErrorMessage("You have fallen in hardcore mode, and your items have been lost forever.");
TShock.CharacterDB.SeedInitialData(args.Player.Account);
}
}

return false;
}

Expand Down
Loading