diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 5b26527b..bc2610fe 100755
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -2134,37 +2134,17 @@ namespace TShockAPI
return true;
if (id != args.Player.Index)
+ return true;
+
+ string pvpMode = TShock.Config.PvPMode.ToLowerInvariant();
+ if (pvpMode == "disabled" || pvpMode == "always" || (DateTime.UtcNow - args.Player.LastPvPTeamChange).TotalSeconds < 5)
{
+ args.Player.SendData(PacketTypes.TogglePvp, "", id);
return true;
}
- if (TShock.Config.PvPMode == "disabled")
- {
- return true;
- }
-
- if (args.TPlayer.hostile != pvp)
- {
- long seconds = (long) (DateTime.UtcNow - args.Player.LastPvpChange).TotalSeconds;
- if (seconds > 5)
- {
- TSPlayer.All.SendMessage(string.Format("{0} has {1} PvP!", args.Player.Name, pvp ? "enabled" : "disabled"),
- Main.teamColor[args.Player.Team]);
- }
- args.Player.LastPvpChange = DateTime.UtcNow;
- }
-
- args.TPlayer.hostile = pvp;
-
- if (TShock.Config.PvPMode == "always")
- {
- if (!pvp)
- args.Player.Spawn();
- }
-
- NetMessage.SendData((int) PacketTypes.TogglePvp, -1, -1, "", args.Player.Index);
-
- return true;
+ args.Player.LastPvPTeamChange = DateTime.UtcNow;
+ return false;
}
private static bool HandlePlayerTeam(GetDataHandlerArgs args)
@@ -2175,15 +2155,16 @@ namespace TShockAPI
return true;
if (id != args.Player.Index)
- {
return true;
- }
- args.TPlayer.team = team;
+ if ((DateTime.UtcNow - args.Player.LastPvPTeamChange).TotalSeconds < 5)
+ {
+ args.Player.SendData(PacketTypes.PlayerTeam, "", id);
+ return true;
+ }
- NetMessage.SendData((int)PacketTypes.PlayerTeam, -1, -1, "", args.Player.Index);
-
- return true;
+ args.Player.LastPvPTeamChange = DateTime.UtcNow;
+ return false;
}
private static bool HandlePlayerUpdate(GetDataHandlerArgs args)
@@ -2244,11 +2225,6 @@ namespace TShockAPI
{
args.Player.SendMessage("You need to rejoin to ensure your trash can is cleared!", Color.Red);
}
- else if (TShock.Config.PvPMode == "always" && !args.TPlayer.hostile)
- {
- args.Player.SendMessage("PvP is forced! Enable PvP or else you can't do anything!",
- Color.Red);
- }
var lastTileX = args.Player.LastNetPosition.X;
var lastTileY = args.Player.LastNetPosition.Y - 48;
if (!args.Player.Teleport(lastTileX, lastTileY))
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index 4eac6a2d..6253d2da 100755
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -130,7 +130,7 @@ namespace TShockAPI
///
/// The last time the player changed their team or pvp status.
///
- public DateTime LastPvpChange;
+ public DateTime LastPvPTeamChange;
///
/// Temp points for use in regions and other plugins.
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index fe392fca..3cf4086a 100755
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -1183,13 +1183,17 @@ namespace TShockAPI
args.Handled = true;
return;
}
- player.LoginMS= DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
-
+
+ player.LoginMS = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
+
Utils.ShowFileToUser(player, "motd.txt");
- if (Config.PvPMode == "always" && !player.TPlayer.hostile)
+ string pvpMode = Config.PvPMode.ToLowerInvariant();
+ if (pvpMode == "always")
{
- player.SendMessage("PvP is forced! Enable PvP else you can't do anything!", Color.Red);
+ player.TPlayer.hostile = true;
+ player.SendData(PacketTypes.TogglePvp, "", player.Index);
+ TSPlayer.All.SendData(PacketTypes.TogglePvp, "", player.Index);
}
if (!player.IsLoggedIn)
@@ -1199,7 +1203,7 @@ namespace TShockAPI
player.SendMessage(
player.IgnoreActionsForInventory = "Server side characters is enabled! Please /register or /login to play!",
Color.Red);
- player.LoginHarassed = true;
+ player.LoginHarassed = true;
}
else if (Config.RequireLogin)
{
@@ -1208,14 +1212,14 @@ namespace TShockAPI
}
}
- player.LastNetPosition = new Vector2(Main.spawnTileX*16f, Main.spawnTileY*16f);
+ player.LastNetPosition = new Vector2(Main.spawnTileX * 16f, Main.spawnTileY * 16f);
- if (Config.RememberLeavePos && (RememberedPos.GetLeavePos(player.Name, player.IP) != Vector2.Zero) && !player.LoginHarassed)
+ if (Config.RememberLeavePos && (RememberedPos.GetLeavePos(player.Name, player.IP) != Vector2.Zero) && !player.LoginHarassed)
{
- player.RPPending=3;
- player.SendMessage("You will be teleported to your last known location...", Color.Red);
+ player.RPPending = 3;
+ player.SendMessage("You will be teleported to your last known location...", Color.Red);
}
-
+
args.Handled = true;
}
@@ -1739,7 +1743,7 @@ namespace TShockAPI
public static bool CheckIgnores(TSPlayer player)
{
- return Config.PvPMode == "always" && !player.TPlayer.hostile || player.IgnoreActionsForInventory != "none" || player.IgnoreActionsForCheating != "none" || player.IgnoreActionsForDisabledArmor != "none" || player.IgnoreActionsForClearingTrashCan || !player.IsLoggedIn && Config.RequireLogin;;
+ return player.IgnoreActionsForInventory != "none" || player.IgnoreActionsForCheating != "none" || player.IgnoreActionsForDisabledArmor != "none" || player.IgnoreActionsForClearingTrashCan || !player.IsLoggedIn && Config.RequireLogin;;
}
public void OnConfigRead(ConfigFile file)