private void OnGetData(GetDataEventArgs e) { if (e.Handled) { return; } TSPlayer tsplayer = TShock.Players[e.Msg.whoAmI]; if (tsplayer == null) { return; } switch (e.MsgID) { //depracated https://github.com/Pryaxis/TerrariaAPI-Server/pull/151/commits/c302e57f4fd934420a4c3311220993d2c567f15b #region Packet 45 - PlayerKillMe case PacketTypes.PlayerDeathV2: if (tsplayer.Group.HasPermission(Permissions.TpBack)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } return; case PacketTypes.Teleport: { if (tsplayer.Group.HasPermission(Permissions.TpBack)) { using (MemoryStream ms = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { BitsByte flags = (byte)ms.ReadByte(); int type = 0; if (flags[1]) { type = 2; } if (type == 0 && tsplayer.Group.HasPermission(TShockAPI.Permissions.rod)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } else if (type == 2 && tsplayer.Group.HasPermission(TShockAPI.Permissions.wormhole)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } } } } return; //#endregion } }
private void OnGetData(GetDataEventArgs e) { if (e.Handled) { return; } TSPlayer tsplayer = TShock.Players[e.Msg.whoAmI]; if (tsplayer == null) { return; } switch (e.MsgID) { #region Packet 45 - PlayerKillMe case PacketTypes.PlayerKillMe: if (tsplayer.Group.HasPermission(Permissions.TpBack)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } return; case PacketTypes.Teleport: { if (tsplayer.Group.HasPermission(Permissions.TpBack)) { using (MemoryStream ms = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length)) { BitsByte flags = (byte)ms.ReadByte(); int type = 0; if (flags[1]) { type = 2; } if (type == 0 && tsplayer.Group.HasPermission(TShockAPI.Permissions.rod)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } else if (type == 2 && tsplayer.Group.HasPermission(TShockAPI.Permissions.wormhole)) { tsplayer.GetPlayerInfo().PushBackHistory(tsplayer.TPlayer.position); } } } } return; #endregion } }
private void cmdBack(CommandArgs e) { TSPlayer player = e.Player; PlayerInfo data = player.GetPlayerInfo(); if (!player.GetPlayerInfo().canBack || player.GetPlayerInfo().getLastLocationCount() == 0 || player.Dead) { e.Player.SendErrorMessage("Tak boleh back lagi!"); return; } Vector2 vector = data.popLastLocation(); player.Teleport(vector.X, vector.Y); e.Player.SendSuccessMessage("Teleport to your last location"); }
private void OnLeave(LeaveEventArgs e) { if ((e.Who < 0) || (e.Who > Main.maxNetPlayers)) { return; } TSPlayer player = TShock.Players[e.Who]; if (player != null) { PlayerInfo info = player.GetPlayerInfo(); info.Restore(Main.ServerSideCharacter, player); } foreach (TSPlayer plr in TShock.Players) { if ((plr == null) || !plr.Active || !plr.ContainsData(PlayerInfo.KEY)) { continue; } PlayerInfo info = plr.GetPlayerInfo(); if (info.CopyingPlayerIndex == e.Who) { info.CopyingPlayerIndex = -1; } } }
private async void OnJoin(JoinEventArgs e) { if (e.Handled) { return; } TSPlayer player = TShock.Players[e.Who]; if (player == null) { return; } DateTime muteExpiration = await Mutes.GetExpirationAsync(player); if (DateTime.UtcNow < muteExpiration) { player.mute = true; try { await Task.Delay(muteExpiration - DateTime.UtcNow, player.GetPlayerInfo().MuteToken); player.mute = false; player.SendInfoMessage("You have been unmuted."); } catch (TaskCanceledException) { } } }
protected WECommand(int x, int y, int x2, int y2, TSPlayer plr) { this.plr = plr; this.select = plr.GetPlayerInfo().Select ?? WorldEdit.Selections["normal"]; this.x = x; this.x2 = x2; this.y = y; this.y2 = y2; }
protected WECommand(int x, int y, int x2, int y2, MagicWand magicWand, TSPlayer plr, bool minMaxPoints = true) { this.plr = plr; this.select = plr.GetPlayerInfo().Select ?? WorldEdit.Selections["normal"]; this.x = x; this.x2 = x2; this.y = y; this.y2 = y2; this.magicWand = magicWand ?? new MagicWand(); this.minMaxPoints = minMaxPoints; }
private void OnPlayerCommand(PlayerCommandEventArgs e) { if (e.Handled || e.Player == null) { return; } TSPlayer player = e.Player; if (everyTeleportCommands.Contains(e.CommandName)) { player.GetPlayerInfo().pushLastLocation(player.TPlayer.position); } }
void OnLeave(LeaveEventArgs e) { if (e.Who < 0 || e.Who > Main.maxNetPlayers) { return; } TSPlayer player = TShock.Players[e.Who]; if (player != null) { PlayerInfo info = player.GetPlayerInfo(); info.Restore(player); } }
private void OnGetData(GetDataEventArgs e) { if (e.Handled) { return; } TSPlayer tsplayer = TShock.Players[e.Msg.whoAmI]; if (tsplayer == null) { return; } PlayerInfo playerInfo = tsplayer.GetPlayerInfo(); switch (e.MsgID) { case PacketTypes.PlayerDeathV2: playerInfo.pushLastLocation(tsplayer.TPlayer.position); break; } }
/// <summary> /// Executes a command. Checks for specific permissions. /// </summary> /// <param name="player">The command issuer.</param> /// <param name="text">The command text.</param> /// <returns>True or false.</returns> public static bool ExecuteCommand(this TSPlayer player, string text) { string cmdText = text.Remove(0, 1); string cmdPrefix = text[0].ToString(); bool silent = false; if (cmdPrefix == TShock.Config.CommandSilentSpecifier) { silent = true; } var args = typeof(Commands).CallMethod <List <string> >("ParseParameters", cmdText); if (args.Count < 1) { return(false); } string cmdName = args[0].ToLower(); args.RemoveAt(0); IEnumerable <Command> cmds = Commands.ChatCommands.FindAll(c => c.HasAlias(cmdName)); if (PlayerHooks.OnPlayerCommand(player, cmdName, cmdText, args, ref cmds, cmdPrefix)) { return(true); } if (cmds.Count() == 0) { if (player.AwaitingResponse.ContainsKey(cmdName)) { Action <CommandArgs> call = player.AwaitingResponse[cmdName]; player.AwaitingResponse.Remove(cmdName); call(new CommandArgs(cmdText, player, args)); return(true); } player.SendErrorMessage("Invalid command entered. Type {0}help for a list of valid commands.", TShock.Config.CommandSpecifier); return(true); } foreach (Command command in cmds) { if (!command.AllowServer && !player.RealPlayer) { player.SendErrorMessage("You must use this command in-game."); } else if ((!command.CanRun(player) && !player.GetPlayerInfo().HasPermission(command.Permissions.Any() ? command.Permissions[0] : null)) || (command.CanRun(player) && player.GetPlayerInfo().Permissions.Negated(command.Permissions.Any() ? command.Permissions[0] : null))) { TShock.Utils.SendLogs(string.Format("{0} tried to execute {1}{2}.", player.Name, TShock.Config.CommandSpecifier, cmdText), Color.PaleVioletRed, player); player.SendErrorMessage("You do not have access to this command."); } else { if (command.DoLog) { TShock.Utils.SendLogs(string.Format("{0} executed: {1}{2}.", player.Name, silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier, cmdText), Color.PaleVioletRed, player); } RunCommand(command, cmdText, player, args); } } return(true); }
/// <summary> /// Internal hook, fired when a chat message is sent. /// </summary> /// <param name="args">The <see cref="ServerChatEventArgs"/> object.</param> private void OnChat(ServerChatEventArgs args) { // Return if the packet was already handled by another plugin. if (args.Handled) { return; } // Ensure the player is not null and has modified data. TSPlayer tsplr = TShock.Players[args.Who]; if (tsplr == null || tsplr.GetPlayerInfo() == null) { return; } // Check if the player has the permission to speak and has not been muted. if (!tsplr.HasPermission(TShockAPI.Permissions.canchat) || tsplr.mute) { return; } if (!args.Text.StartsWith(TShock.Config.CommandSpecifier) && !args.Text.StartsWith(TShock.Config.CommandSilentSpecifier)) { string prefix = tsplr.GetPlayerInfo().Prefix?.ToString() ?? tsplr.Group.Prefix; string suffix = tsplr.GetPlayerInfo().Suffix?.ToString() ?? tsplr.Group.Suffix; Color chatColor = tsplr.GetPlayerInfo().ChatColor?.ToColor() ?? tsplr.Group.ChatColor.ToColor(); if (!TShock.Config.EnableChatAboveHeads) { string message = string.Format(TShock.Config.ChatFormat, tsplr.Group.Name, prefix, tsplr.Name, suffix, args.Text); TSPlayer.All.SendMessage(message, chatColor); TSPlayer.Server.SendMessage(message, chatColor); TShock.Log.Info("Broadcast: {0}", message); args.Handled = true; } else { Player player = Main.player[args.Who]; string name = player.name; player.name = string.Format(TShock.Config.ChatAboveHeadsFormat, tsplr.Group.Name, prefix, tsplr.Name, suffix); NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, -1, player.name, args.Who, 0, 0, 0, 0); player.name = name; var text = args.Text; NetMessage.SendData((int)PacketTypes.ChatText, -1, args.Who, text, args.Who, chatColor.R, chatColor.G, chatColor.B); NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, -1, name, args.Who, 0, 0, 0, 0); string message = string.Format("<{0}> {1}", string.Format(TShock.Config.ChatAboveHeadsFormat, tsplr.Group.Name, prefix, tsplr.Name, suffix), text); tsplr.SendMessage(message, chatColor); TSPlayer.Server.SendMessage(message, chatColor); TShock.Log.Info("Broadcast: {0}", message); args.Handled = true; } } else { // Check if the player entered a command. if (!string.IsNullOrWhiteSpace(args.Text.Substring(1))) { try { args.Handled = tsplr.ExecuteCommand(args.Text); } catch (Exception ex) { TShock.Log.ConsoleError("An exception occured executing a command."); TShock.Log.Error(ex.ToString()); } } } }