Added Disconnect, SendTileSquare, SetPvP to TSPlayer

Added SetBloodMoon, SetTime, StrikeNPC to TSServerPlayer
This commit is contained in:
ricky 2011-06-17 02:08:49 +10:00
parent 5a0b00b398
commit 7bccfbe441
5 changed files with 87 additions and 70 deletions

View file

@ -490,12 +490,8 @@ namespace TShockAPI
private static void Bloodmoon(CommandArgs args)
{
TSPlayer.Server.SetBloodMoon(true);
Tools.Broadcast(string.Format("{0} turned on blood moon.", args.Player.Name));
Main.bloodMoon = true;
Main.time = 0;
Main.dayTime = false;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
}
private static void Invade(CommandArgs args)
@ -728,38 +724,23 @@ namespace TShockAPI
switch (args.Parameters[0])
{
case "day":
Main.time = 0;
Main.dayTime = true;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
TSPlayer.Server.SetTime(true, 0.0);
Tools.Broadcast(string.Format("{0} set time to day.", args.Player.Name));
break;
case "night":
Main.time = 0;
Main.dayTime = false;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
TSPlayer.Server.SetTime(false, 0.0);
Tools.Broadcast(string.Format("{0} set time to night.", args.Player.Name));
break;
case "dusk":
Main.dayTime = false;
Main.time = 0.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
TSPlayer.Server.SetTime(false, 0.0);
Tools.Broadcast(string.Format("{0} set time to dusk.", args.Player.Name));
break;
case "noon":
Main.dayTime = true;
Main.time = 27000.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
TSPlayer.Server.SetTime(true, 27000.0);
Tools.Broadcast(string.Format("{0} set time to noon.", args.Player.Name));
break;
case "midnight":
Main.dayTime = false;
Main.time = 16200.0;
NetMessage.SendData(18, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
TSPlayer.Server.SetTime(false, 16200.0);
Tools.Broadcast(string.Format("{0} set time to midnight.", args.Player.Name));
break;
default:
@ -914,7 +895,7 @@ namespace TShockAPI
{
int.TryParse(args.Parameters[1], out damage);
}
TShock.PlayerDamage(plr, damage);
plr.DamagePlayer(damage);
Tools.Broadcast(string.Format("{0} slapped {1} for {2} damage.",
args.Player.Name, plr.Name, damage));
}
@ -941,9 +922,9 @@ namespace TShockAPI
else
{
var plr = player[0];
plr.DamagePlayer(999999);
args.Player.SendMessage(string.Format("You just killed {0}!", plr.Name));
plr.SendMessage(string.Format("{0} just killed you!", args.Player.Name));
TShock.PlayerDamage(plr, 999999);
}
}
@ -954,8 +935,7 @@ namespace TShockAPI
{
if (!Main.npc[i].townNPC && Main.npc[i].active)
{
Main.npc[i].StrikeNPC(99999, 90f, 1);
NetMessage.SendData(28, -1, -1, "", i, 99999, 90f, 1);
TSPlayer.Server.StrikeNPC(i, 99999, 90f, 1);
killcount++;
}
}

View file

@ -146,7 +146,6 @@ namespace TShockAPI
Tools.ForceKick(args.Player, "Hair crash exploit.");
return true;
}
if (name.Length > 32)
{
Tools.ForceKick(args.Player, "Name exceeded 32 characters.");
@ -215,7 +214,7 @@ namespace TShockAPI
if (!args.Player.Group.HasPermission("editspawn"))
{
args.Player.SendMessage("World protected from changes.", Color.Red);
TShock.SendTileSquare(args.Player, x, y);
args.Player.SendTileSquare(x, y);
return true;
}
}
@ -227,7 +226,7 @@ namespace TShockAPI
if (flag)
{
args.Player.SendMessage("Spawn protected from changes.", Color.Red);
TShock.SendTileSquare(args.Player, x, y);
args.Player.SendTileSquare(x, y);
return true;
}
}
@ -248,12 +247,7 @@ namespace TShockAPI
int id = args.Data.ReadByte();
bool pvp = args.Data.ReadBoolean();
args.TPlayer.hostile = pvp;
if (id != args.Player.Index)
args.TPlayer.hostile = true;
if (ConfigurationManager.PermaPvp)
args.TPlayer.hostile = true;
NetMessage.SendData(30, -1, -1, "", args.Player.Index);
args.Player.SetPvP(id != args.Player.Index || ConfigurationManager.PermaPvp ? true : pvp);
return true;
}
@ -382,11 +376,7 @@ namespace TShockAPI
if (ConfigurationManager.RangeChecks && ((Math.Abs(plyX - tileX) > 32) || (Math.Abs(plyY - tileY) > 32)))
{
Log.Debug(string.Format("Liquid(PlyXY:{0}_{1}, TileXY:{2}_{3}, Result:{4}_{5}, Amount:{6})",
plyX, plyY,
tileX, tileY,
Math.Abs(plyX - tileX), Math.Abs(plyY - tileY),
liquid
));
plyX, plyY, tileX, tileY, Math.Abs(plyX - tileX), Math.Abs(plyY - tileY), liquid));
return Tools.HandleGriefer(args.Player, "Placing impossible to place liquid."); ;
}

View file

@ -19,12 +19,13 @@ using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Terraria;
using TerrariaAPI;
namespace TShockAPI
{
public class TSPlayer
{
public static readonly TSPlayer Server = new ServerPlayer();
public static readonly TSServerPlayer Server = new TSServerPlayer();
public static readonly TSPlayer All = new TSPlayer("All");
public uint TileThreshold { get; set; }
public Dictionary<Vector2, Tile> TilesDestroyed { get; set; }
@ -104,6 +105,22 @@ namespace TShockAPI
Group = new Group("null");
}
public virtual void Disconnect(string reason)
{
if (Index == -1)
return;
NetMessage.SendData((int)PacketTypes.Disconnect, Index, -1, reason, 0x0, 0f, 0f, 0f);
}
public virtual void SendTileSquare(int x, int y, int size = 10)
{
if (Index == -1)
return;
NetMessage.SendData((int)PacketTypes.TileSendSquare, Index, -1, "", size, (float)(x - (size / 2)), (float)(y - (size / 2)), 0f);
}
public virtual void SendMessage(string msg)
{
SendMessage(msg, 0, 255, 0);
@ -116,30 +133,72 @@ namespace TShockAPI
public virtual void SendMessage(string msg, byte red, byte green, byte blue)
{
NetMessage.SendData(0x19, Index, -1, msg, 255, red, green, blue);
NetMessage.SendData((int)PacketTypes.ChatText, Index, -1, msg, 255, red, green, blue);
}
public virtual void DamagePlayer(int damage)
{
if (Index == -1)
return;
NetMessage.SendData((int)PacketTypes.PlayerDamage, -1, -1, "", Index, ((new Random()).Next(-1, 1)), damage, (float)0);
}
public virtual void SetPvP(bool pvp)
{
if (Index == -1)
return;
if (TPlayer.hostile != pvp)
{
TPlayer.hostile = pvp;
NetMessage.SendData((int)PacketTypes.TogglePVP, -1, -1, "", Index);
All.SendMessage(string.Format("{0} has {1} PvP!", Name, pvp ? "enabled" : "disabled"), Main.teamColor[Team]);
}
}
}
public class ServerPlayer : TSPlayer
public class TSServerPlayer : TSPlayer
{
public ServerPlayer() : base("Server")
public TSServerPlayer() : base("Server")
{
Group = new SuperAdminGroup();
}
public override void SendMessage(string msg)
{
Console.WriteLine(msg);
}
public override void SendMessage(string msg, byte red, byte green, byte blue)
{
SendMessage(msg);
SendMessage(msg, 0, 255, 0);
}
public override void SendMessage(string msg, Color color)
{
SendMessage(msg);
SendMessage(msg, color.R, color.G, color.B);
}
public override void SendMessage(string msg, byte red, byte green, byte blue)
{
Console.WriteLine(msg);
}
public void SetBloodMoon(bool bloodMoon)
{
Main.bloodMoon = bloodMoon;
SetTime(false, 0);
}
public void SetTime(bool dayTime, double time)
{
Main.dayTime = dayTime;
Main.time = time;
NetMessage.SendData((int)PacketTypes.TimeSet, -1, -1, "", 0, 0, Main.sunModY, Main.moonModY);
NetMessage.syncPlayers();
}
public void StrikeNPC(int npcid, int damage, float knockBack, int hitDirection)
{
Main.npc[npcid].StrikeNPC(damage, knockBack, hitDirection);
NetMessage.SendData((int)PacketTypes.NPCStrike, -1, -1, "", npcid, damage, knockBack, hitDirection);
}
}
}

View file

@ -367,8 +367,7 @@ namespace TShockAPI
}
if (ConfigurationManager.PermaPvp)
{
Main.player[who].hostile = true;
NetMessage.SendData(30, -1, -1, "", who);
player.SetPvP(true);
}
if (Players[who].Group.HasPermission("causeevents") && ConfigurationManager.InfiniteInvasion)
{
@ -465,17 +464,6 @@ namespace TShockAPI
}
}
public static void PlayerDamage(TSPlayer player, int damage)
{
NetMessage.SendData(26, -1, -1, "", player.Index, ((new Random()).Next(-1, 1)), damage, (float)0);
}
public static void SendTileSquare(TSPlayer player, int x, int y, int size = 10)
{
NetMessage.SendData(20, player.Index, -1, "", size, (float)(x - (size / 2)), (float)(y - (size / 2)), 0f);
}
//TODO : Notify the player if there is more than one match. (or do we want a First() kinda thing?)
public static int GetNPCID(string name, bool exact = false)
{

View file

@ -215,7 +215,7 @@ namespace TShockAPI
{
if (!player.ConnectionAlive)
return;
NetMessage.SendData(0x2, player.Index, -1, reason, 0x0, 0f, 0f, 0f);
player.Disconnect(reason);
Log.Info(string.Format("{0} was force kicked for : {1}", player.IP, reason));
}
@ -231,7 +231,7 @@ namespace TShockAPI
if (!player.Group.HasPermission("immunetokick"))
{
string playerName = player.Name;
NetMessage.SendData(0x2, player.Index, -1, string.Format("Kicked: {0}", reason), 0x0, 0f, 0f, 0f);
player.Disconnect(string.Format("Kicked: {0}", reason));
Log.Info(string.Format("Kicked {0} for : {1}", playerName, reason));
if (adminUserName.Length == 0)
Broadcast(string.Format("{0} was kicked for {1}", playerName, reason.ToLower()));
@ -256,7 +256,7 @@ namespace TShockAPI
string ip = player.IP;
string playerName = player.Name;
TShock.Bans.AddBan(ip, playerName, reason);
NetMessage.SendData(0x2, player.Index, -1, string.Format("Banned: {0}", reason), 0x0, 0f, 0f, 0f);
player.Disconnect(string.Format("Banned: {0}", reason));
Log.Info(string.Format("Banned {0} for : {1}", playerName, reason));
if (adminUserName.Length == 0)
Broadcast(string.Format("{0} was banned for {1}", playerName, reason.ToLower()));