Merge upstream

This commit is contained in:
SGKoishi 2022-11-10 00:09:40 -08:00
commit fb96d8b0c8
No known key found for this signature in database
GPG key ID: 8FFC399070653828
30 changed files with 9232 additions and 1697 deletions

View file

@ -255,7 +255,7 @@ namespace TShockAPI
#region PlayerAddBuff Whitelist
PlayerAddBuffWhitelist = new BuffLimit[Main.maxBuffTypes];
PlayerAddBuffWhitelist = new BuffLimit[Terraria.ID.BuffID.Count];
PlayerAddBuffWhitelist[BuffID.Poisoned] = new BuffLimit
{
MaxTicks = 60 * 60
@ -600,8 +600,8 @@ namespace TShockAPI
}
if (editData < 0 ||
((action == EditAction.PlaceTile || action == EditAction.ReplaceTile) && editData >= Main.maxTileSets) ||
((action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && editData >= Main.maxWallTypes))
((action == EditAction.PlaceTile || action == EditAction.ReplaceTile) && editData >= Terraria.ID.TileID.Count) ||
((action == EditAction.PlaceWall || action == EditAction.ReplaceWall) && editData >= Terraria.ID.WallID.Count))
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnTileEdit rejected from editData out of bounds {0} {1} {2}", args.Player.Name, action, editData));
args.Player.SendTileSquareCentered(tileX, tileY, 4);
@ -1050,7 +1050,7 @@ namespace TShockAPI
short type = args.Type;
// player is attempting to crash clients
if (type < -48 || type >= Main.maxItemTypes)
if (type < -48 || type >= Terraria.ID.ItemID.Count)
{
// Causes item duplications. Will be re added later if necessary
//args.Player.SendData(PacketTypes.ItemDrop, "", id);
@ -1266,16 +1266,16 @@ namespace TShockAPI
{
if (TShock.Config.Settings.KickOnProjectileThresholdBroken)
{
args.Player.Kick(GetString("Projectile update threshold exceeded {0}.", TShock.Config.Settings.ProjectileThreshold));
args.Player.Kick(GetString("Projectile create threshold exceeded {0}.", TShock.Config.Settings.ProjectileThreshold));
}
else
{
args.Player.Disable(GetString("Reached projectile update threshold."), DisableFlags.WriteToLogAndConsole);
args.Player.Disable(GetString("Reached projectile create threshold."), DisableFlags.WriteToLogAndConsole);
args.Player.RemoveProjectile(ident, owner);
}
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from projectile update threshold from {0} {1}/{2}", args.Player.Name, args.Player.ProjectileThreshold, TShock.Config.Settings.ProjectileThreshold));
TShock.Log.ConsoleDebug(GetString("If this player wasn't hacking, please report the projectile update threshold they were disabled for to TShock so we can improve this!"));
TShock.Log.ConsoleDebug(GetString("Bouncer / OnNewProjectile rejected from projectile create threshold from {0} {1}/{2}", args.Player.Name, args.Player.ProjectileThreshold, TShock.Config.Settings.ProjectileThreshold));
TShock.Log.ConsoleDebug(GetString("If this player wasn't hacking, please report the projectile create threshold they were disabled for to TShock so we can improve this!"));
args.Handled = true;
return;
}
@ -1881,7 +1881,7 @@ namespace TShockAPI
return;
}
if (type >= Main.maxBuffTypes)
if (type >= Terraria.ID.BuffID.Count)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnPlayerBuff rejected invalid buff type {0}", args.Player.Name));
args.Player.SendData(PacketTypes.PlayerBuff, "", id);
@ -1995,21 +1995,21 @@ namespace TShockAPI
if (npc.townNPC)
{
if (type != BuffID.Poisoned
&& type != BuffID.OnFire
&& type != BuffID.Confused
&& type != BuffID.CursedInferno
&& type != BuffID.Ichor
&& type != BuffID.Venom
&& type != BuffID.Midas
&& type != BuffID.Wet
&& type != BuffID.Lovestruck
&& type != BuffID.Stinky
&& type != BuffID.Slimed
&& type != BuffID.DryadsWard
&& type != BuffID.GelBalloonBuff
&& type != BuffID.OnFire3
&& type != BuffID.Frostburn2
&& type != BuffID.Shimmer)
&& type != BuffID.OnFire
&& type != BuffID.Confused
&& type != BuffID.CursedInferno
&& type != BuffID.Ichor
&& type != BuffID.Venom
&& type != BuffID.Midas
&& type != BuffID.Wet
&& type != BuffID.Lovestruck
&& type != BuffID.Stinky
&& type != BuffID.Slimed
&& type != BuffID.DryadsWard
&& type != BuffID.GelBalloonBuff
&& type != BuffID.OnFire3
&& type != BuffID.Frostburn2
&& type != BuffID.Shimmer)
{
detectedNPCBuffTimeCheat = true;
}
@ -2209,7 +2209,7 @@ namespace TShockAPI
return;
}
if (type < 0 || type >= Main.maxTileSets)
if (type < 0 || type >= Terraria.ID.TileID.Count)
{
TShock.Log.ConsoleDebug(GetString("Bouncer / OnPlaceObject rejected out of bounds tile from {0}", args.Player.Name));
args.Handled = true;
@ -2303,10 +2303,15 @@ namespace TShockAPI
if (args.Player.SelectedItem.placeStyle != style)
{
TShock.Log.ConsoleError(GetString("Bouncer / OnPlaceObject rejected object placement with invalid style from {0}", args.Player.Name));
args.Player.SendTileSquareCentered(x, y, 4);
args.Handled = true;
return;
var validTorch = args.Player.SelectedItem.createTile == TileID.Torches && args.Player.TPlayer.BiomeTorchPlaceStyle(args.Player.SelectedItem.placeStyle) == style;
var validCampfire = args.Player.SelectedItem.createTile == TileID.Campfire && args.Player.TPlayer.BiomeCampfirePlaceStyle(args.Player.SelectedItem.placeStyle) == style;
if (!args.Player.TPlayer.unlockedBiomeTorches || (!validTorch && !validCampfire))
{
TShock.Log.ConsoleError(GetString("Bouncer / OnPlaceObject rejected object placement with invalid style {1} (expected {2}) from {0}", args.Player.Name, style, args.Player.SelectedItem.placeStyle));
args.Player.SendTileSquareCentered(x, y, 4);
args.Handled = true;
return;
}
}
}
@ -2587,7 +2592,7 @@ namespace TShockAPI
}
else
{
TShock.Log.ConsoleDebug("Bouncer / OnPlayerDamage rejected damage threshold2 from {0} {1}/{2}", args.Player.Name, damage, TShock.Config.Settings.MaxDamage);
TShock.Log.ConsoleDebug(GetString("Bouncer / OnPlayerDamage rejected damage threshold2 from {0} {1}/{2}", args.Player.Name, damage, TShock.Config.Settings.MaxDamage));
args.Player.Disable(GetString("Player damage exceeded {0}.", TShock.Config.Settings.MaxDamage), DisableFlags.WriteToLogAndConsole);
}
args.Player.SendData(PacketTypes.PlayerHp, "", id);

View file

@ -649,7 +649,7 @@ namespace TShockAPI
string cmdName;
if (index == 0) // Space after the command specifier should not be supported
{
player.SendErrorMessage(GetString("Invalid command entered. Type {0}help for a list of valid commands.", Specifier));
player.SendErrorMessage(GetString("You entered a space after {0} instead of a command. Type {0}help for a list of valid commands.", Specifier));
return true;
}
else if (index < 0)
@ -787,6 +787,10 @@ namespace TShockAPI
// We need to emulate the checks done in Player.TrySwitchingLoadout, because otherwise the server is not allowed to sync the
// loadout index to the player, causing catastrophic desync.
// The player must not be dead, using an item, or CC'd to switch loadouts.
// Note that we only check for CC'd players when SSC is enabled, as that is only where it can cause issues,
// and the RequireLogin config option (without SSC) will disable player's until they login, creating a vicious cycle.
// FIXME: There is always the chance that in-between the time we check these requirements on the server, and the loadout sync
// packet reaches the client, that the client state has changed, causing the loadout sync to be rejected, even though
// we expected it to succeed.
@ -805,7 +809,7 @@ namespace TShockAPI
return;
}
if (args.TPlayer.CCed)
if (args.TPlayer.CCed && Main.ServerSideCharacter)
{
args.Player.SendErrorMessage(GetString("You cannot login whilst crowd controlled."));
return;
@ -2862,7 +2866,7 @@ namespace TShockAPI
else
{
var npc = npcs[0];
if (npc.type >= 1 && npc.type < Main.maxNPCTypes && npc.type != 113)
if (npc.type >= 1 && npc.type < Terraria.ID.NPCID.Count && npc.type != 113)
{
TSPlayer.Server.SpawnNPC(npc.netID, npc.FullName, amount, args.Player.TileX, args.Player.TileY, 50, 20);
if (args.Silent)
@ -4027,7 +4031,7 @@ namespace TShockAPI
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Terraria.ID.ProjectileID.Count)
{
TShock.ProjectileBans.AddNewBan(id);
args.Player.SendSuccessMessage(GetString("Banned projectile {0}.", id));
@ -4047,7 +4051,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Terraria.ID.ProjectileID.Count)
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
@ -4084,7 +4088,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Terraria.ID.ProjectileID.Count)
{
TShock.ProjectileBans.RemoveBan(id);
args.Player.SendSuccessMessage(GetString("Unbanned projectile {0}.", id));
@ -4105,7 +4109,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Main.maxProjectileTypes)
if (Int16.TryParse(args.Parameters[1], out id) && id > 0 && id < Terraria.ID.ProjectileID.Count)
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
@ -4203,7 +4207,7 @@ namespace TShockAPI
return;
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Main.maxTileSets)
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Terraria.ID.TileID.Count)
{
TShock.TileBans.AddNewBan(id);
args.Player.SendSuccessMessage(GetString("Banned tile {0}.", id));
@ -4223,7 +4227,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Main.maxTileSets)
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Terraria.ID.TileID.Count)
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
@ -4260,7 +4264,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Main.maxTileSets)
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Terraria.ID.TileID.Count)
{
TShock.TileBans.RemoveBan(id);
args.Player.SendSuccessMessage(GetString("Unbanned tile {0}.", id));
@ -4281,7 +4285,7 @@ namespace TShockAPI
}
short id;
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Main.maxTileSets)
if (Int16.TryParse(args.Parameters[1], out id) && id >= 0 && id < Terraria.ID.TileID.Count)
{
if (!TShock.Groups.GroupExists(args.Parameters[2]))
{
@ -6088,7 +6092,7 @@ namespace TShockAPI
{
item = matchedItems[0];
}
if (item.type < 1 && item.type >= Main.maxItemTypes)
if (item.type < 1 && item.type >= Terraria.ID.ItemID.Count)
{
args.Player.SendErrorMessage(GetString("The item type {0} is invalid.", itemNameOrId));
return;
@ -6251,7 +6255,7 @@ namespace TShockAPI
prefix = prefixIds[0];
}
if (item.type >= 1 && item.type < Main.maxItemTypes)
if (item.type >= 1 && item.type < Terraria.ID.ItemID.Count)
{
var players = TSPlayer.FindByNameOrID(plStr);
if (players.Count == 0)
@ -6393,7 +6397,7 @@ namespace TShockAPI
if (args.Parameters.Count == 2)
int.TryParse(args.Parameters[1], out time);
if (id > 0 && id < Main.maxBuffTypes)
if (id > 0 && id < Terraria.ID.BuffID.Count)
{
// Max possible buff duration as of Terraria 1.4.2.3 is 35791393 seconds (415 days).
if (time < 0 || time > timeLimit)
@ -6449,13 +6453,16 @@ namespace TShockAPI
}
if (args.Parameters.Count == 3)
int.TryParse(args.Parameters[2], out time);
if (id > 0 && id < Main.maxBuffTypes)
if (id > 0 && id < Terraria.ID.BuffID.Count)
{
var target = foundplr[0];
if (time < 0 || time > timeLimit)
time = timeLimit;
target.SetBuff(id, time * 60);
user.SendSuccessMessage(GetString($"You have buffed {(target == user ? GetString("yourself") : target.Name)} with {TShock.Utils.GetBuffName(id)} ({TShock.Utils.GetBuffDescription(id)}) for {time} seconds!"));
if (target == user)
user.SendSuccessMessage(GetString($"You buffed yourself with {TShock.Utils.GetBuffName(id)} ({TShock.Utils.GetBuffDescription(id)}) for {time} seconds."));
else
target.SendSuccessMessage(GetString($"You have buffed {user.Name} with {TShock.Utils.GetBuffName(id)} ({TShock.Utils.GetBuffDescription(id)}) for {time} seconds!"));
if (!args.Silent && target != user)
target.SendSuccessMessage(GetString($"{user.Name} has buffed you with {TShock.Utils.GetBuffName(id)} ({TShock.Utils.GetBuffDescription(id)}) for {time} seconds!"));
}

View file

@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
@ -117,10 +117,10 @@ namespace TShockAPI.Configuration
var def = field.GetValue(defaults);
sb.AppendLine("## {0} ".SFormat(name));
sb.AppendLine("{0}".SFormat(desc));
sb.AppendLine("* **Field type**: `{0}`".SFormat(type));
sb.AppendLine("* **Default**: `{0}`".SFormat(def));
sb.AppendLine($"## {name} ");
sb.AppendLine($"{desc}");
sb.AppendLine(GetString("* **Field type**: `{0}`", type));
sb.AppendLine(GetString("* **Default**: `{0}`", def));
sb.AppendLine();
}

View file

@ -314,7 +314,7 @@ namespace TShockAPI.Configuration
/// <summary>The reason given if banning a mediumcore player on death.</summary>
[Description("The reason given if banning a mediumcore player on death.")]
public string MediumcoreBanReason = "Death results in a ban";
public string MediumcoreBanReason = GetString("Death results in a ban");
/// <summary>Disbales IP bans by default, if no arguments are passed to the ban command.</summary>
[Description("Disbales IP bans by default, if no arguments are passed to the ban command.")]
@ -326,15 +326,15 @@ namespace TShockAPI.Configuration
/// <summary>The reason given when kicking players for not being on the whitelist.</summary>
[Description("The reason given when kicking players for not being on the whitelist.")]
public string WhitelistKickReason = "You are not on the whitelist.";
public string WhitelistKickReason = GetString("You are not on the whitelist.");
/// <summary>The reason given when kicking players that attempt to join while the server is full.</summary>
[Description("The reason given when kicking players that attempt to join while the server is full.")]
public string ServerFullReason = "Server is full";
public string ServerFullReason = GetString("Server is full");
/// <summary>The reason given when kicking players that attempt to join while the server is full with no reserved slots available.</summary>
[Description("The reason given when kicking players that attempt to join while the server is full with no reserved slots available.")]
public string ServerFullNoReservedReason = "Server is full. No reserved slots open.";
public string ServerFullNoReservedReason = GetString("Server is full. No reserved slots open.");
/// <summary>Whether or not to kick hardcore players on death.</summary>
[Description("Whether or not to kick hardcore players on death.")]
@ -342,7 +342,7 @@ namespace TShockAPI.Configuration
/// <summary>The reason given when kicking hardcore players on death.</summary>
[Description("The reason given when kicking hardcore players on death.")]
public string HardcoreKickReason = "Death results in a kick";
public string HardcoreKickReason = GetString("Death results in a kick");
/// <summary>Whether or not to ban hardcore players on death.</summary>
[Description("Whether or not to ban hardcore players on death.")]
@ -350,7 +350,7 @@ namespace TShockAPI.Configuration
/// <summary>The reason given when banning hardcore players on death.</summary>
[Description("The reason given when banning hardcore players on death.")]
public string HardcoreBanReason = "Death results in a ban";
public string HardcoreBanReason = GetString("Death results in a ban");
/// <summary>If GeoIP is enabled, this will kick users identified as being under a proxy.</summary>
[Description("If GeoIP is enabled, this will kick users identified as being under a proxy.")]
@ -489,7 +489,7 @@ namespace TShockAPI.Configuration
/// <summary>The superadmin chat prefix.</summary>
[Description("The superadmin chat prefix.")]
public string SuperAdminChatPrefix = "(Super Admin) ";
public string SuperAdminChatPrefix = GetString("(Super Admin) ");
/// <summary>The superadmin chat suffix.</summary>
[Description("The superadmin chat suffix.")]
@ -635,10 +635,10 @@ namespace TShockAPI.Configuration
var def = field.GetValue(defaults);
sb.AppendLine("## {0} ".SFormat(name));
sb.AppendLine("{0}".SFormat(desc));
sb.AppendLine("* **Field type**: `{0}`".SFormat(type));
sb.AppendLine("* **Default**: `{0}`".SFormat(def));
sb.AppendLine($"## {name} ");
sb.AppendLine($"{desc}");
sb.AppendLine(GetString("* **Field type**: `{0}`", type));
sb.AppendLine(GetString("* **Default**: `{0}`", def));
sb.AppendLine();
}

View file

@ -2447,22 +2447,22 @@ namespace TShockAPI
if (OnPlayerInfo(args.Player, args.Data, playerid, hair, skinVariant, difficulty, name))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected plugin phase {0}", name);
args.Player.Kick("A plugin on this server stopped your login.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerInfo rejected plugin phase {0}", name));
args.Player.Kick(GetString("A plugin on this server stopped your login."), true, true);
return true;
}
if (name.Trim().Length == 0)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected name length 0");
args.Player.Kick("You have been Bounced.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerInfo rejected name length 0"));
args.Player.Kick(GetString("You have been Bounced."), true, true);
return true;
}
if (name.Trim().StartsWith("tsi:") || name.Trim().StartsWith("tsn:"))
{
TShock.Log.ConsoleDebug("GetDataHandlers / rejecting player for name prefix starting with tsi: or tsn:.");
args.Player.Kick("Illegal name: prefixes tsi: and tsn: are forbidden.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / rejecting player for name prefix starting with tsi: or tsn:."));
args.Player.Kick(GetString("Illegal name: prefixes tsi: and tsn: are forbidden."), true, true);
return true;
}
@ -2507,20 +2507,20 @@ namespace TShockAPI
}
if (TShock.Config.Settings.SoftcoreOnly && difficulty != 0)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected softcore required");
args.Player.Kick("You need to join with a softcore player.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerInfo rejected softcore required"));
args.Player.Kick(GetString("You need to join with a softcore player."), true, true);
return true;
}
if (TShock.Config.Settings.MediumcoreOnly && difficulty < 1)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected mediumcore required");
args.Player.Kick("You need to join with a mediumcore player or higher.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerInfo rejected mediumcore required"));
args.Player.Kick(GetString("You need to join with a mediumcore player or higher."), true, true);
return true;
}
if (TShock.Config.Settings.HardcoreOnly && difficulty < 2)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerInfo rejected hardcore required");
args.Player.Kick("You need to join with a hardcore player.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerInfo rejected hardcore required"));
args.Player.Kick(GetString("You need to join with a hardcore player."), true, true);
return true;
}
args.Player.Difficulty = difficulty;
@ -2551,7 +2551,7 @@ namespace TShockAPI
return true;
if (args.Player.IgnoreSSCPackets)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets");
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerSlot rejected ignore ssc packets"));
args.Player.SendData(PacketTypes.PlayerSlot, "", args.Player.Index, slot, prefix);
return true;
}
@ -2617,8 +2617,8 @@ namespace TShockAPI
if (args.Player.PlayerData.exists && TShock.ServerSideCharacterConfig.Settings.WarnPlayersAboutBypassPermission)
{
args.Player.SendWarningMessage(GetString("Bypass SSC is enabled for your account. SSC data will not be loaded or saved."));
TShock.Log.ConsoleInfo(args.Player.Name + " has SSC data in the database, but has the tshock.ignore.ssc permission. This means their SSC data is being ignored.");
TShock.Log.ConsoleInfo("You may wish to consider removing the tshock.ignore.ssc permission or negating it for this player.");
TShock.Log.ConsoleInfo(GetString($"{args.Player.Name} has SSC data in the database, but has the tshock.ignore.ssc permission. This means their SSC data is being ignored."));
TShock.Log.ConsoleInfo(GetString("You may wish to consider removing the tshock.ignore.ssc permission or negating it for this player."));
}
args.Player.PlayerData.CopyCharacter(args.Player);
TShock.CharacterDB.InsertPlayerData(args.Player);
@ -2634,7 +2634,7 @@ namespace TShockAPI
args.Player.IsDisabledForBannedWearable = false;
args.Player.SendSuccessMessage(GetString($"Authenticated as {account.Name} successfully."));
TShock.Log.ConsoleInfo($"{args.Player.Name} authenticated successfully as user {args.Player.Name}.");
TShock.Log.ConsoleInfo(GetString($"{args.Player.Name} authenticated successfully as user {args.Player.Name}."));
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
}
@ -2666,7 +2666,7 @@ namespace TShockAPI
if (TShock.Utils.GetActivePlayerCount() + 1 > TShock.Config.Settings.MaxSlots &&
!args.Player.HasPermission(Permissions.reservedslot))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleGetSection rejected reserve slot");
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleGetSection rejected reserve slot"));
args.Player.Kick(TShock.Config.Settings.ServerFullReason, true, true);
return true;
}
@ -2679,7 +2679,7 @@ namespace TShockAPI
{
if (args.Player.Dead && args.Player.RespawnTimer > 0)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawn rejected dead player spawn request {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawn rejected dead player spawn request {0}", args.Player.Name));
return true;
}
@ -2697,7 +2697,7 @@ namespace TShockAPI
args.Player.sX = Main.spawnTileX;
args.Player.sY = Main.spawnTileY;
args.Player.Teleport(args.Player.sX * 16, (args.Player.sY * 16) - 48);
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawn force teleport 'vanilla spawn' {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawn force teleport 'vanilla spawn' {0}", args.Player.Name));
}
else 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)))
@ -2708,7 +2708,7 @@ namespace TShockAPI
if (((Main.tile[args.Player.sX, args.Player.sY - 1].active() && Main.tile[args.Player.sX, args.Player.sY - 1].type == TileID.Beds)) && (WorldGen.StartRoomCheck(args.Player.sX, args.Player.sY - 1)))
{
args.Player.Teleport(args.Player.sX * 16, (args.Player.sY * 16) - 48);
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawn force teleport phase 1 {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawn force teleport phase 1 {0}", args.Player.Name));
}
}
@ -2717,7 +2717,7 @@ namespace TShockAPI
if (((Main.tile[args.Player.sX, args.Player.sY - 1].active() && Main.tile[args.Player.sX, args.Player.sY - 1].type == TileID.Beds)) && (WorldGen.StartRoomCheck(args.Player.sX, args.Player.sY - 1)))
{
args.Player.Teleport(args.Player.sX * 16, (args.Player.sY * 16) - 48);
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawn force teleport phase 2 {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawn force teleport phase 2 {0}", args.Player.Name));
}
}
@ -2732,7 +2732,7 @@ namespace TShockAPI
{
if (args.Player == null || args.TPlayer == null || args.Data == null)
{
TShock.Log.ConsoleDebug("GetDataHandlers / OnPlayerUpdate rejected from null player.");
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / OnPlayerUpdate rejected from null player."));
return true;
}
@ -2754,7 +2754,7 @@ namespace TShockAPI
{
originalPosition = new Vector2?(args.Data.ReadVector2());
homePosition = new Vector2?(args.Data.ReadVector2());
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerUpdate home position delta {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerUpdate home position delta {0}", args.Player.Name));
}
if (OnPlayerUpdate(args.Player, args.Data, playerID, controls, miscData1, miscData2, miscData3, selectedItem, position, velocity, originalPosition, homePosition))
@ -2774,7 +2774,7 @@ namespace TShockAPI
if (max > TShock.Config.Settings.MaxHP && !args.Player.HasPermission(Permissions.ignorehp))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerHp rejected over max hp {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerHp rejected over max hp {0}", args.Player.Name));
args.Player.Disable("Maximum HP beyond limit", DisableFlags.WriteToLogAndConsole);
return true;
}
@ -2826,13 +2826,13 @@ namespace TShockAPI
if (x >= Main.maxTilesX || y >= Main.maxTilesY || x < 0 || y < 0) // Check for out of range
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleDoorUse rejected out of range door {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleDoorUse rejected out of range door {0}", args.Player.Name));
return true;
}
if (action < 0 || action > 5)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleDoorUse rejected type 0 5 check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleDoorUse rejected type 0 5 check {0}", args.Player.Name));
return true;
}
@ -2841,7 +2841,7 @@ namespace TShockAPI
&& tileType != TileID.TallGateClosed && tileType != TileID.TallGateOpen
&& tileType != TileID.TrapdoorClosed && tileType != TileID.TrapdoorOpen)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleDoorUse rejected door gap check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleDoorUse rejected door gap check {0}", args.Player.Name));
return true;
}
@ -2959,7 +2959,7 @@ namespace TShockAPI
{
args.Player.SendErrorMessage(GetString("You do not have permission to hurt Town NPCs."));
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
TShock.Log.ConsoleDebug($"GetDataHandlers / HandleNpcStrike rejected npc strike {args.Player.Name}");
TShock.Log.ConsoleDebug(GetString($"GetDataHandlers / HandleNpcStrike rejected npc strike {args.Player.Name}"));
return true;
}
@ -2969,7 +2969,7 @@ namespace TShockAPI
{
args.Player.SendErrorMessage(GetString("You do not have permission to summon the Empress of Light."));
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
TShock.Log.ConsoleDebug($"GetDataHandlers / HandleNpcStrike rejected EoL summon from {args.Player.Name}");
TShock.Log.ConsoleDebug(GetString($"GetDataHandlers / HandleNpcStrike rejected EoL summon from {args.Player.Name}"));
return true;
}
else if (!TShock.Config.Settings.AnonymousBossInvasions)
@ -2986,7 +2986,7 @@ namespace TShockAPI
{
args.Player.SendErrorMessage(GetString("You do not have permission to summon the Lunatic Cultist!"));
args.Player.SendData(PacketTypes.NpcUpdate, "", id);
TShock.Log.ConsoleDebug($"GetDataHandlers / HandleNpcStrike rejected Cultist summon from {args.Player.Name}");
TShock.Log.ConsoleDebug(GetString($"GetDataHandlers / HandleNpcStrike rejected Cultist summon from {args.Player.Name}"));
return true;
}
}
@ -3011,7 +3011,7 @@ namespace TShockAPI
if (type == ProjectileID.Tombstone)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleProjectileKill rejected tombstone {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleProjectileKill rejected tombstone {0}", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
return true;
}
@ -3022,11 +3022,11 @@ namespace TShockAPI
// https://github.com/Pryaxis/TShock/commit/a5aa9231239926f361b7246651e32144bbf28dda
if (type == ProjectileID.Bomb || type == ProjectileID.DeathLaser)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleProjectileKill permitted skeletron prime exemption {0}", args.Player.Name);
TShock.Log.ConsoleDebug("If this was not skeletron prime related, please report to TShock what happened.");
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleProjectileKill permitted skeletron prime exemption {0}", args.Player.Name));
TShock.Log.ConsoleDebug(GetString("If this was not skeletron prime related, please report to TShock what happened."));
return false;
}
TShock.Log.ConsoleDebug("GetDataHandlers / HandleProjectileKill rejected banned projectile {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleProjectileKill rejected banned projectile {0}", args.Player.Name));
args.Player.RemoveProjectile(ident, owner);
return true;
}
@ -3049,14 +3049,14 @@ namespace TShockAPI
if (id != args.Player.Index)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTogglePvp rejected index mismatch {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTogglePvp rejected index mismatch {0}", args.Player.Name));
return true;
}
string pvpMode = TShock.Config.Settings.PvPMode.ToLowerInvariant();
if (pvpMode == "disabled" || pvpMode == "always" || (DateTime.UtcNow - args.Player.LastPvPTeamChange).TotalSeconds < 5)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTogglePvp rejected fastswitch {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTogglePvp rejected fastswitch {0}", args.Player.Name));
args.Player.SendData(PacketTypes.TogglePvp, "", id);
return true;
}
@ -3091,7 +3091,7 @@ namespace TShockAPI
item.netDefaults(type);
if (stacks > item.maxStack)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleChestItem rejected max stacks {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleChestItem rejected max stacks {0}", args.Player.Name));
return true;
}
@ -3116,7 +3116,7 @@ namespace TShockAPI
if (!args.Player.HasBuildPermission(x, y) && TShock.Config.Settings.RegionProtectChests)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleChestActive rejected build permission and region check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleChestActive rejected build permission and region check {0}", args.Player.Name));
args.Player.SendData(PacketTypes.ChestOpen, "", -1);
return true;
}
@ -3141,7 +3141,7 @@ namespace TShockAPI
{
if (args.Player == null || args.TPlayer == null || args.Data == null)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerZone rejected null check");
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerZone rejected null check"));
return true;
}
@ -3209,7 +3209,7 @@ namespace TShockAPI
args.Player.SendMessage(GetString($"Authenticated as {args.Player.Name} successfully."), Color.LimeGreen);
TShock.Log.ConsoleInfo($"{args.Player.Name} authenticated successfully as user {args.Player.Name}.");
TShock.Log.ConsoleInfo(GetString($"{args.Player.Name} authenticated successfully as user {args.Player.Name}."));
TShock.UserAccounts.SetUserAccountUUID(account, args.Player.UUID);
Hooks.PlayerHooks.OnPlayerPostLogin(args.Player);
return true;
@ -3228,11 +3228,11 @@ namespace TShockAPI
NetMessage.SendData((int)PacketTypes.WorldInfo, args.Player.Index);
return true;
}
args.Player.Kick("Invalid server password.", true, true);
args.Player.Kick(GetString("Invalid server password."), true, true);
return true;
}
args.Player.Kick("You have been Bounced.", true, true);
args.Player.Kick(GetParticularString("Likely non-vanilla client send zero-length password", "You have been Bounced for invalid password."), true, true);
return true;
}
@ -3247,21 +3247,21 @@ namespace TShockAPI
//Rejecting player who trying to talk to a npc if player were disabled, mainly for unregistered and logged out players. Preventing smuggling or duplicating their items if player put it in a npc's item slot
if (args.Player.IsBeingDisabled())
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleNpcTalk rejected npc talk {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleNpcTalk rejected npc talk {0}", args.Player.Name));
args.Player.SendData(PacketTypes.NpcTalk, "", plr, -1);
return true;
}
if (args.Player.IsBouncerThrottled())
{
TShock.Log.ConsoleDebug("Bouncer / HandleNpcTalk rejected from bouncer throttle from {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("Bouncer / HandleNpcTalk rejected from bouncer throttle from {0}", args.Player.Name));
return true;
}
// -1 is a magic value, represents not talking to an NPC
if (npc < -1 || npc >= Main.maxNPCs)
{
TShock.Log.ConsoleDebug("Bouncer / HandleNpcTalk rejected from bouncer out of bounds from {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("Bouncer / HandleNpcTalk rejected from bouncer out of bounds from {0}", args.Player.Name));
return true;
}
return false;
@ -3286,7 +3286,7 @@ namespace TShockAPI
if (max > TShock.Config.Settings.MaxMP && !args.Player.HasPermission(Permissions.ignoremp))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerMana rejected max mana {0} {1}/{2}", args.Player.Name, max, TShock.Config.Settings.MaxMP);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerMana rejected max mana {0} {1}/{2}", args.Player.Name, max, TShock.Config.Settings.MaxMP));
args.Player.Disable("Maximum MP beyond limit", DisableFlags.WriteToLogAndConsole);
return true;
}
@ -3313,7 +3313,7 @@ namespace TShockAPI
if ((DateTime.UtcNow - args.Player.LastPvPTeamChange).TotalSeconds < 5)
{
args.Player.SendData(PacketTypes.PlayerTeam, "", id);
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerTeam rejected team fastswitch {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerTeam rejected team fastswitch {0}", args.Player.Name));
return true;
}
@ -3331,7 +3331,7 @@ namespace TShockAPI
if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSignRead rejected out of bounds {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSignRead rejected out of bounds {0}", args.Player.Name));
return true;
}
@ -3351,14 +3351,14 @@ namespace TShockAPI
if (!args.Player.HasBuildPermission(x, y))
{
args.Player.SendData(PacketTypes.SignNew, "", id);
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSign rejected sign on build permission {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSign rejected sign on build permission {0}", args.Player.Name));
return true;
}
if (!args.Player.IsInRange(x, y))
{
args.Player.SendData(PacketTypes.SignNew, "", id);
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSign rejected sign range check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSign rejected sign range check {0}", args.Player.Name));
return true;
}
return false;
@ -3393,7 +3393,7 @@ namespace TShockAPI
if (Netplay.Clients[args.TPlayer.whoAmI].State < 2 && (buff == 156 || buff == 47 || buff == 149))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerBuffList zeroed player buff due to below state 2 {0} {1}", args.Player.Name, buff);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerBuffList zeroed player buff due to below state 2 {0} {1}", args.Player.Name, buff));
buff = 0;
}
@ -3408,7 +3408,7 @@ namespace TShockAPI
}
}
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerBuffList handled event and sent data {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerBuffList handled event and sent data {0}", args.Player.Name));
NetMessage.SendData((int)PacketTypes.PlayerBuff, -1, args.Player.Index, NetworkText.Empty, args.Player.Index);
return true;
}
@ -3423,7 +3423,7 @@ namespace TShockAPI
if (type == 1 && TShock.Config.Settings.DisableDungeonGuardian)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpecial rejected type 1 for {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpecial rejected type 1 for {0}", args.Player.Name));
args.Player.SendMessage(GetString("The Dungeon Guardian returned you to your spawn point."), Color.Purple);
args.Player.Spawn(PlayerSpawnContext.RecallFromItem);
return true;
@ -3433,13 +3433,13 @@ namespace TShockAPI
{
if (!args.Player.HasPermission(Permissions.usesundial))
{
TShock.Log.ConsoleDebug($"GetDataHandlers / HandleSpecial rejected enchanted sundial permission {args.Player.Name}");
TShock.Log.ConsoleDebug(GetString($"GetDataHandlers / HandleSpecial rejected enchanted sundial permission {args.Player.Name}"));
args.Player.SendErrorMessage(GetString("You do not have permission to use the Enchanted Sundial."));
return true;
}
else if (TShock.Config.Settings.ForceTime != "normal")
{
TShock.Log.ConsoleDebug($"GetDataHandlers / HandleSpecial rejected enchanted sundial permission (ForceTime) {args.Player.Name}");
TShock.Log.ConsoleDebug(GetString($"GetDataHandlers / HandleSpecial rejected enchanted sundial permission (ForceTime) {args.Player.Name}"));
if (!args.Player.HasPermission(Permissions.cfgreload))
{
args.Player.SendErrorMessage(GetString("You cannot use the Enchanted Sundial because time is stopped."));
@ -3489,7 +3489,7 @@ namespace TShockAPI
if (!args.Player.HasPermission(Permissions.movenpc))
{
TShock.Log.ConsoleDebug("GetDataHandlers / UpdateNPCHome rejected no permission {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / UpdateNPCHome rejected no permission {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to relocate Town NPCs."));
args.Player.SendData(PacketTypes.UpdateNPCHome, "", id, Main.npc[id].homeTileX, Main.npc[id].homeTileY,
Convert.ToByte(Main.npc[id].homeless));
@ -3499,38 +3499,36 @@ namespace TShockAPI
}
private static readonly int[] invasions = { -1, -2, -3, -4, -5, -6, -7, -8, -10, -11 };
private static readonly int[] pets = { -12, -13, -14 };
private static readonly int[] bosses = { 4, 13, 50, 125, 126, 134, 127, 128, 131, 129, 130, 222, 245, 266, 370, 657 };
private static readonly int[] pets = { -12, -13, -14, -15 };
private static bool HandleSpawnBoss(GetDataHandlerArgs args)
{
if (args.Player.IsBouncerThrottled())
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawnBoss rejected bouner throttled {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawnBoss rejected bouner throttled {0}", args.Player.Name));
return true;
}
var plr = args.Data.ReadInt16();
var thingType = args.Data.ReadInt16();
NPC npc = new NPC();
npc.SetDefaults(thingType);
if (bosses.Contains(thingType) && !args.Player.HasPermission(Permissions.summonboss))
var isKnownBoss = thingType > 0 && thingType < Terraria.ID.NPCID.Count && NPCID.Sets.MPAllowedEnemies[thingType];
if ((isKnownBoss || thingType == -16) && !args.Player.HasPermission(Permissions.summonboss))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawnBoss rejected boss {0} {1}", args.Player.Name, thingType);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawnBoss rejected boss {0} {1}", args.Player.Name, thingType));
args.Player.SendErrorMessage(GetString("You do not have permission to summon bosses."));
return true;
}
if (invasions.Contains(thingType) && !args.Player.HasPermission(Permissions.startinvasion))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawnBoss rejected invasion {0} {1}", args.Player.Name, thingType);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawnBoss rejected invasion {0} {1}", args.Player.Name, thingType));
args.Player.SendErrorMessage(GetString("You do not have permission to start invasions."));
return true;
}
if (pets.Contains(thingType) && !args.Player.HasPermission(Permissions.spawnpets))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawnBoss rejected pet {0} {1}", args.Player.Name, thingType);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSpawnBoss rejected pet {0} {1}", args.Player.Name, thingType));
args.Player.SendErrorMessage(GetString("You do not have permission to spawn pets."));
return true;
}
@ -3541,6 +3539,18 @@ namespace TShockAPI
string thing;
switch (thingType)
{
case -18:
thing = GetString("{0} applied traveling merchant's satchel!", args.Player.Name);
break;
case -17:
thing = GetString("{0} applied advanced combat techniques volume 2!", args.Player.Name);
break;
case -16:
thing = GetString("{0} summoned a Mechdusa!", args.Player.Name);
break;
case -15:
thing = GetString("{0} has sent a request to the slime delivery service!", args.Player.Name);
break;
case -14:
thing = GetString("{0} has sent a request to the bunny delivery service!", args.Player.Name);
break;
@ -3581,6 +3591,10 @@ namespace TShockAPI
thing = GetString("{0} summoned a Goblin Invasion!", args.Player.Name);
break;
default:
if (!isKnownBoss)
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSpawnBoss unknown boss {0} summoned by {1}", thingType, args.Player.Name);
NPC npc = new NPC();
npc.SetDefaults(thingType);
thing = GetString("{0} summoned the {1}!", args.Player.Name, npc.FullName);
break;
}
@ -3605,7 +3619,7 @@ namespace TShockAPI
if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY || t > Main.numTileColors)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintTile rejected range check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintTile rejected range check {0}", args.Player.Name));
return true;
}
if (OnPaintTile(args.Player, args.Data, x, y, t))
@ -3623,7 +3637,7 @@ namespace TShockAPI
!args.Player.Accessories.Any(HasPaintSprayerAbilities) &&
!args.Player.Inventory.Any(HasPaintSprayerAbilities))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintTile rejected select consistency {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintTile rejected select consistency {0}", args.Player.Name));
args.Player.SendData(PacketTypes.PaintTile, "", x, y, Main.tile[x, y].color());
return true;
}
@ -3632,7 +3646,7 @@ namespace TShockAPI
!args.Player.HasPaintPermission(x, y) ||
!args.Player.IsInRange(x, y))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintTile rejected throttle/permission/range check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintTile rejected throttle/permission/range check {0}", args.Player.Name));
args.Player.SendData(PacketTypes.PaintTile, "", x, y, Main.tile[x, y].color());
return true;
}
@ -3652,7 +3666,7 @@ namespace TShockAPI
if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY || t > Main.numTileColors)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintWall rejected range check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintWall rejected range check {0}", args.Player.Name));
return true;
}
if (OnPaintWall(args.Player, args.Data, x, y, t))
@ -3670,7 +3684,7 @@ namespace TShockAPI
!args.Player.Accessories.Any(HasPaintSprayerAbilities) &&
!args.Player.Inventory.Any(HasPaintSprayerAbilities))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintWall rejected selector consistency {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintWall rejected selector consistency {0}", args.Player.Name));
args.Player.SendData(PacketTypes.PaintWall, "", x, y, Main.tile[x, y].wallColor());
return true;
}
@ -3679,7 +3693,7 @@ namespace TShockAPI
!args.Player.HasPaintPermission(x, y) ||
!args.Player.IsInRange(x, y))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePaintWall rejected throttle/permission/range {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePaintWall rejected throttle/permission/range {0}", args.Player.Name));
args.Player.SendData(PacketTypes.PaintWall, "", x, y, Main.tile[x, y].wallColor());
return true;
}
@ -3727,7 +3741,7 @@ namespace TShockAPI
//Rod of Discord teleport (usually (may be used by modded clients to teleport))
if (type == 0 && !args.Player.HasPermission(Permissions.rod))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleport rejected rod type {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleport rejected rod type {0} {1}", args.Player.Name, type));
args.Player.SendErrorMessage(GetString("You do not have permission to teleport using items.")); // Was going to write using RoD but Hook of Disonnance and Potion of Return both use the same teleport packet as RoD.
args.Player.Teleport(args.TPlayer.position.X, args.TPlayer.position.Y); // Suggest renaming rod permission unless someone plans to add separate perms for the other 2 tp items.
return true;
@ -3736,7 +3750,7 @@ namespace TShockAPI
//NPC teleport
if (type == 1 && id >= Main.maxNPCs)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleport rejected npc teleport {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleport rejected npc teleport {0} {1}", args.Player.Name, type));
return true;
}
@ -3745,13 +3759,13 @@ namespace TShockAPI
{
if (id >= Main.maxPlayers || Main.player[id] == null || TShock.Players[id] == null)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleport rejected p2p extents {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleport rejected p2p extents {0} {1}", args.Player.Name, type));
return true;
}
if (!args.Player.HasPermission(Permissions.wormhole))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleport rejected p2p wormhole permission {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleport rejected p2p wormhole permission {0} {1}", args.Player.Name, type));
args.Player.SendErrorMessage(GetString("You do not have permission to teleport using Wormhole Potions."));
args.Player.Teleport(args.TPlayer.position.X, args.TPlayer.position.Y);
return true;
@ -3779,7 +3793,7 @@ namespace TShockAPI
if (Main.npc[npcID]?.catchItem == 0)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleCatchNpc catch zero {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleCatchNpc catch zero {0}", args.Player.Name));
Main.npc[npcID].active = true;
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, npcID);
return true;
@ -3787,7 +3801,7 @@ namespace TShockAPI
if (args.Player.IsBeingDisabled())
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleCatchNpc rejected catch npc {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleCatchNpc rejected catch npc {0}", args.Player.Name));
return true;
}
@ -3815,7 +3829,7 @@ namespace TShockAPI
void Fail(string tpItem)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleportationPotion rejected permissions {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleportationPotion rejected permissions {0} {1}", args.Player.Name, type));
args.Player.SendErrorMessage(GetString("You do not have permission to teleport using {0}.", tpItem));
}
@ -3825,7 +3839,7 @@ namespace TShockAPI
if (args.Player.ItemInHand.type != ItemID.TeleportationPotion &&
args.Player.SelectedItem.type != ItemID.TeleportationPotion)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type));
return true;
}
@ -3841,7 +3855,7 @@ namespace TShockAPI
args.Player.ItemInHand.type != ItemID.ShellphoneOcean &&
args.Player.SelectedItem.type != ItemID.ShellphoneOcean)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type));
return true;
}
@ -3864,7 +3878,7 @@ namespace TShockAPI
args.Player.ItemInHand.type != ItemID.ShellphoneHell &&
args.Player.SelectedItem.type != ItemID.ShellphoneHell)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type));
return true;
}
@ -3884,7 +3898,7 @@ namespace TShockAPI
case 3: // Shellphone (Spawn)
if (args.Player.ItemInHand.type != ItemID.ShellphoneSpawn && args.Player.SelectedItem.type != ItemID.ShellphoneSpawn)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleTeleportationPotion rejected not holding the correct item {0} {1}", args.Player.Name, type));
return true;
}
break;
@ -3903,7 +3917,7 @@ namespace TShockAPI
private static bool HandleNumberOfAnglerQuestsCompleted(GetDataHandlerArgs args)
{
// Never sent by vanilla client, ignore this
TShock.Log.ConsoleDebug("GetDataHandlers / HandleNumberOfAnglerQuestsCompleted surprise packet! Someone tell the TShock team! {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleNumberOfAnglerQuestsCompleted surprise packet! Someone tell the TShock team! {0}", args.Player.Name));
return true;
}
@ -3982,33 +3996,33 @@ namespace TShockAPI
if (position.X < 0 || position.X >= (Main.maxTilesX * 16.0f) || position.Y < 0 || position.Y >= (Main.maxTilesY * 16.0f))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSyncExtraValue rejected extents check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSyncExtraValue rejected extents check {0}", args.Player.Name));
return true;
}
if (!Main.expertMode && !Main.masterMode)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSyncExtraValue rejected expert/master mode check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSyncExtraValue rejected expert/master mode check {0}", args.Player.Name));
return true;
}
if (npcIndex < 0 || npcIndex >= Main.npc.Length)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSyncExtraValue rejected npc id out of bounds check - NPC ID: {0}", npcIndex);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSyncExtraValue rejected npc id out of bounds check - NPC ID: {0}", npcIndex));
return true;
}
var npc = Main.npc[npcIndex];
if (npc == null)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSyncExtraValue rejected npc is null - NPC ID: {0}", npcIndex);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSyncExtraValue rejected npc is null - NPC ID: {0}", npcIndex));
return true;
}
var distanceFromCoinPacketToNpc = Utils.Distance(position, npc.position);
if (distanceFromCoinPacketToNpc >= (5 * 16f)) //5 tile range
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleSyncExtraValue rejected range check {0},{1} vs {2},{3} which is {4}", npc.position.X, npc.position.Y, position.X, position.Y, distanceFromCoinPacketToNpc);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleSyncExtraValue rejected range check {0},{1} vs {2},{3} which is {4}", npc.position.X, npc.position.Y, position.X, position.Y, distanceFromCoinPacketToNpc));
return true;
}
@ -4025,7 +4039,7 @@ namespace TShockAPI
{
if (projectile.owner != args.TPlayer.whoAmI)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleKillPortal rejected owner mismatch check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleKillPortal rejected owner mismatch check {0}", args.Player.Name));
return true;
}
}
@ -4062,14 +4076,14 @@ namespace TShockAPI
if (projectile == null || !projectile.active)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleNpcTeleportPortal rejected null check {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleNpcTeleportPortal rejected null check {0}", args.Player.Name));
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, npcIndex);
return true;
}
if (projectile.type != ProjectileID.PortalGunGate)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleNpcTeleportPortal rejected not thinking with portals {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleNpcTeleportPortal rejected not thinking with portals {0}", args.Player.Name));
NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, npcIndex);
return true;
}
@ -4109,7 +4123,7 @@ namespace TShockAPI
{
if (args.Player != null && !args.Player.HasPermission(Permissions.toggleparty))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleToggleParty rejected no party {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleToggleParty rejected no party {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to start a party."));
return true;
}
@ -4121,13 +4135,13 @@ namespace TShockAPI
{
if (args.Player.IsBouncerThrottled())
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleOldOnesArmy rejected throttled {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleOldOnesArmy rejected throttled {0}", args.Player.Name));
return true;
}
if (!args.Player.HasPermission(Permissions.startdd2))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandleOldOnesArmy rejected permissions {0}", args.Player.Name);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandleOldOnesArmy rejected permissions {0}", args.Player.Name));
args.Player.SendErrorMessage(GetString("You do not have permission to start the Old One's Army."));
return true;
}
@ -4193,13 +4207,13 @@ namespace TShockAPI
{
if (!args.Player.Ban(banReason, "TShock"))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerKillMeV2 kicked with difficulty {0} {1}", args.Player.Name, args.TPlayer.difficulty);
args.Player.Kick("You died! Normally, you'd be banned.", true, true);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerKillMeV2 kicked with difficulty {0} {1}", args.Player.Name, args.TPlayer.difficulty));
args.Player.Kick(GetString("You died! Normally, you'd be banned."), true, true);
}
}
else if (shouldKick)
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerKillMeV2 kicked with difficulty {0} {1}", args.Player.Name, args.TPlayer.difficulty);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerKillMeV2 kicked with difficulty {0} {1}", args.Player.Name, args.TPlayer.difficulty));
args.Player.Kick(kickReason, true, true, null, false);
}
}
@ -4208,7 +4222,7 @@ namespace TShockAPI
{
if (TShock.CharacterDB.RemovePlayer(args.Player.Account.ID))
{
TShock.Log.ConsoleDebug("GetDataHandlers / HandlePlayerKillMeV2 ssc delete {0} {1}", args.Player.Name, args.TPlayer.difficulty);
TShock.Log.ConsoleDebug(GetString("GetDataHandlers / HandlePlayerKillMeV2 ssc delete {0} {1}", args.Player.Name, args.TPlayer.difficulty));
args.Player.SendErrorMessage(GetString("You have fallen in hardcore mode, and your items have been lost forever."));
TShock.CharacterDB.SeedInitialData(args.Player.Account);
}
@ -4354,8 +4368,8 @@ namespace TShockAPI
private static bool HandleSyncCavernMonsterType(GetDataHandlerArgs args)
{
args.Player.Kick("Exploit attempt detected!");
TShock.Log.ConsoleDebug($"HandleSyncCavernMonsterType: Player is trying to modify NPC cavernMonsterType; this is a crafted packet! - From {args.Player.Name}");
args.Player.Kick(GetString("Exploit attempt detected!"));
TShock.Log.ConsoleDebug(GetString($"HandleSyncCavernMonsterType: Player is trying to modify NPC cavernMonsterType; this is a crafted packet! - From {args.Player.Name}"));
return true;
}
@ -4541,7 +4555,8 @@ namespace TShockAPI
NPCID.BloodEelBody,
NPCID.BloodEelTail,
NPCID.BloodNautilus,
NPCID.DukeFishron
NPCID.DukeFishron,
NPCID.TownSlimeRed
};
/// <summary>

View file

@ -207,6 +207,7 @@ namespace TShockAPI.Handlers
case TileID.Plants:
case TileID.MinecartTrack:
case TileID.ChristmasTree:
case TileID.ShimmerMonolith:
{
// Allowed changes
}
@ -425,7 +426,7 @@ namespace TShockAPI.Handlers
WallID.Sets.Conversion.NewWall4[tile.wall] && WallID.Sets.Conversion.NewWall4[newTile.Wall]
)
{
TShock.Log.ConsoleDebug($"Bouncer / SendTileRect processing a wall conversion update - [{tile.wall}] -> [{newTile.Wall}]");
TShock.Log.ConsoleDebug(GetString($"Bouncer / SendTileRect processing a wall conversion update - [{tile.wall}] -> [{newTile.Wall}]"));
UpdateServerTileState(tile, newTile, TileDataType.Wall);
}
}

View file

@ -91,7 +91,7 @@ namespace TShockAPI
if (DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(player.TPlayer.inventory[player.TPlayer.selectedItem].netID), player))
{
string itemName = player.TPlayer.inventory[player.TPlayer.selectedItem].Name;
player.Disable($"holding banned item: {itemName}", disableFlags);
player.Disable(GetString($"holding banned item: {itemName}"), disableFlags);
SendCorrectiveMessage(player, itemName);
}
@ -160,7 +160,7 @@ namespace TShockAPI
if (DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(player.TPlayer.inventory[args.SelectedItem].netID), args.Player))
{
player.TPlayer.controlUseItem = false;
player.Disable($"holding banned item: {itemName}", disableFlags);
player.Disable(GetString($"holding banned item: {itemName}"), disableFlags);
SendCorrectiveMessage(player, itemName);

View file

@ -50,12 +50,12 @@ namespace TShockAPI.Localization
LanguageManager.Instance.SetLanguage(GameCulture.FromCultureName(GameCulture.CultureName.English));
}
for (var i = -48; i < Main.maxItemTypes; i++)
for (var i = -48; i < Terraria.ID.ItemID.Count; i++)
{
ItemNames.Add(i, Lang.GetItemNameValue(i));
}
for (var i = -17; i < Main.maxNPCTypes; i++)
for (var i = -17; i < Terraria.ID.NPCID.Count; i++)
{
NpcNames.Add(i, Lang.GetNPCNameValue(i));
}

View file

@ -527,7 +527,7 @@ namespace TShockAPI
var descattr =
field.GetCustomAttributes(false).FirstOrDefault(o => o is DescriptionAttribute) as DescriptionAttribute;
var desc = descattr != null && !string.IsNullOrWhiteSpace(descattr.Description) ? descattr.Description : "None";
var desc = descattr != null && !string.IsNullOrWhiteSpace(descattr.Description) ? descattr.Description : GetString("No description available.");
var commands = GetCommands(name);
foreach (var c in commands)
@ -542,9 +542,9 @@ namespace TShockAPI
c =>
c.Name + (c.Names.Count > 1 ? " ({0})".SFormat(string.Join(" ", c.Names.ToArray(), 1, c.Names.Count - 1)) : ""));
sb.AppendLine("## {0}".SFormat(name));
sb.AppendLine("{0}".SFormat(desc));
sb.AppendLine("* **Commands**: `{0}`".SFormat(strs.Count() > 0 ? string.Join(", ", strs) : "None"));
sb.AppendLine($"## {name}");
sb.AppendLine($"{desc}");
sb.AppendLine(GetString("* **Commands**: `{0}`", strs.Count() > 0 ? string.Join(", ", strs) : GetString("No associated commands.")));
sb.AppendLine();
}

View file

@ -673,7 +673,7 @@ namespace TShockAPI
NetMessage.SendData(42, player.Index, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
NetMessage.SendData(16, player.Index, -1, NetworkText.Empty, player.Index, 0f, 0f, 0f, 0);
for (int k = 0; k < 22; k++)
for (int k = 0; k < Player.maxBuffs; k++)
{
player.TPlayer.buffType[k] = 0;
}

View file

@ -1217,34 +1217,40 @@ namespace TShockAPI
var permission = method.GetCustomAttributes(false).Where(o => o is Permission);
if (permission.Count() > 0)
{
sb.AppendLine("* **Permissions**: `{0}`".SFormat(String.Join(", ", permission.Select(p => ((Permission)p).Name))));
sb.AppendLine(GetString("* **Permissions**: `{0}`", String.Join(", ", permission.Select(p => ((Permission)p).Name))));
}
else
{
sb.AppendLine("No special permissions are required for this route.");
sb.AppendLine(GetString("No special permissions are required for this route."));
}
sb.AppendLine();
var verbs = method.GetCustomAttributes(false).Where(o => o is Verb);
if (verbs.Count() > 0)
{
sb.AppendLine("**Verbs**:");
sb.AppendLine(GetString("**Verbs**:"));
foreach (Verb verb in verbs)
{
sb.AppendLine("* `{0}` ({1}) `[{2}]` - {3}".SFormat(verb.Name, verb.Required ? "Required" : "Optional", verb.ArgumentType.Name, verb.Description));
if (verb.Required)
sb.AppendLine(GetString("* `{0}` (Required) `{1}` - {2}".SFormat(verb.Name, verb.ArgumentType.Name, verb.Description)));
else
sb.AppendLine(GetString("* `{0}` (Optional) `{1}` - {2}".SFormat(verb.Name, verb.ArgumentType.Name, verb.Description)));
}
}
sb.AppendLine();
var nouns = method.GetCustomAttributes(false).Where(o => o is Noun);
if (nouns.Count() > 0)
{
sb.AppendLine("**Nouns**:");
sb.AppendLine(GetString("**Nouns**:"));
foreach (Noun noun in nouns)
{
sb.AppendLine("* `{0}` ({1}) `[{2}]` - {3}".SFormat(noun.Name, noun.Required ? "Required" : "Optional", noun.ArgumentType.Name, noun.Description));
if (noun.Required)
sb.AppendLine(GetString("* `{0}` (Required) `{1}` - {2}".SFormat(noun.Name, noun.ArgumentType.Name, noun.Description)));
else
sb.AppendLine(GetString("* `{0}` (Optional) `{1}` - {2}".SFormat(noun.Name, noun.ArgumentType.Name, noun.Description)));
}
}
sb.AppendLine();
sb.AppendLine("**Example Usage**: `{0}?{1}`".SFormat(routeattr.Route,
sb.AppendLine(GetString("**Example Usage**: `{0}?{1}`", routeattr.Route,
string.Join("&", nouns.Select(n => String.Format("{0}={0}", ((Noun)n).Name)))));
sb.AppendLine();
}

View file

@ -1921,9 +1921,9 @@ namespace TShockAPI
if (!silent)
{
if (string.IsNullOrWhiteSpace(adminUserName))
TShock.Utils.Broadcast(GetString("{0} was kicked for '{1}'", Name, reason.ToLower()), Color.Green);
TShock.Utils.Broadcast(GetString("{0} was kicked for '{1}'", Name, reason), Color.Green);
else
TShock.Utils.Broadcast(GetString("{0} kicked {1} for '{2}'", adminUserName, Name, reason.ToLower()), Color.Green);
TShock.Utils.Broadcast(GetString("{0} kicked {1} for '{2}'", adminUserName, Name, reason), Color.Green);
}
return true;
}

View file

@ -31,7 +31,7 @@ namespace TShockAPI
{
public class TSServerPlayer : TSPlayer
{
public static string AccountName = "ServerConsole";
public static string AccountName = GetParticularString("The account name of server console.", "ServerConsole");
public TSServerPlayer()
: base("Server")
@ -197,17 +197,17 @@ namespace TShockAPI
private readonly Dictionary<Color, ConsoleColor> _consoleColorMap = new Dictionary<Color, ConsoleColor>
{
{ Color.Red, ConsoleColor.Red },
{ Color.Green, ConsoleColor.Green },
{ Color.Blue, ConsoleColor.Cyan },
{ new Color(255, 250, 170), ConsoleColor.Yellow },
{ Color.Red, ConsoleColor.Red },
{ Color.Green, ConsoleColor.Green },
{ Color.Blue, ConsoleColor.Cyan },
{ new Color(255, 250, 170), ConsoleColor.Yellow },
{ new Color(170, 170, 255), ConsoleColor.Cyan },
{ new Color(255, 170, 255), ConsoleColor.Magenta },
{ new Color(170, 255, 170), ConsoleColor.Green },
{ new Color(255, 170, 255), ConsoleColor.Magenta },
{ new Color(170, 255, 170), ConsoleColor.Green },
{ new Color(255, 170, 170), ConsoleColor.Red },
{ new Color(139, 0, 0), ConsoleColor.DarkRed }, // This is the console warning color
{ new Color(139, 0, 0), ConsoleColor.DarkRed }, // This is the console warning color
{ Color.PaleVioletRed, ConsoleColor.Magenta }, // This is the command logging color
{ Color.White, ConsoleColor.White }
{ Color.White, ConsoleColor.White }
};
private ConsoleColor PickNearbyConsoleColor(Color color)

View file

@ -205,7 +205,7 @@ namespace TShockAPI
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
var osx = Path.Combine(Environment.CurrentDirectory, "runtimes", "osx-x64");
if(Directory.Exists(osx))
if (Directory.Exists(osx))
matches = Directory.GetFiles(osx, "*" + libraryName + "*", SearchOption.AllDirectories);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
@ -247,7 +247,6 @@ namespace TShockAPI
public override void Initialize()
{
string logFilename;
string logPathSetupWarning;
OTAPI.Hooks.Netplay.CreateTcpListener += (sender, args) =>
{
@ -294,10 +293,7 @@ namespace TShockAPI
}
catch (Exception ex)
{
logPathSetupWarning =
"Could not apply the given log path / log format, defaults will be used. Exception details:\n" + ex;
ServerApi.LogWriter.PluginWriteLine(this, logPathSetupWarning, TraceLevel.Error);
ServerApi.LogWriter.PluginWriteLine(this, GetString("Could not apply the given log path / log format, defaults will be used. Exception details:\n{0}", ex), TraceLevel.Error);
// Problem with the log path or format use the default
logFilename = Path.Combine(LogPathDefault, now.ToString(LogFormatDefault) + ".log");
@ -353,8 +349,8 @@ namespace TShockAPI
if (File.Exists(Path.Combine(SavePath, "tshock.pid")))
{
Log.ConsoleInfo(
"TShock was improperly shut down. Please use the exit command in the future to prevent this.");
Log.ConsoleInfo(GetString(
"TShock was improperly shut down. Please use the exit command in the future to prevent this."));
File.Delete(Path.Combine(SavePath, "tshock.pid"));
}
File.WriteAllText(Path.Combine(SavePath, "tshock.pid"),
@ -387,7 +383,7 @@ namespace TShockAPI
if (Config.Settings.EnableGeoIP && File.Exists(geoippath))
Geo = new GeoIPCountry(geoippath);
Log.ConsoleInfo("TShock {0} ({1}) now running.", Version, VersionCodename);
Log.ConsoleInfo(GetString("TShock {0} ({1}) now running.", Version, VersionCodename));
ServerApi.Hooks.GamePostInitialize.Register(this, OnPostInit);
ServerApi.Hooks.GameUpdate.Register(this, OnUpdate);
@ -425,14 +421,20 @@ namespace TShockAPI
if (Config.Settings.RestApiEnabled)
RestApi.Start();
Log.ConsoleInfo("AutoSave " + (Config.Settings.AutoSave ? "Enabled" : "Disabled"));
Log.ConsoleInfo("Backups " + (Backups.Interval > 0 ? "Enabled" : "Disabled"));
if (Config.Settings.AutoSave)
Log.ConsoleInfo(GetString("AutoSave Enabled"));
else
Log.ConsoleInfo(GetString("AutoSave Disabled"));
if (Backups.Interval > 0)
Log.ConsoleInfo(GetString("Backups Enabled"));
else
Log.ConsoleInfo(GetString("Backups Disabled"));
Initialized?.Invoke();
Log.ConsoleInfo("Welcome to TShock for Terraria!");
Log.ConsoleInfo("TShock comes with no warranty & is free software.");
Log.ConsoleInfo("You can modify & distribute it under the terms of the GNU GPLv3.");
Log.ConsoleInfo(GetString("Welcome to TShock for Terraria!"));
Log.ConsoleInfo(GetString("TShock comes with no warranty & is free software."));
Log.ConsoleInfo(GetString("You can modify & distribute it under the terms of the GNU GPLv3."));
}
catch (Exception ex)
@ -440,7 +442,7 @@ namespace TShockAPI
// handle if Log was not initialised
void SafeError(string message)
{
if(Log is not null) Log.ConsoleError(message);
if (Log is not null) Log.ConsoleError(message);
else Console.WriteLine(message);
};
SafeError(GetString("TShock encountered a problem from which it cannot recover. The following message may help diagnose the problem."));
@ -581,7 +583,7 @@ namespace TShockAPI
{
if (player.IP == ip)
{
player.Kick("You logged in from the same IP.", true, true, null, true);
player.Kick(GetString("You logged in from the same IP."), true, true, null, true);
args.Handled = true;
return;
}
@ -590,7 +592,7 @@ namespace TShockAPI
var ips = JsonConvert.DeserializeObject<List<string>>(player.Account.KnownIps);
if (ips.Contains(ip))
{
player.Kick("You logged in from another location.", true, true, null, true);
player.Kick(GetString("You logged in from another location."), true, true, null, true);
args.Handled = true;
}
}
@ -717,10 +719,10 @@ namespace TShockAPI
tryingToShutdown = true;
Log.ConsoleInfo("Shutting down safely. To force shutdown, send SIGINT (CTRL + C) again.");
Log.ConsoleInfo(GetString("Shutting down safely. To force shutdown, send SIGINT (CTRL + C) again."));
// Perform a safe shutdown
TShock.Utils.StopServer(true, "Server console interrupted!");
TShock.Utils.StopServer(true, GetString("Server console interrupted!"));
}
/// <summary>HandleCommandLine - Handles the command line parameters passed to the server.</summary>
@ -747,7 +749,7 @@ namespace TShockAPI
SavePath = path ?? "tshock";
if (path != null)
{
ServerApi.LogWriter.PluginWriteLine(this, "Config path has been set to " + path, TraceLevel.Info);
ServerApi.LogWriter.PluginWriteLine(this, GetString("Config path has been set to {0}", path), TraceLevel.Info);
}
})
@ -757,7 +759,7 @@ namespace TShockAPI
if (path != null)
{
Main.WorldPath = path;
ServerApi.LogWriter.PluginWriteLine(this, "World path has been set to " + path, TraceLevel.Info);
ServerApi.LogWriter.PluginWriteLine(this, GetString("World path has been set to {0}", path), TraceLevel.Info);
}
})
@ -767,7 +769,7 @@ namespace TShockAPI
if (path != null)
{
LogPath = path;
ServerApi.LogWriter.PluginWriteLine(this, "Log path has been set to " + path, TraceLevel.Info);
ServerApi.LogWriter.PluginWriteLine(this, GetString("Log path has been set to {0}", path), TraceLevel.Info);
}
})
@ -877,13 +879,13 @@ namespace TShockAPI
Netplay.ListenPort = port;
Config.Settings.ServerPort = port;
OverridePort = true;
Log.ConsoleInfo("Port overridden by startup argument. Set to " + port);
Log.ConsoleInfo(GetString("Port overridden by startup argument. Set to {0}", port));
}
})
.AddFlags(restTokenSet, (token) =>
{
RESTStartupTokens.Add(token, new SecureRest.TokenData { Username = "null", UserGroupName = "superadmin" });
Console.WriteLine("Startup parameter overrode REST token.");
Console.WriteLine(GetString("Startup parameter overrode REST token."));
})
.AddFlags(restEnableSet, (e) =>
{
@ -891,7 +893,7 @@ namespace TShockAPI
if (bool.TryParse(e, out enabled))
{
Config.Settings.RestApiEnabled = enabled;
Console.WriteLine("Startup parameter overrode REST enable.");
Console.WriteLine(GetString("Startup parameter overrode REST enable."));
}
})
.AddFlags(restPortSet, (p) =>
@ -900,7 +902,7 @@ namespace TShockAPI
if (int.TryParse(p, out restPort))
{
Config.Settings.RestApiPort = restPort;
Console.WriteLine("Startup parameter overrode REST port.");
Console.WriteLine(GetString("Startup parameter overrode REST port."));
}
})
.AddFlags(playerSet, (p) =>
@ -909,7 +911,7 @@ namespace TShockAPI
if (int.TryParse(p, out slots))
{
Config.Settings.MaxSlots = slots;
Console.WriteLine("Startup parameter overrode maximum player slot configuration value.");
Console.WriteLine(GetString("Startup parameter overrode maximum player slot configuration value."));
}
});
@ -933,19 +935,19 @@ namespace TShockAPI
//CLI defined password overrides a config password
if (!string.IsNullOrEmpty(Config.Settings.ServerPassword))
{
Log.ConsoleError("!!! The server password in config.json was overridden by the interactive prompt and will be ignored.");
Log.ConsoleError(GetString("!!! The server password in config.json was overridden by the interactive prompt and will be ignored."));
}
if (!Config.Settings.DisableUUIDLogin)
{
Log.ConsoleError("!!! UUID login is enabled. If a user's UUID matches an account, the server password will be bypassed.");
Log.ConsoleError("!!! > Set DisableUUIDLogin to true in the config file and /reload if this is a problem.");
Log.ConsoleError(GetString("!!! UUID login is enabled. If a user's UUID matches an account, the server password will be bypassed."));
Log.ConsoleError(GetString("!!! > Set DisableUUIDLogin to true in the config file and /reload if this is a problem."));
}
if (!Config.Settings.DisableLoginBeforeJoin)
{
Log.ConsoleError("!!! Login before join is enabled. Existing accounts can login & the server password will be bypassed.");
Log.ConsoleError("!!! > Set DisableLoginBeforeJoin to true in the config file and /reload if this is a problem.");
Log.ConsoleError(GetString("!!! Login before join is enabled. Existing accounts can login & the server password will be bypassed."));
Log.ConsoleError(GetString("!!! > Set DisableLoginBeforeJoin to true in the config file and /reload if this is a problem."));
}
_cliPassword = Netplay.ServerPassword;
@ -956,19 +958,19 @@ namespace TShockAPI
{
if (!string.IsNullOrEmpty(Config.Settings.ServerPassword))
{
Log.ConsoleInfo("A password for this server was set in config.json and is being used.");
Log.ConsoleInfo(GetString("A password for this server was set in config.json and is being used."));
}
}
if (!Config.Settings.DisableLoginBeforeJoin)
{
Log.ConsoleInfo("Login before join enabled. Users may be prompted for an account specific password instead of a server password on connect.");
Log.ConsoleInfo(GetString("Login before join enabled. Users may be prompted for an account specific password instead of a server password on connect."));
}
if (!Config.Settings.DisableUUIDLogin)
{
Log.ConsoleInfo("Login using UUID enabled. Users automatically login via UUID.");
Log.ConsoleInfo("A malicious server can easily steal a user's UUID. You may consider turning this option off if you run a public server.");
Log.ConsoleInfo(GetString("Login using UUID enabled. Users automatically login via UUID."));
Log.ConsoleInfo(GetString("A malicious server can easily steal a user's UUID. You may consider turning this option off if you run a public server."));
}
// Disable the auth system if "setup.lock" is present or a user account already exists
@ -1090,7 +1092,7 @@ namespace TShockAPI
{
if (player.TileKillThreshold >= Config.Settings.TileKillThreshold)
{
player.Disable("Reached TileKill threshold.", flags);
player.Disable(GetString("Reached TileKill threshold."), flags);
TSPlayer.Server.RevertTiles(player.TilesDestroyed);
player.TilesDestroyed.Clear();
}
@ -1107,7 +1109,7 @@ namespace TShockAPI
{
if (player.TilePlaceThreshold >= Config.Settings.TilePlaceThreshold)
{
player.Disable("Reached TilePlace threshold", flags);
player.Disable(GetString("Reached TilePlace threshold"), flags);
lock (player.TilesCreated)
{
TSPlayer.Server.RevertTiles(player.TilesCreated);
@ -1151,7 +1153,7 @@ namespace TShockAPI
if (player.TileLiquidThreshold >= Config.Settings.TileLiquidThreshold)
{
player.Disable("Reached TileLiquid threshold", flags);
player.Disable(GetString("Reached TileLiquid threshold"), flags);
}
if (player.TileLiquidThreshold > 0)
{
@ -1160,7 +1162,7 @@ namespace TShockAPI
if (player.ProjectileThreshold >= Config.Settings.ProjectileThreshold)
{
player.Disable("Reached projectile threshold", flags);
player.Disable(GetString("Reached projectile threshold"), flags);
}
if (player.ProjectileThreshold > 0)
{
@ -1169,7 +1171,7 @@ namespace TShockAPI
if (player.PaintThreshold >= Config.Settings.TilePaintThreshold)
{
player.Disable("Reached paint threshold", flags);
player.Disable(GetString("Reached paint threshold"), flags);
}
if (player.PaintThreshold > 0)
{
@ -1178,7 +1180,7 @@ namespace TShockAPI
if (player.HealOtherThreshold >= TShock.Config.Settings.HealOtherThreshold)
{
player.Disable("Reached HealOtherPlayer threshold", flags);
player.Disable(GetString("Reached HealOtherPlayer threshold"), flags);
}
if (player.HealOtherThreshold > 0)
{
@ -1282,7 +1284,7 @@ namespace TShockAPI
{
if (ShuttingDown)
{
NetMessage.SendData((int)PacketTypes.Disconnect, args.Who, -1, NetworkText.FromLiteral("Server is shutting down..."));
NetMessage.SendData((int)PacketTypes.Disconnect, args.Who, -1, NetworkText.FromLiteral(GetString("Server is shutting down...")));
args.Handled = true;
return;
}
@ -1311,7 +1313,7 @@ namespace TShockAPI
{
if (Config.Settings.KickProxyUsers)
{
player.Kick("Connecting via a proxy is not allowed.", true, true, null, false);
player.Kick(GetString("Connecting via a proxy is not allowed."), true, true, null, false);
args.Handled = true;
return;
}
@ -1333,7 +1335,7 @@ namespace TShockAPI
if (Config.Settings.KickEmptyUUID && String.IsNullOrWhiteSpace(player.UUID))
{
player.Kick("Your client sent a blank UUID. Configure it to send one or use a different client.", true, true, null, false);
player.Kick(GetString("Your client sent a blank UUID. Configure it to send one or use a different client."), true, true, null, false);
args.Handled = true;
return;
}
@ -1379,8 +1381,8 @@ namespace TShockAPI
if (tsplr.ReceivedInfo)
{
if (!tsplr.SilentKickInProgress && tsplr.State >= 3)
Utils.Broadcast(tsplr.Name + " has left.", Color.Yellow);
Log.Info("{0} disconnected.", tsplr.Name);
Utils.Broadcast(GetString("{0} has left.", tsplr.Name), Color.Yellow);
Log.Info(GetString("{0} disconnected."), tsplr.Name);
if (tsplr.IsLoggedIn && !tsplr.IsDisabledPendingTrashRemoval && Main.ServerSideCharacter && (!tsplr.Dead || tsplr.TPlayer.difficulty != 2))
{
@ -1430,7 +1432,7 @@ namespace TShockAPI
if (args.Text.Length > 500)
{
tsplr.Kick("Crash attempt via long chat packet.", true);
tsplr.Kick(GetString("Crash attempt via long chat packet."), true);
args.Handled = true;
return;
}
@ -1466,12 +1468,12 @@ namespace TShockAPI
{
// This is required in case anyone makes HandleCommand return false again
tsplr.SendErrorMessage(GetString("Unable to parse command. Please contact an administrator for assistance."));
Log.ConsoleError("Unable to parse command '{0}' from player {1}.", text, tsplr.Name);
Log.ConsoleError(GetString("Unable to parse command '{0}' from player {1}."), text, tsplr.Name);
}
}
catch (Exception ex)
{
Log.ConsoleError("An exception occurred executing a command.");
Log.ConsoleError(GetString("An exception occurred executing a command."));
Log.Error(ex.ToString());
}
}
@ -1569,7 +1571,10 @@ namespace TShockAPI
if (args.Command == "autosave")
{
Main.autoSave = Config.Settings.AutoSave = !Config.Settings.AutoSave;
Log.ConsoleInfo("AutoSave " + (Config.Settings.AutoSave ? "Enabled" : "Disabled"));
if (Config.Settings.AutoSave)
Log.ConsoleInfo(GetString("AutoSave Enabled"));
else
Log.ConsoleInfo(GetString("AutoSave Disabled"));
}
else if (args.Command.StartsWith(Commands.Specifier) || args.Command.StartsWith(Commands.SilentSpecifier))
{

View file

@ -35,7 +35,7 @@
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
<PackageReference Include="GetText.NET" Version="1.7.14" />
<PackageReference Include="MySql.Data" Version="8.0.31" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.10" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.11" />
</ItemGroup>
<ItemGroup>

View file

@ -80,11 +80,11 @@ namespace TShockAPI
string msg = ex.BuildExceptionString();
//Give the console a brief
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"UpdateManager warning: {msg}");
Console.WriteLine(GetString($"UpdateManager warning: {msg}"));
Console.ForegroundColor = ConsoleColor.Gray;
//And log the full exception
TShock.Log.Warn($"UpdateManager warning: {ex.ToString()}");
TShock.Log.ConsoleError("Retrying in 5 minutes.");
TShock.Log.Warn(GetString($"UpdateManager warning: {ex.ToString()}"));
TShock.Log.ConsoleError(GetString("Retrying in 5 minutes."));
CheckXMinutes = 5;
}
}
@ -117,8 +117,7 @@ namespace TShockAPI
{
reason = "none";
}
throw new WebException("Update server did not respond with an OK. "
+ $"Server message: [error {resp.StatusCode}] {reason}");
throw new WebException(GetString($"Update server did not respond with an OK. Server message: [error {resp.StatusCode}] {reason}"));
}
string json = await resp.Content.ReadAsStringAsync();

View file

@ -251,7 +251,7 @@ namespace TShockAPI
int type = -1;
if (Int32.TryParse(text, out type))
{
if (type >= Main.maxItemTypes)
if (type >= Terraria.ID.ItemID.Count)
return new List<Item>();
return new List<Item> { GetItemById(type) };
}
@ -282,7 +282,7 @@ namespace TShockAPI
{
var startswith = new List<int>();
var contains = new List<int>();
for (int i = 1; i < Main.maxItemTypes; i++)
for (int i = 1; i < ItemID.Count; i++)
{
var currentName = Lang.GetItemNameValue(i);
if (!string.IsNullOrEmpty(currentName))
@ -341,7 +341,7 @@ namespace TShockAPI
int type = -1;
if (int.TryParse(idOrName, out type))
{
if (type >= Main.maxNPCTypes)
if (type >= Terraria.ID.NPCID.Count)
return new List<NPC>();
return new List<NPC> { GetNPCById(type) };
}
@ -369,7 +369,7 @@ namespace TShockAPI
{
var startswith = new List<int>();
var contains = new List<int>();
for (int i = -17; i < Main.maxNPCTypes; i++)
for (int i = -17; i < NPCID.Count; i++)
{
var currentName = Lang.GetNPCNameValue(i);
if (!string.IsNullOrEmpty(currentName))
@ -405,7 +405,7 @@ namespace TShockAPI
/// <returns>name</returns>
public string GetBuffName(int id)
{
return (id > 0 && id < Main.maxBuffTypes) ? Lang.GetBuffName(id) : null;
return (id > 0 && id < Terraria.ID.BuffID.Count) ? Lang.GetBuffName(id) : null;
}
/// <summary>
@ -415,7 +415,7 @@ namespace TShockAPI
/// <returns>description</returns>
public string GetBuffDescription(int id)
{
return (id > 0 && id < Main.maxBuffTypes) ? Lang.GetBuffDescription(id) : null;
return (id > 0 && id < Terraria.ID.BuffID.Count) ? Lang.GetBuffDescription(id) : null;
}
/// <summary>
@ -427,7 +427,7 @@ namespace TShockAPI
{
var startswith = new List<int>();
var contains = new List<int>();
for (int i = 1; i < Main.maxBuffTypes; i++)
for (int i = 1; i < BuffID.Count; i++)
{
var currentName = Lang.GetBuffName(i);
if (!string.IsNullOrWhiteSpace(currentName))
@ -1134,7 +1134,7 @@ namespace TShockAPI
internal void ComputeMaxStyles()
{
var item = new Item();
for (int i = 0; i < Main.maxItemTypes; i++)
for (int i = 0; i < Terraria.ID.ItemID.Count; i++)
{
item.netDefaults(i);
if (item.placeStyle >= 0)

View file

@ -30,12 +30,12 @@
<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
<PackageReference Include="MySql.Data" Version="8.0.31" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.10" />
<PackageReference Include="ModFramework" Version="1.1.6" GeneratePathProperty="true" /> <!-- only used to extract out to ./bin. -->
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.11" />
<PackageReference Include="ModFramework" Version="1.1.7" GeneratePathProperty="true" /> <!-- only used to extract out to ./bin. -->
<PackageReference Include="GetText.NET" Version="1.7.14" /> <!-- only used to extract out to ./bin. -->
<!-- the launcher doesnt need the direct OTAPI reference, but since PackageReference[ExcludeFromSingleFile] doesnt work, exclude the assets and copy manually -->
<PackageReference Include="OTAPI.Upcoming" Version="3.1.16" ExcludeAssets="all" GeneratePathProperty="true" />
<PackageReference Include="OTAPI.Upcoming" Version="3.1.18" ExcludeAssets="all" GeneratePathProperty="true" />
<None Include="$(PkgOTAPI_Upcoming)\lib\net6.0\OTAPI.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>

@ -1 +1 @@
Subproject commit b2ed9e4a7c6b35db30871963f12fe650c303d536
Subproject commit c9ca021a09f6dbbcddf3edb7f40806675683959f

View file

@ -3,6 +3,69 @@
This is the rolling changelog for TShock for Terraria. Changes listed under "upcoming changes" are only available in experimental builds.
<!-- ## How to add a changelog entry
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
ATTENTION MORTALS
PLEASE READ ALL OF THE INSTRUCTIONS HERE
IT IS SUPER ANNOYING TO HAVE TO FIX THE CHANGELOG EVERY SINGLE TIME BECAUSE NOBODY READS THESE
Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large.
* Put your entry in terms of what you changed in the past mood. For example: "Changed the world by adding new grommets."
@ -18,6 +81,19 @@ Use past tense when adding new entries; sign your name off when you add or chang
* Fixed item giving potentially dropping too many items (@PotatoCider, @punchready)
* Excluded GeoIP.dat from release bundle (@SignatureBeef)
* Updated the Utils.FindByIdOrName to follow same logic. Now fuzzy match fallback to `StartsWith` and then `Contains`. (@sgkoishi)
* Fixed item giving potentially dropping too many items. (@PotatoCider, @punchready)
* Excluded GeoIP.dat from release bundle. (@SignatureBeef)
* Added `TownSlimeRed` to `FishableNpcIDs` list, allowing it to be fished up. (@drunderscore)
* Bump to Terraria 1.4.4.8 via OTAPI 3.1.18. (@hakusaro, @SignatureBeef)
* In this version of Terraria, `Main.maxBuffTypes` and other `maxWhateverTypes` fields have been removed. Their replacements are in `Terraria.ID.whateverID.Count`. TShock calls to these fields have been swapped in order to bring forward compatibility with Terraria 1.4.4.8.
* In OTAPI 3.1.17, allowed Crystal Shard to grow. (@sgkoishi, @cc004, SignatureBeef/Open-Terraria-API#96)
* Added permission for summoning Mechdusa, Deerclops and slime pet. (@sgkoishi, #2808)
* Changed login to only restrict CC'd players during login whilst SSC is enabled. (@drunderscore)
* This change allows the config option `RequireLogin` to function usefully again when SSC is not enabled.
* Changed `PlayerData.RestoreCharacter` to remove all buffs. (@drunderscore)
* Before this change, it was theoretically possible to smuggle buffs onto servers with SSC enabled, by using buff indexes past `22`.
* Allowed Torch God's Favor to place different types of torches and campfires. (@sgkoishi, #2811)
## TShock 5.0.0
* Reduced load/save console spam. (@SignatureBeef, @YehnBeep)

View file

@ -15,14 +15,14 @@ Open ports can also be passed through using `-p <host_port>:<container_port>`.
For Example:
```bash
# Building the image
docker build -t tshock:linux-x64 --build-arg TARGETPLATFORM=linux-x64 .
docker build -t tshock:linux-amd64 --build-arg TARGETPLATFORM=linux/amd64 .
# Running the image
docker run -p 7777:7777 -p 7878:7878 \
-v /home/cider/tshock/:/tshock \
-v /home/cider/.local/share/Terraria/Worlds:/worlds \
-v /home/cider/tshock/plugins:/plugins \
--rm -it tshock:linux-x64 \
--rm -it tshock:linux-amd64 \
-world /worlds/backflip.wld -motd "OMFG DOCKER"
```
@ -42,4 +42,4 @@ docker run -p 7777:7777 -p 7878:7878 \
-v /home/cider/tshock/plugins:/plugins \
--rm -it tshock:linux-arm64 \
-world /worlds/backflip.wld -motd "ARM64 ftw"
```
```

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-10-31 23:36\n"
"PO-Revision-Date: 2022-11-07 08:06\n"
"Last-Translator: \n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
@ -156,7 +156,7 @@ msgstr "- Palm trees :"
#: ../../TShockAPI/Commands.cs:6405
#, csharp-format
msgid "\"{0}\" is not a valid buff ID!"
msgstr ""
msgstr "\"{0}\" is not a valid buff ID."
#: ../../TShockAPI/Commands.cs:5902
#, csharp-format

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-10-31 23:36\n"
"PO-Revision-Date: 2022-11-03 16:58\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
@ -38,63 +38,63 @@ msgstr "#{0} - Estás baneado: {1}"
#: ../../TShockAPI/Commands.cs:6492
msgid " 'basic', 'sakura', 'willow', 'boreal', 'mahogany', 'ebonwood', 'shadewood', 'pearlwood'."
msgstr ""
msgstr " 'básico', 'cerezo', 'sauce', 'boreal', 'caoba', 'madera de ébano', 'madera oscura', 'madera de perla'."
#: ../../TShockAPI/Commands.cs:6498
msgid " 'cactus', 'herb', 'mushroom'."
msgstr ""
msgstr " 'cactus', 'hierba', 'hongo'."
#: ../../TShockAPI/Commands.cs:6494
msgid " 'palm', 'corruptpalm', 'crimsonpalm', 'hallowpalm'."
msgstr ""
msgstr " 'palma', 'palma corrupta, 'palma carmesí', 'palma santa'."
#: ../../TShockAPI/Commands.cs:6496
msgid " 'topaz', 'amethyst', 'sapphire', 'emerald', 'ruby', 'diamond', 'amber'."
msgstr ""
msgstr " 'topacio', 'amatista', 'zafiro', 'esmeralda', 'rubí', 'diamante', 'ámbar'."
#: ../../TShockAPI/Commands.cs:1442
#, csharp-format
msgid " {0}{1} \"{2}\" (Find the IP associated with the offline target's account)"
msgstr ""
msgstr " {0}{1} \"{2}\" (Encuentre la IP asociada con la cuenta del objetivo desconectado)"
#: ../../TShockAPI/Commands.cs:1440
#, csharp-format
msgid " {0}{1} \"{2}{3}\" {4} {5} (Permanently bans this account name)"
msgstr ""
msgstr " {0}{1} \"{2}{3}\" {4} {5} (Prohíbe permanentemente este nombre de cuenta)"
#: ../../TShockAPI/Commands.cs:1445
#, csharp-format
msgid " {0}{1} {2} (Find the player index for the target)"
msgstr ""
msgstr " {0}{1} {2} (Buscar el índice del jugador para el objetivo)"
#: ../../TShockAPI/Commands.cs:1446
#, csharp-format
msgid " {0}{1} {2}{3} {4} {5} (Permanently bans the online player by Account, UUID, and IP)"
msgstr ""
msgstr " {0}{1} {2}{3} {4} {5} (Prohíbe permanentemente al jugador conectado por cuenta, UUID o IP)"
#: ../../TShockAPI/Commands.cs:1443
#, csharp-format
msgid " {0}{1} {2}{3} {4} {5} (Permanently bans this IP address)"
msgstr ""
msgstr " {0}{1} {2}{3} {4} {5} (Prohíbe de forma permanente esta dirección IP)"
#: ../../TShockAPI/Commands.cs:1382
#, csharp-format
msgid " Eg a value of {0} would represent 10 days, 30 minutes, 0 seconds."
msgstr ""
msgstr " Por ejemplo, un valor de {0} representaría 10 días, 30 minutos, 0 segundos."
#: ../../TShockAPI/Commands.cs:1386
#, csharp-format
msgid " If no {0} are specified, the command uses {1} by default."
msgstr ""
msgstr " Si no se especifican {0}, el comando utiliza {1} por defecto."
#: ../../TShockAPI/Commands.cs:1383
msgid " If no duration is provided, the ban will be permanent."
msgstr ""
msgstr " Si no se indica la duración, la prohibición será permanente."
#: ../../TShockAPI/Commands.cs:1385
#, csharp-format
msgid " Unless {0} is passed to the command, {1} is assumed to be a player or player index"
msgstr ""
msgstr " A menos que se pase {0} al comando, se asume que {1} es un jugador o índice de jugador"
#: ../../TShockAPI/Commands.cs:1258
#, csharp-format
@ -104,69 +104,69 @@ msgstr "-> Sesión iniciada como: {0}; en grupo {1}."
#: ../../TShockAPI/Commands.cs:1394
#, csharp-format
msgid "- {0} are provided when you add a ban, and can also be viewed with the {1} command."
msgstr ""
msgstr "- {0} se proporcionan cuando se añade una prohibición, y también se pueden ver con el comando {1}."
#: ../../TShockAPI/Commands.cs:1410
#, csharp-format
msgid "- {0} are provided when you add a ban, and can be found with the {1} command."
msgstr ""
msgstr "- {0} se proporcionan cuando se añade una prohibición, y se pueden encontrar con el comando {1}."
#: ../../TShockAPI/Commands.cs:1384
#, csharp-format
msgid "- {0}: -a (account name), -u (UUID), -n (character name), -ip (IP address), -e (exact, {1} will be treated as identifier)"
msgstr ""
msgstr "- {0}: -a (nombre de la cuenta), -u (UUID), -n (nombre del jugador), -ip (dirección IP), -e (exacto, {1} será tratado como identificador)"
#: ../../TShockAPI/Commands.cs:1381
#, csharp-format
msgid "- {0}: uses the format {1} to determine the length of the ban."
msgstr ""
msgstr "- {0}: utiliza el formato {1} para determinar la longitud de la prohibición."
#: ../../TShockAPI/Commands.cs:1439
msgid "- Ban an offline player by account name"
msgstr ""
msgstr "- Prohibir a un jugador desconectado por su nombre de cuenta"
#: ../../TShockAPI/Commands.cs:1441
msgid "- Ban an offline player by IP address"
msgstr ""
msgstr "- Prohibir a un jugador desconectado por su dirección IP"
#: ../../TShockAPI/Commands.cs:1444
msgid "- Ban an online player by index (Useful for hard to type names)"
msgstr ""
msgstr "- Prohibir un jugador conectado por índice (útil para nombres difíciles de escribir)"
#: ../../TShockAPI/Commands.cs:6491
msgid "- Default trees :"
msgstr ""
msgstr "- Árboles por defecto :"
#: ../../TShockAPI/Commands.cs:6495
msgid "- Gem trees :"
msgstr ""
msgstr "- Árboles de gemas :"
#: ../../TShockAPI/Commands.cs:1402
msgid "- Lists active bans. Color trends towards green as the ban approaches expiration"
msgstr ""
msgstr "- Enumera las prohibiciones activas. El color tiende al verde a medida que la prohibición se aproxima a su vencimiento"
#: ../../TShockAPI/Commands.cs:6497
msgid "- Misc :"
msgstr ""
msgstr "- Varios :"
#: ../../TShockAPI/Commands.cs:6493
msgid "- Palm trees :"
msgstr ""
msgstr "- Palmeras :"
#: ../../TShockAPI/Commands.cs:6405
#, csharp-format
msgid "\"{0}\" is not a valid buff ID!"
msgstr ""
msgstr "¡\"{0}\" no es un ID de buff válido!"
#: ../../TShockAPI/Commands.cs:5902
#, csharp-format
msgid "\"{0}\" is not a valid clear option."
msgstr ""
msgstr "\"{0}\" no es una opción clara válida."
#: ../../TShockAPI/Commands.cs:6022
#, csharp-format
msgid "\"{0}\" is not a valid NPC."
msgstr ""
msgstr "\"{0}\" no es un PNJ válido."
#: ../../TShockAPI/PaginationTools.cs:283
#, csharp-format
@ -176,7 +176,7 @@ msgstr "\"{0}\" no es un número de página válido."
#: ../../TShockAPI/Commands.cs:5822
#, csharp-format
msgid "\"{0}\" is not a valid radius."
msgstr ""
msgstr "\"{0}\" no es un valor válido."
#: ../../TShockAPI/Rest/SecureRest.cs:213
#, csharp-format
@ -190,7 +190,7 @@ msgstr "(Mensaje del Servidor) "
#: ../../TShockAPI/Commands.cs:1457
#, csharp-format
msgid "{0} - Ticket Number: {1}"
msgstr ""
msgstr "{0} - Número de Boleto: {1}"
#: ../../TShockAPI/Commands.cs:2084
#, csharp-format
@ -210,12 +210,12 @@ msgstr "{0} ({1}) falló al cambiar la contraseña para la cuenta {2}."
#: ../../TShockAPI/TShock.cs:1641
#, csharp-format
msgid "{0} ({1}) from '{2}' group from '{3}' joined. ({4}/{5})"
msgstr ""
msgstr "{0} ({1}) de '{2}' grupo de '{3}' unidos. ({4}/{5})"
#: ../../TShockAPI/TShock.cs:1649
#, csharp-format
msgid "{0} ({1}) from '{2}' group joined. ({3}/{4})"
msgstr ""
msgstr "{0} ({1}) de '{2}' se unió al grupo ahora son: ({3}/{4})"
#: ../../TShockAPI/Commands.cs:775
#, csharp-format
@ -225,58 +225,58 @@ msgstr "{0} ({1}) tuvo {2} o más intentos de inicio de sesión no válidos y fu
#: ../../TShockAPI/TShock.cs:1645
#, csharp-format
msgid "{0} ({1}) has joined."
msgstr ""
msgstr "{0} ({1}) se ha unido."
#: ../../TShockAPI/Commands.cs:5350
#, csharp-format
msgid "{0} (Index: {1}, Account ID: {2})"
msgstr ""
msgstr "{0} (Índice: {1}, ID de cuenta: {2})"
#: ../../TShockAPI/Commands.cs:5352
#, csharp-format
msgid "{0} (Index: {1})"
msgstr ""
msgstr "{0} (Índice: {1})"
#: ../../TShockAPI/Commands.cs:1401
#, csharp-format
msgid "{0} [{1}]"
msgstr ""
msgstr "{0} [{1}]"
#: ../../TShockAPI/Commands.cs:6007
#, csharp-format
msgid "{0} [{1}|{2}]"
msgstr ""
msgstr "{0} [{1}|{2}]"
#: ../../TShockAPI/Commands.cs:1458
#: ../../TShockAPI/Commands.cs:1459
#, csharp-format
msgid "{0} {1}"
msgstr ""
msgstr "{0} {1}"
#: ../../TShockAPI/Commands.cs:1463
#, csharp-format
msgid "{0} {1} ({2} ago)"
msgstr ""
msgstr "{0} {1} (hace {2})"
#: ../../TShockAPI/Commands.cs:1477
#, csharp-format
msgid "{0} {1} ({2})"
msgstr ""
msgstr "{0} {1} ({2})"
#: ../../TShockAPI/Commands.cs:5324
#, csharp-format
msgid "{0} {1} {2}"
msgstr ""
msgstr "{0} {1} {2}"
#: ../../TShockAPI/Commands.cs:1460
#, csharp-format
msgid "{0} {1} on {2} ({3} ago)"
msgstr ""
msgstr "{0} {1} en {2} (hace {3})"
#: ../../TShockAPI/Commands.cs:6364
#, csharp-format
msgid "{0} <\"{1}|{2}\"> [{3}]"
msgstr ""
msgstr "{0} <\"{1}|{2}\"> [{3}]"
#: ../../TShockAPI/Commands.cs:1393
#: ../../TShockAPI/Commands.cs:1409
@ -284,39 +284,39 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:5914
#, csharp-format
msgid "{0} <{1}>"
msgstr ""
msgstr "{0} <{1}>"
#: ../../TShockAPI/Commands.cs:5458
#: ../../TShockAPI/Commands.cs:6304
#, csharp-format
msgid "{0} <{1}> [{2}]"
msgstr ""
msgstr "{0} <{1}> [{2}]"
#: ../../TShockAPI/Commands.cs:1380
#, csharp-format
msgid "{0} <{1}> [{2}] [{3}] [{4}]"
msgstr ""
msgstr "{0} <{1}> [{2}] [{3}] [{4}]"
#: ../../TShockAPI/Commands.cs:5680
#, csharp-format
msgid "{0} <{1}> [{2}|{3}|{4}|{5}]"
msgstr ""
msgstr "{0} <{1}> [{2}|{3}|{4}|{5}]"
#: ../../TShockAPI/Commands.cs:5515
#: ../../TShockAPI/Commands.cs:5596
#, csharp-format
msgid "{0} <{1}> <{2}>"
msgstr ""
msgstr "{0} <{1}> <{2}>"
#: ../../TShockAPI/Commands.cs:6414
#, csharp-format
msgid "{0} <{1}> <{2}|{3}> [{4}]"
msgstr ""
msgstr "{0} <{1}> <{2}|{3}> [{4}]"
#: ../../TShockAPI/Commands.cs:5811
#, csharp-format
msgid "{0} <{1}|{2}|{3}> [{4}]"
msgstr ""
msgstr "{0} <{1}|{2}|{3}> [{4}]"
#: ../../TShockAPI/Commands.cs:1102
#, csharp-format
@ -917,7 +917,7 @@ msgstr "{0} te teletransportó hacia {1}."
#: ../../TShockAPI/Commands.cs:690
#, csharp-format
msgid "{0} tried to execute (args omitted) {1}{2}."
msgstr ""
msgstr "{0} intentó ejecutar (argumentos omitidos) {1}{2}."
#: ../../TShockAPI/Commands.cs:688
#, csharp-format
@ -937,7 +937,7 @@ msgstr "{0} te transportó hacia {1}."
#: ../../TShockAPI/TSPlayer.cs:1953
#, csharp-format
msgid "{0} was banned for '{1}'."
msgstr ""
msgstr "{0} fue prohibido por '{1}'."
#: ../../TShockAPI/TSPlayer.cs:1924
#, csharp-format
@ -973,17 +973,17 @@ msgstr "La fecha de registro de {0} es el {1} {2} UTC{3}."
#: ../../TShockAPI/Commands.cs:5774
#, csharp-format
msgid "{0}{1} defines no aliases."
msgstr ""
msgstr "{0}{1} no define ningún alias."
#: ../../TShockAPI/Commands.cs:5280
#, csharp-format
msgid "{0}{1} help: "
msgstr ""
msgstr "Ayuda de {0}{1} : "
#: ../../TShockAPI/Utils.cs:1066
#, csharp-format
msgid "{0}{1}/{2} on {3} @ {4}:{5} (TShock for Terraria v{6})"
msgstr ""
msgstr "{0}{1}/{2} en {3} @ {4}:{5} (TShock para Terraria v{6})"
#: ../../TShockAPI/Commands.cs:846
#, csharp-format
@ -1003,7 +1003,7 @@ msgstr "{0}login <nombreUsuario> <contraseña> - Inicias sesión usando tu nombr
#: ../../TShockAPI/Commands.cs:5409
#, csharp-format
msgid "{0}user add <username> <password> owner"
msgstr ""
msgstr "{0}user add <usuario> <contraseña> owner"
#: ../../TShockAPI/Commands.cs:1201
#, csharp-format
@ -1028,7 +1028,7 @@ msgstr "{0}user password username newpassword -- Cambia la contraseña de un usu
#: ../../TShockAPI/Commands.cs:5426
#, csharp-format
msgid "*{0} {1}"
msgstr ""
msgstr "*{0} {1}"
#: ../../TShockAPI/Commands.cs:1609
#, csharp-format
@ -1038,19 +1038,19 @@ msgstr "#{0} - Has sido baneado(a): {1}."
#: ../../TShockAPI/Commands.cs:5442
#, csharp-format
msgid "<{0}> {1}"
msgstr ""
msgstr "<{0}> {1}"
#: ../../TShockAPI/Commands.cs:5546
#: ../../TShockAPI/Commands.cs:5577
#, csharp-format
msgid "<From {0}> {1}"
msgstr ""
msgstr "<De {0}> {1}"
#: ../../TShockAPI/Commands.cs:5547
#: ../../TShockAPI/Commands.cs:5578
#, csharp-format
msgid "<To {0}> {1}"
msgstr ""
msgstr "<A {0}> {1}"
#: ../../TShockAPI/Commands.cs:2814
msgid "a Deerclops"
@ -1127,7 +1127,7 @@ msgstr "Cuenta eliminada con éxito."
#: ../../TShockAPI/Commands.cs:2090
msgid "Active REST Users ({{0}}/{{1}}):"
msgstr ""
msgstr "Usuarios REST activos ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:3967
msgid "add <item> - Adds an item ban."
@ -1177,11 +1177,11 @@ msgstr "SQL AddUser devolvió un error ({0})"
#: ../../TShockAPI/Commands.cs:5772
#, csharp-format
msgid "Aliases of {0}{1}: {0}{2}"
msgstr ""
msgstr "Alias de {0}{1}: {0}{2}"
#: ../../TShockAPI/Commands.cs:6009
msgid "All alive NPCs (excluding town NPCs) on the server will be killed if you do not input a name or ID."
msgstr ""
msgstr "Todos los PNJs vivos (excluyendo los PNJs de la ciudad) en el servidor serán asesinados si no introduces un nombre o ID."
#: ../../TShockAPI/Commands.cs:2622
msgid "all bosses"
@ -1210,23 +1210,23 @@ msgstr "allow <ID de bloque> <grupo> - Permite a un grupo colocar un bloque."
#: ../../TShockAPI/Commands.cs:5189
msgid "allow <user> <region> - Allows a user to a region."
msgstr ""
msgstr "allow <usuario> <región> - Permite a un usuario acceder a dicha región."
#: ../../TShockAPI/Commands.cs:5191
msgid "allowg <group> <region> - Allows a user group to a region."
msgstr ""
msgstr "allowg <grupo> <región> - Permite a un grupo acceder a dicha región."
#: ../../TShockAPI/Commands.cs:6663
msgid "Amber Gemtree"
msgstr ""
msgstr "Gema de Ámbar"
#: ../../TShockAPI/Commands.cs:6643
msgid "Amethyst Gemtree"
msgstr ""
msgstr "Gema de Amatista"
#: ../../TShockAPI/TShock.cs:981
msgid "An account has been detected in the user database, but setup-code.txt is still present."
msgstr ""
msgstr "Se ha detectado una cuenta en la base de datos de usuarios, pero setup-code.txt sigue presente."
#: ../../TShockAPI/DB/GroupManager.cs:474
#, csharp-format
@ -1253,7 +1253,7 @@ msgstr "Un identificador para un UUID."
#: ../../TShockAPI/DB/BanManager.cs:636
#, csharp-format
msgid "An identifier for an IP Address in octet format. e.g., '{0}'."
msgstr ""
msgstr "Un identificador para una dirección IP en formato de octeto. Por ejemplo, '{0}'."
#: ../../TShockAPI/Commands.cs:2048
msgid "An update check has been queued. If an update is available, you will be notified shortly."
@ -1261,12 +1261,12 @@ msgstr "Se pidió comprobar si hay actualizaciones. De haber una se te notificar
#: ../../TShockAPI/Commands.cs:5595
msgid "Annoy Syntax"
msgstr ""
msgstr "Sintaxis molesta"
#: ../../TShockAPI/Commands.cs:5612
#, csharp-format
msgid "Annoying {0} for {1} seconds."
msgstr ""
msgstr "Molesta a {0} durante {1} segundos."
#: ../../TShockAPI/Commands.cs:338
msgid "Annoys a player for an amount of time."
@ -1279,11 +1279,11 @@ msgstr "Anónimo solicitó un punto final REST: {0}"
#: ../../TShockAPI/Commands.cs:5220
msgid "Anti-build is now off."
msgstr ""
msgstr "El Anti-construcción ya no está activo."
#: ../../TShockAPI/Commands.cs:5220
msgid "Anti-build is now on."
msgstr ""
msgstr "El Anti-construcción está activo."
#: ../../TShockAPI/Commands.cs:3200
msgid "Arguments: add [warp name], del [warp name], list [page]."
@ -1318,15 +1318,15 @@ msgstr "El autoguardado está actualmente activo"
#: ../../TShockAPI/Commands.cs:1364
msgid "Available Ban commands:"
msgstr ""
msgstr "Comandos de prohibición disponibles:"
#: ../../TShockAPI/Commands.cs:1428
msgid "Available identifiers ({{0}}/{{1}}):"
msgstr ""
msgstr "Identificadores disponibles ({{0}}/{1}}):"
#: ../../TShockAPI/Commands.cs:5204
msgid "Available Region Sub-Commands ({{0}}/{{1}}):"
msgstr ""
msgstr "Subcomandos de región disponibles ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:2105
msgid "Available REST Sub-Commands:"
@ -1352,18 +1352,18 @@ msgstr "Intento de inicio de sesión inválido."
#: ../../TShockAPI/Commands.cs:1367
#, csharp-format
msgid "ban {0}"
msgstr ""
msgstr "ban {0}"
#: ../../TShockAPI/Commands.cs:1366
#: ../../TShockAPI/Commands.cs:1368
#, csharp-format
msgid "ban {0} <Ban ID>"
msgstr ""
msgstr "ban {0} <ID de prohibido>"
#: ../../TShockAPI/Commands.cs:1365
#, csharp-format
msgid "ban {0} <Target> [Flags]"
msgstr ""
msgstr "ban {0} <Objetivo> [Flags]"
#: ../../TShockAPI/Commands.cs:1629
#, csharp-format
@ -1377,7 +1377,7 @@ msgstr "El ban {0} acaba de marcarse como expirado."
#: ../../TShockAPI/Commands.cs:1379
msgid "Ban Add Syntax"
msgstr ""
msgstr "Ban Add Syntax"
#: ../../TShockAPI/Commands.cs:1486
#, csharp-format
@ -1391,15 +1391,15 @@ msgstr "Ban añadido. Número de ticket: {0}"
#: ../../TShockAPI/Commands.cs:1392
msgid "Ban Del Syntax"
msgstr ""
msgstr "Sintaxis Ban Del"
#: ../../TShockAPI/Commands.cs:1408
msgid "Ban Details Syntax"
msgstr ""
msgstr "Detalles de la prohibición Sintaxis"
#: ../../TShockAPI/Commands.cs:1400
msgid "Ban List Syntax"
msgstr ""
msgstr "Sintaxis de la lista de prohibiciones"
#: ../../TShockAPI/Rest/RestManager.cs:695
msgid "Ban removed."
@ -1407,12 +1407,12 @@ msgstr "Ban revocado."
#: ../../TShockAPI/Commands.cs:1438
msgid "Ban Usage Examples"
msgstr ""
msgstr "Ejemplos de uso de prohibición"
#: ../../TShockAPI/Commands.cs:3837
#, csharp-format
msgid "Banned {0}."
msgstr ""
msgstr "Prohibido {0}."
#: ../../TShockAPI/Commands.cs:4033
#, csharp-format
@ -1427,7 +1427,7 @@ msgstr "Se ha prohibido el bloque {0}."
#: ../../TShockAPI/TSPlayer.cs:1950
#, csharp-format
msgid "Banned: {0}"
msgstr ""
msgstr "Prohibido: {0}"
#: ../../TShockAPI/Commands.cs:1513
msgid "Banned."
@ -1435,11 +1435,11 @@ msgstr "Baneado."
#: ../../TShockAPI/Commands.cs:1666
msgid "Bans ({{0}}/{{1}}):"
msgstr ""
msgstr "Prohibidos ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:6585
msgid "Basic Tree"
msgstr ""
msgstr "Árbol básico"
#: ../../TShockAPI/Commands.cs:2751
msgid "Betsy"
@ -1453,11 +1453,11 @@ msgstr "La Luna Sangrienta fue marcada como {0}"
#: ../../TShockAPI/Rest/RestManager.cs:904
#, csharp-format
msgid "Bloodmoon state: {0}"
msgstr ""
msgstr "Estado de la luna de sangre: {0}"
#: ../../TShockAPI/Commands.cs:6589
msgid "Boreal Tree"
msgstr ""
msgstr "Árbol boreal"
#: ../../TShockAPI/Bouncer.cs:1447
#, csharp-format
@ -1532,51 +1532,51 @@ msgstr "Bouncer / OnFoodPlatterTryPlacing rechazo objeto no puesto manualmente d
#: ../../TShockAPI/Bouncer.cs:2772
#, csharp-format
msgid "Bouncer / OnFoodPlatterTryPlacing rejected permissions from {0}"
msgstr ""
msgstr "Bouncer / OnFoodPlatterTryPlacing rechazó los permisos de {0}"
#: ../../TShockAPI/Bouncer.cs:2783
#, csharp-format
msgid "Bouncer / OnFoodPlatterTryPlacing rejected range checks from {0}"
msgstr ""
msgstr "Bouncer / OnFoodPlatterTryPlacing rechazó las comprobaciones de rango de {0}"
#: ../../TShockAPI/Bouncer.cs:2747
#, csharp-format
msgid "Bouncer / OnFoodPlatterTryPlacing rejected tile placement valid from {0}"
msgstr ""
msgstr "Bouncer / OnFoodPlatterTryPlacing rechazó la colocación de baldosas válida desde {0}"
#: ../../TShockAPI/Bouncer.cs:2488
#, csharp-format
msgid "Bouncer / OnGemLockToggle invalid placement/deadmod from {0}"
msgstr ""
msgstr "Bouncer / OnGemLockToggle colocación inválida/deadmod de {0}"
#: ../../TShockAPI/Bouncer.cs:2481
#, csharp-format
msgid "Bouncer / OnGemLockToggle rejected boundaries check from {0}"
msgstr ""
msgstr "Bouncer / OnGemLockToggle rechazó la comprobación de límites de {0}"
#: ../../TShockAPI/Bouncer.cs:2495
#, csharp-format
msgid "Bouncer / OnGemLockToggle rejected disabled from {0}"
msgstr ""
msgstr "Bouncer / OnGemLockToggle rechazado deshabilitado desde {0}"
#: ../../TShockAPI/Bouncer.cs:2504
#, csharp-format
msgid "Bouncer / OnGemLockToggle rejected permissions check from {0}"
msgstr ""
msgstr "Bouncer / OnGemLockToggle rechazó la comprobación de permisos de {0}"
#: ../../TShockAPI/Bouncer.cs:435
msgid "Bouncer / OnGetSection rejected empty player name."
msgstr ""
msgstr "Bouncer / OnGetSection rechazó un nombre de jugador vacío."
#: ../../TShockAPI/Bouncer.cs:427
#, csharp-format
msgid "Bouncer / OnGetSection rejected GetSection packet from {0}"
msgstr ""
msgstr "Bouncer / OnGetSection rechazó el paquete GetSection de {0}"
#: ../../TShockAPI/Bouncer.cs:2081
#, csharp-format
msgid "Bouncer / OnHealOtherPlayer 0.2 check from {0}"
msgstr ""
msgstr "Bouncer / OnHealOtherPlayer 0.2 comprobar desde {0}"
#: ../../TShockAPI/Bouncer.cs:2105
#, csharp-format

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-11-02 04:50\n"
"PO-Revision-Date: 2022-11-04 17:22\n"
"Last-Translator: \n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
@ -22,13 +22,13 @@ msgstr ""
#, csharp-format
msgctxt "{0} is a player name"
msgid "Skipping SSC save (due to tshock.ignore.ssc) for {0}"
msgstr "Mengabaikan penyimpanan SSC untuk {0} (karena menggunakan tshock.ignore.ssc)"
msgstr "Mengabaikan penyimpanan SSC untuk {0} (karena memiliki tshock.ignore.ssc)"
#: ../../TShockAPI/DB/BanManager.cs:213
#, csharp-format
msgctxt "{0} is ban number, {1} is ban reason, {2} is a timestamp"
msgid "#{0} - You are banned: {1} ({2} remaining)"
msgstr "#{0} - Anda telah diblokir: {1}( dalam waktu {2})"
msgstr "#{0} - Anda telah diblokir: {1}( tersisa {2})"
#: ../../TShockAPI/DB/BanManager.cs:208
#, csharp-format
@ -55,12 +55,12 @@ msgstr " 'topaz', 'amethyst', 'sapphire', 'emerald', 'ruby', 'diamond', 'amb
#: ../../TShockAPI/Commands.cs:1442
#, csharp-format
msgid " {0}{1} \"{2}\" (Find the IP associated with the offline target's account)"
msgstr " {0}{1} \"{2}\" (Temukan IP terkait dengan target akun luring)"
msgstr " {0}{1} \"{2}\" (Temukan IP yang terkait dengan target akun offline)"
#: ../../TShockAPI/Commands.cs:1440
#, csharp-format
msgid " {0}{1} \"{2}{3}\" {4} {5} (Permanently bans this account name)"
msgstr " {0}{1} \"{2}{3}\" {4} {5} (Blokor secara permanen untuk nama akun ini)"
msgstr " {0}{1} \"{2}{3}\" {4} {5} (Blokir secara permanen untuk nama akun ini)"
#: ../../TShockAPI/Commands.cs:1445
#, csharp-format
@ -70,7 +70,7 @@ msgstr " {0}{1} {2} (target ini ditemukan berdasarkan indeks pemain)"
#: ../../TShockAPI/Commands.cs:1446
#, csharp-format
msgid " {0}{1} {2}{3} {4} {5} (Permanently bans the online player by Account, UUID, and IP)"
msgstr " {0}{1} {2}{3} {4} {5} (Blokir secara permanen si pemain daring dari Account, UUID, dan IP)"
msgstr " {0}{1} {2}{3} {4} {5} (Blokir secara permanen pemain online dengan Account, UUID, dan IP)"
#: ../../TShockAPI/Commands.cs:1443
#, csharp-format
@ -85,16 +85,16 @@ msgstr " Misalnya nilai {0} akan merepresentasikan 10 hari, 30 menit, 0 detik.
#: ../../TShockAPI/Commands.cs:1386
#, csharp-format
msgid " If no {0} are specified, the command uses {1} by default."
msgstr " Jika {0} tidak spesifik,maka menggunakan {1} untuk perintah bawaan."
msgstr " Jika {0} tidak ada ditentukan, perintah menggunakan {1} secara default."
#: ../../TShockAPI/Commands.cs:1383
msgid " If no duration is provided, the ban will be permanent."
msgstr " Jika rentan waktu tidak ditentukan, maka akan diblokir permanen."
msgstr " Jika rentang waktu tidak ditentukan, maka akan diblokir permanen."
#: ../../TShockAPI/Commands.cs:1385
#, csharp-format
msgid " Unless {0} is passed to the command, {1} is assumed to be a player or player index"
msgstr " Kecuali jika {0} diteruskan perintahnya, {1} itu dianggap sebagai pemain atau indeks pemain"
msgstr " Kecuali jika {0} diteruskan ke perintahnya, {1} akan dianggap sebagai pemain atau indeks pemain"
#: ../../TShockAPI/Commands.cs:1258
#, csharp-format
@ -119,19 +119,19 @@ msgstr "- {0}: -a (nama akun), -u (UUID), -n (nama karakter), -ip (alamat IP), -
#: ../../TShockAPI/Commands.cs:1381
#, csharp-format
msgid "- {0}: uses the format {1} to determine the length of the ban."
msgstr "- {0}: gunakan format {1} ini untuk menentukan lama pemblokiran."
msgstr "- {0}: menggunakan format {1} ini untuk menentukan lama pemblokiran."
#: ../../TShockAPI/Commands.cs:1439
msgid "- Ban an offline player by account name"
msgstr "- Blokir pemain luring dari nama akun"
msgstr "- Blokir pemain online dari nama akun"
#: ../../TShockAPI/Commands.cs:1441
msgid "- Ban an offline player by IP address"
msgstr "- Blokir pemain luring dari alamat IP"
msgstr "- Blokir pemain online dari alamat IP"
#: ../../TShockAPI/Commands.cs:1444
msgid "- Ban an online player by index (Useful for hard to type names)"
msgstr "Blokir pemain daring dari pengenal (Untuk nama yang susah diketik)"
msgstr "Blokir pemain online dari indeks (Untuk nama yang susah diketik)"
#: ../../TShockAPI/Commands.cs:6491
msgid "- Default trees :"
@ -185,12 +185,12 @@ msgstr "\"{0}\" telah meminta titik akhir REST: {1}"
#: ../../TShockAPI/Commands.cs:2016
msgid "(Server Broadcast) "
msgstr "(Siaran Peladen) "
msgstr "(Siaran Server) "
#: ../../TShockAPI/Commands.cs:1457
#, csharp-format
msgid "{0} - Ticket Number: {1}"
msgstr "{0} - Nomor karcis: {1}"
msgstr "{0} - Nomor tiket: {1}"
#: ../../TShockAPI/Commands.cs:2084
#, csharp-format
@ -508,7 +508,7 @@ msgstr "{0} telah mengubah grup anda ke {1}."
#: ../../TShockAPI/Commands.cs:3022
#, csharp-format
msgid "{0} has disabled incoming teleports."
msgstr "{0} telah menonaktifkan teleportasi masuk."
msgstr "{0} telah menonaktifkan teleportasi yang akan datang."
#: ../../TShockAPI/Commands.cs:2408
#, csharp-format
@ -553,28 +553,28 @@ msgstr "{0} telah dibisukan {1} kurun waktu {2}."
#: ../../TShockAPI/Commands.cs:5995
#, csharp-format
msgid "{0} has respawned you."
msgstr "{0} telah memanggil anda kembali."
msgstr "{0} telah memunculkan anda kembali."
#: ../../TShockAPI/GetDataHandlers.cs:3545
#, csharp-format
msgid "{0} has sent a request to the bunny delivery service!"
msgstr "{0} telah mengirim sebuah permintaan untuk pelayanan pengiriman kelinci!"
msgstr "{0} telah mengirim sebuah permintaan ke pelayanan pengiriman kelinci!"
#: ../../TShockAPI/GetDataHandlers.cs:3551
#, csharp-format
msgid "{0} has sent a request to the cat delivery service!"
msgstr "{0} telah mengirim sebuah permintaan untuk pelayanan pengiriman kucing!"
msgstr "{0} telah mengirim sebuah permintaan ke pelayanan pengiriman kucing!"
#: ../../TShockAPI/GetDataHandlers.cs:3548
#, csharp-format
msgid "{0} has sent a request to the dog delivery service!"
msgstr "{0} telah mengirim sebuah permintaan untuk pelayanan pengiriman anjing!"
msgstr "{0} telah mengirim sebuah permintaan ke pelayanan pengiriman anjing!"
#: ../../TShockAPI/Commands.cs:2874
#, csharp-format
msgid "{0} has spawned {1} {2} time."
msgid_plural "{0} has spawned {1} {2} times."
msgstr[0] "{0} telah memanggil {1} {2} kali."
msgstr[0] "{0} telah membangkitkan {1} {2} kali."
#: ../../TShockAPI/Commands.cs:2891
#, csharp-format
@ -609,12 +609,12 @@ msgstr "{0} telah tidak dibisukan {1}."
#: ../../TShockAPI/Commands.cs:6352
#, csharp-format
msgid "{0} healed {1} for {2} HP."
msgstr "{0} telah menyembuhkan {1} untuk HP {2}."
msgstr "{0} telah menyembuhkan {1} untuk {2} HP."
#: ../../TShockAPI/Commands.cs:6350
#, csharp-format
msgid "{0} healed herself for {1} HP."
msgstr "{0} telah menyembuhkan diri sendiri untuk HP {1}."
msgstr "{0} telah menyembuhkan diri sendiri untuk {1} HP."
#: ../../TShockAPI/Commands.cs:6348
#, csharp-format
@ -659,7 +659,7 @@ msgstr "{0} sudah dicegah dari penggunaan proyektil {1}."
#: ../../TShockAPI/ItemBans.cs:234
#, csharp-format
msgid "{0} is banned! Remove it!"
msgstr "{0} diblokir! copot itu!"
msgstr "{0} diblokir! Buang itu!"
#: ../../TShockAPI/Commands.cs:6744
#, csharp-format
@ -691,13 +691,13 @@ msgstr "{0} sekarang dalam mode dewa."
#: ../../TShockAPI/Commands.cs:5582
#, csharp-format
msgid "{0} is offline and cannot receive your reply."
msgstr "{0} telah luring dan tidak dapat menerima balasan anda."
msgstr "{0} telah offline dan tidak dapat menerima balasan anda."
#: ../../TShockAPI/Commands.cs:5945
#: ../../TShockAPI/Rest/RestManager.cs:1068
#, csharp-format
msgid "{0} just killed you!"
msgstr "anda baru saja dibunuh {0} !"
msgstr "{0} telah membunuh anda!"
#: ../../TShockAPI/TSPlayer.cs:1926
#, csharp-format
@ -713,7 +713,7 @@ msgstr "{0} telah meluncurkan kembang api kepada anda."
#, csharp-format
msgid "{0} NPC has been killed."
msgid_plural "{0} NPCs have been killed."
msgstr[0] "NPC {0} telah dibunuh."
msgstr[0] "{0} NPC telah terbunuh."
#: ../../TShockAPI/Commands.cs:1054
#, csharp-format
@ -733,33 +733,33 @@ msgstr "{0} telah diberi nama kembali {1}."
#: ../../TShockAPI/Commands.cs:4570
#, csharp-format
msgid "{0} set the time to {1}:{2:D2}."
msgstr "{0} mengatur waktu pada {1}:{2:D2}."
msgstr "{0} mengatur waktu ke {1}:{2:D2}."
#: ../../TShockAPI/Commands.cs:4538
#, csharp-format
msgid "{0} set the time to 00:00."
msgstr "{0} mengatur waktu pada 00:00."
msgstr "{0} mengatur waktu ke 00:00."
#: ../../TShockAPI/Commands.cs:4526
#, csharp-format
msgid "{0} set the time to 04:30."
msgstr "{0} mengatur waktu pada 04:30."
msgstr "{0} mengatur waktu ke 04:30."
#: ../../TShockAPI/Commands.cs:4534
#, csharp-format
msgid "{0} set the time to 12:00."
msgstr "{0} mengatur waktu pada 12:00."
msgstr "{0} mengatur waktu ke 12:00."
#: ../../TShockAPI/Commands.cs:4530
#, csharp-format
msgid "{0} set the time to 19:30."
msgstr "{0} mengatur waktu pada 19:30."
msgstr "{0} mengatur waktu ke 19:30."
#: ../../TShockAPI/Commands.cs:4612
#: ../../TShockAPI/Commands.cs:4613
#, csharp-format
msgid "{0} slapped {1} for {2} damage."
msgstr "{1} ditampar {0} dalam {2} kerusakan."
msgstr "{1} menampar {0} untuk {2} kerusakan."
#: ../../TShockAPI/Commands.cs:2827
#, csharp-format
@ -965,7 +965,7 @@ msgstr "Tanggal pendaftaran {0} ialah {1} {2} UTC{3}."
#: ../../TShockAPI/Commands.cs:5774
#, csharp-format
msgid "{0}{1} defines no aliases."
msgstr "{0}{1} dianggap bukan samaran ."
msgstr "{0}{1} dianggap bukan samaran."
#: ../../TShockAPI/Commands.cs:5280
#, csharp-format
@ -980,17 +980,17 @@ msgstr "{0}{1}/{2} pada {3} @ {4}:{5} (TShock untuk Terraria v{6})"
#: ../../TShockAPI/Commands.cs:846
#, csharp-format
msgid "{0}login - Authenticates you using your UUID and character name."
msgstr "{0}login - Anda autentikasi menggunakan UUID dan nama character anda"
msgstr "{0}login - Autentikasi diri anda menggunakan UUID dan nama karakter anda"
#: ../../TShockAPI/Commands.cs:851
#, csharp-format
msgid "{0}login <password> - Authenticates you using your password and character name."
msgstr "{0}login <password> - Anda autentikasi menggunakan kata sandi dan nama karakter anda."
msgstr "{0}login <password> - Autentikasi diri anda menggunakan kata sandi dan nama karakter anda."
#: ../../TShockAPI/Commands.cs:849
#, csharp-format
msgid "{0}login <username> <password> - Authenticates you using your username and password."
msgstr "{0}login <username> <password> - Anda autentikasi menggunakan nama pengguna dan sandi anda."
msgstr "{0}login <username> <password> - Autentikasi diri anda menggunakan nama pengguna dan sandi anda."
#: ../../TShockAPI/Commands.cs:5409
#, csharp-format
@ -1145,7 +1145,7 @@ msgstr "Ditambahkan {0} kedalam whitelist."
#: ../../TShockAPI/Bouncer.cs:2026
#, csharp-format
msgid "Added buff to {0} NPC abnormally."
msgstr "Telah menambahkan buff ke {0} tidak normal NPC."
msgstr "Telah menambahkan buff tidak normal ke NPC {0}."
#: ../../TShockAPI/Commands.cs:4851
#, csharp-format
@ -1164,7 +1164,7 @@ msgstr "addperm <grup> <perizinan...> - Tambahkan beberapa perizinan ke sebuah g
#: ../../TShockAPI/DB/UserManager.cs:81
#, csharp-format
msgid "AddUser SQL returned an error ({0})"
msgstr "AddUser SQL mengembalikan kekeliruan ({0})"
msgstr "AddUser SQL mengembalikan kesalahan({0})"
#: ../../TShockAPI/Commands.cs:5772
#, csharp-format
@ -1173,7 +1173,7 @@ msgstr "Nama lain dari {0}{1}: {0}{2}"
#: ../../TShockAPI/Commands.cs:6009
msgid "All alive NPCs (excluding town NPCs) on the server will be killed if you do not input a name or ID."
msgstr "Semua NPC yang hidup (termasuk NPC Alun-alun) yang ada didalam peladen akan terbunuh jika kamu tidak memasukkan nama atau ID."
msgstr "Semua NPC yang hidup (termasuk NPC kota) yang ada didalam server akan terbunuh jika kamu tidak memasukkan nama atau ID."
#: ../../TShockAPI/Commands.cs:2622
msgid "all bosses"
@ -1374,12 +1374,12 @@ msgstr "Ban Add sintaks"
#: ../../TShockAPI/Commands.cs:1486
#, csharp-format
msgid "Ban added. Ticket Number {0} was created for identifier {1}."
msgstr "Pemblokiran telah ditambahkan. Nomor karcis {0} telah dibuat untuk pengidentifikasian {1}."
msgstr "Pemblokiran telah ditambahkan. Nomor tiket {0} telah dibuat untuk pengidentifikasian {1}."
#: ../../TShockAPI/Rest/RestManager.cs:668
#, csharp-format
msgid "Ban added. Ticket number: {0}"
msgstr "Pemblokiran telah ditambahkan. Nomor karcis: {0}"
msgstr "Pemblokiran telah ditambahkan. Nomor Tiket: {0}"
#: ../../TShockAPI/Commands.cs:1392
msgid "Ban Del Syntax"
@ -1399,12 +1399,12 @@ msgstr "Pemblokiran telah dihilangkan."
#: ../../TShockAPI/Commands.cs:1438
msgid "Ban Usage Examples"
msgstr "Contoh Pemblokiran Penggunaan"
msgstr "Contoh Penggunaan Pemblokiran"
#: ../../TShockAPI/Commands.cs:3837
#, csharp-format
msgid "Banned {0}."
msgstr "Pemblokiran {0}."
msgstr "{0} telah diblokir."
#: ../../TShockAPI/Commands.cs:4033
#, csharp-format

6610
i18n/pl_PL/TShockAPI.po Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-10-31 23:36\n"
"PO-Revision-Date: 2022-11-07 08:06\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
@ -50,37 +50,37 @@ msgstr " 'palm', 'corruptpalm', 'crimsonpalm', 'hallowpalm'."
#: ../../TShockAPI/Commands.cs:6496
msgid " 'topaz', 'amethyst', 'sapphire', 'emerald', 'ruby', 'diamond', 'amber'."
msgstr ""
msgstr " 'topaz', 'amethyst', 'sapphire', 'emerald', 'ruby', 'diamond', 'amber'."
#: ../../TShockAPI/Commands.cs:1442
#, csharp-format
msgid " {0}{1} \"{2}\" (Find the IP associated with the offline target's account)"
msgstr ""
msgstr " {0}{1} \"{2}\" (Находит IP связанный с оффлайн аккаунтом)"
#: ../../TShockAPI/Commands.cs:1440
#, csharp-format
msgid " {0}{1} \"{2}{3}\" {4} {5} (Permanently bans this account name)"
msgstr ""
msgstr " {0}{1} \"{2}{3}\" {4} {5} (Навсегда банит имя этого аккаунта)"
#: ../../TShockAPI/Commands.cs:1445
#, csharp-format
msgid " {0}{1} {2} (Find the player index for the target)"
msgstr ""
msgstr " {0}{1} {2} (Находит индекс указанного игрока)"
#: ../../TShockAPI/Commands.cs:1446
#, csharp-format
msgid " {0}{1} {2}{3} {4} {5} (Permanently bans the online player by Account, UUID, and IP)"
msgstr ""
msgstr " {0}{1} {2}{3} {4} {5} (Навсегда банит игрока, находящегося на сервере, по учетной записи, UUID и IP)"
#: ../../TShockAPI/Commands.cs:1443
#, csharp-format
msgid " {0}{1} {2}{3} {4} {5} (Permanently bans this IP address)"
msgstr ""
msgstr " {0}{1} \"{2}{3}\" {4} {5} (Навсегда банит этот IP адрес)"
#: ../../TShockAPI/Commands.cs:1382
#, csharp-format
msgid " Eg a value of {0} would represent 10 days, 30 minutes, 0 seconds."
msgstr ""
msgstr " Например, {0} будет представлять собой 10 дней, 30 минут, 0 секунд."
#: ../../TShockAPI/Commands.cs:1386
#, csharp-format
@ -89,7 +89,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:1383
msgid " If no duration is provided, the ban will be permanent."
msgstr ""
msgstr " Если продолжительность не указана, бан будет постоянным"
#: ../../TShockAPI/Commands.cs:1385
#, csharp-format
@ -123,23 +123,23 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:1439
msgid "- Ban an offline player by account name"
msgstr ""
msgstr "- Забанить оффлайн игрока по имени аккаунта"
#: ../../TShockAPI/Commands.cs:1441
msgid "- Ban an offline player by IP address"
msgstr ""
msgstr "- Забанить оффлайн игрока по IP-адресу"
#: ../../TShockAPI/Commands.cs:1444
msgid "- Ban an online player by index (Useful for hard to type names)"
msgstr ""
msgstr "- Забанить онлайн игрока по индексу (Полезно для сложно вводимых ников)"
#: ../../TShockAPI/Commands.cs:6491
msgid "- Default trees :"
msgstr ""
msgstr "- Деревья по умолчанию:"
#: ../../TShockAPI/Commands.cs:6495
msgid "- Gem trees :"
msgstr ""
msgstr "- Самоцветные деревья:"
#: ../../TShockAPI/Commands.cs:1402
msgid "- Lists active bans. Color trends towards green as the ban approaches expiration"
@ -151,12 +151,12 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6493
msgid "- Palm trees :"
msgstr ""
msgstr "- Пальмовые деревья:"
#: ../../TShockAPI/Commands.cs:6405
#, csharp-format
msgid "\"{0}\" is not a valid buff ID!"
msgstr ""
msgstr "\"{0}\" не является допустимым ID эффекта!"
#: ../../TShockAPI/Commands.cs:5902
#, csharp-format
@ -166,7 +166,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6022
#, csharp-format
msgid "\"{0}\" is not a valid NPC."
msgstr ""
msgstr "\"{0}\" не является допустимым NPC."
#: ../../TShockAPI/PaginationTools.cs:283
#, csharp-format
@ -176,7 +176,7 @@ msgstr "\"{0}\" не является правильным номером стр
#: ../../TShockAPI/Commands.cs:5822
#, csharp-format
msgid "\"{0}\" is not a valid radius."
msgstr ""
msgstr "\"{0}\" не является корректным радиусом."
#: ../../TShockAPI/Rest/SecureRest.cs:213
#, csharp-format
@ -225,7 +225,7 @@ msgstr "{0} ({1}) сделал {2} или больше неудачных поп
#: ../../TShockAPI/TShock.cs:1645
#, csharp-format
msgid "{0} ({1}) has joined."
msgstr ""
msgstr "{0} ({1}) присоединился."
#: ../../TShockAPI/Commands.cs:5350
#, csharp-format
@ -240,18 +240,18 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:1401
#, csharp-format
msgid "{0} [{1}]"
msgstr ""
msgstr "{0} [{1}]"
#: ../../TShockAPI/Commands.cs:6007
#, csharp-format
msgid "{0} [{1}|{2}]"
msgstr ""
msgstr "{0} [{1}|{2}]"
#: ../../TShockAPI/Commands.cs:1458
#: ../../TShockAPI/Commands.cs:1459
#, csharp-format
msgid "{0} {1}"
msgstr ""
msgstr "{0} {1}"
#: ../../TShockAPI/Commands.cs:1463
#, csharp-format
@ -261,7 +261,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:1477
#, csharp-format
msgid "{0} {1} ({2})"
msgstr ""
msgstr "{0} {1} ({2})"
#: ../../TShockAPI/Commands.cs:5324
#, csharp-format
@ -427,22 +427,22 @@ msgstr[3] ""
#: ../../TShockAPI/Commands.cs:1883
#, csharp-format
msgid "{0} disabled halloween mode."
msgstr ""
msgstr "{0} отключил режим Хэллоуин."
#: ../../TShockAPI/Commands.cs:1903
#, csharp-format
msgid "{0} disabled xmas mode."
msgstr ""
msgstr "{0} отключил рождественский режим."
#: ../../TShockAPI/Commands.cs:1881
#, csharp-format
msgid "{0} enabled halloween mode."
msgstr ""
msgstr "{0} включил режим Хэллоуин."
#: ../../TShockAPI/Commands.cs:1901
#, csharp-format
msgid "{0} enabled xmas mode."
msgstr ""
msgstr "{0} включил рождественский режим."
#: ../../TShockAPI/Commands.cs:2465
#, csharp-format
@ -538,37 +538,37 @@ msgstr "{0} завершил событие «Армия Древних»."
#: ../../TShockAPI/TShock.cs:1652
#, csharp-format
msgid "{0} has joined."
msgstr ""
msgstr "{0} присоединился."
#: ../../TShockAPI/TShock.cs:1656
#, csharp-format
msgid "{0} has joined. IP: {1}"
msgstr ""
msgstr "{0} присоединился. IP: {1}"
#: ../../TShockAPI/Commands.cs:5651
#, csharp-format
msgid "{0} has launched {1} into space."
msgstr ""
msgstr "{0} запустил {1} в космос."
#: ../../TShockAPI/Commands.cs:5649
#, csharp-format
msgid "{0} has launched herself into space."
msgstr ""
msgstr "{0} запустила себя в космос."
#: ../../TShockAPI/Commands.cs:5647
#, csharp-format
msgid "{0} has launched himself into space."
msgstr ""
msgstr "{0} запустил себя в космос."
#: ../../TShockAPI/Commands.cs:5496
#, csharp-format
msgid "{0} has muted {1} for {2}."
msgstr ""
msgstr "{0} заглушил {1} за {2}."
#: ../../TShockAPI/Commands.cs:5995
#, csharp-format
msgid "{0} has respawned you."
msgstr ""
msgstr "{0} возродил вас."
#: ../../TShockAPI/GetDataHandlers.cs:3545
#, csharp-format
@ -657,7 +657,7 @@ msgstr "{0} уже разрешено использовать снаряд {1}.
#: ../../TShockAPI/Commands.cs:5936
#, csharp-format
msgid "{0} is already dead!"
msgstr ""
msgstr "{0} уже мертв!"
#: ../../TShockAPI/Commands.cs:3952
#, csharp-format
@ -677,12 +677,12 @@ msgstr "{0} уже запрещено использовать снаряд {1}.
#: ../../TShockAPI/ItemBans.cs:234
#, csharp-format
msgid "{0} is banned! Remove it!"
msgstr ""
msgstr "{0} заблокирован! Удалите его!"
#: ../../TShockAPI/Commands.cs:6744
#, csharp-format
msgid "{0} is no longer in god mode."
msgstr ""
msgstr "{0} больше не в режиме бога."
#: ../../TShockAPI/Commands.cs:5542
#: ../../TShockAPI/Commands.cs:5573
@ -699,12 +699,12 @@ msgstr "{0} не забанен."
#: ../../TShockAPI/Commands.cs:5986
#, csharp-format
msgid "{0} is not dead!"
msgstr ""
msgstr "{0} не мертв!"
#: ../../TShockAPI/Commands.cs:6743
#, csharp-format
msgid "{0} is now in god mode."
msgstr ""
msgstr "{0} перешел в режим бога."
#: ../../TShockAPI/Commands.cs:5582
#, csharp-format
@ -725,7 +725,7 @@ msgstr "{0} кикнул {1} по причине: '{2}'"
#: ../../TShockAPI/Commands.cs:5742
#, csharp-format
msgid "{0} launched fireworks on you."
msgstr ""
msgstr "{0} запустил в вас фейерверк."
#: ../../TShockAPI/Rest/RestManager.cs:847
#, csharp-format
@ -749,7 +749,7 @@ msgstr "{0} осталось."
#: ../../TShockAPI/Commands.cs:6192
#, csharp-format
msgid "{0} renamed the {1}."
msgstr ""
msgstr "{0} переименовал {1}."
#: ../../TShockAPI/Commands.cs:4570
#, csharp-format
@ -860,42 +860,42 @@ msgstr "{0} успешно удалил аккаунт: {1}."
#: ../../TShockAPI/GetDataHandlers.cs:3557
#, csharp-format
msgid "{0} summoned a Blood Moon!"
msgstr ""
msgstr "{0} вызвал Кровавую Луну!"
#: ../../TShockAPI/GetDataHandlers.cs:3569
#, csharp-format
msgid "{0} summoned a frost moon!"
msgstr ""
msgstr "{0} вызвал ледяную луну!"
#: ../../TShockAPI/GetDataHandlers.cs:3581
#, csharp-format
msgid "{0} summoned a Goblin Invasion!"
msgstr ""
msgstr "{0} вызвал Вторжение Гоблинов!"
#: ../../TShockAPI/GetDataHandlers.cs:3563
#, csharp-format
msgid "{0} summoned a Martian invasion!"
msgstr ""
msgstr "{0} вызвал Вторжение Марсиан!"
#: ../../TShockAPI/GetDataHandlers.cs:3560
#, csharp-format
msgid "{0} summoned a Moon Lord!"
msgstr ""
msgstr "{0} призвал Лунного Лорда!"
#: ../../TShockAPI/GetDataHandlers.cs:3572
#, csharp-format
msgid "{0} summoned a pumpkin moon!"
msgstr ""
msgstr "{0} вызвал тыквенную луну!"
#: ../../TShockAPI/GetDataHandlers.cs:3566
#, csharp-format
msgid "{0} summoned an eclipse!"
msgstr ""
msgstr "{0} вызвал затмение!"
#: ../../TShockAPI/GetDataHandlers.cs:3584
#, csharp-format
msgid "{0} summoned the {1}!"
msgstr ""
msgstr "{0} вызвал {1}!"
#: ../../TShockAPI/GetDataHandlers.cs:2977
#: ../../TShockAPI/GetDataHandlers.cs:2980
@ -906,12 +906,12 @@ msgstr ""
#: ../../TShockAPI/GetDataHandlers.cs:3575
#, csharp-format
msgid "{0} summoned the Pirates!"
msgstr ""
msgstr "{0} вызвал Пиратов!"
#: ../../TShockAPI/GetDataHandlers.cs:3578
#, csharp-format
msgid "{0} summoned the Snow Legion!"
msgstr ""
msgstr "{0} вызвал Снежный Легион!"
#: ../../TShockAPI/Commands.cs:3000
#: ../../TShockAPI/Commands.cs:3040
@ -933,7 +933,7 @@ msgstr "{0} телепортировал вас к {1}."
#: ../../TShockAPI/Commands.cs:690
#, csharp-format
msgid "{0} tried to execute (args omitted) {1}{2}."
msgstr ""
msgstr "{0} пытался выполнить (аргументы опущены) {1}{2}."
#: ../../TShockAPI/Commands.cs:688
#, csharp-format
@ -953,7 +953,7 @@ msgstr "{0} переместил вас к {1}."
#: ../../TShockAPI/TSPlayer.cs:1953
#, csharp-format
msgid "{0} was banned for '{1}'."
msgstr ""
msgstr "{0} был забанен за '{1}'."
#: ../../TShockAPI/TSPlayer.cs:1924
#, csharp-format
@ -1019,7 +1019,7 @@ msgstr "{0}login <username> <password> - Авторизует вас, испол
#: ../../TShockAPI/Commands.cs:5409
#, csharp-format
msgid "{0}user add <username> <password> owner"
msgstr ""
msgstr "{0}user add <username> <password> owner"
#: ../../TShockAPI/Commands.cs:1201
#, csharp-format
@ -1044,7 +1044,7 @@ msgstr "{0}user password \"никнейм игрока\" пароль -- Изм
#: ../../TShockAPI/Commands.cs:5426
#, csharp-format
msgid "*{0} {1}"
msgstr ""
msgstr "*{0} {1}"
#: ../../TShockAPI/Commands.cs:1609
#, csharp-format
@ -1054,7 +1054,7 @@ msgstr "#{0} - Вы были забанены: {1}."
#: ../../TShockAPI/Commands.cs:5442
#, csharp-format
msgid "<{0}> {1}"
msgstr ""
msgstr "<{0}> {1}"
#: ../../TShockAPI/Commands.cs:5546
#: ../../TShockAPI/Commands.cs:5577
@ -1143,7 +1143,7 @@ msgstr "Аккаунт успешно удалён."
#: ../../TShockAPI/Commands.cs:2090
msgid "Active REST Users ({{0}}/{{1}}):"
msgstr ""
msgstr "Активные пользователи REST ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:3967
msgid "add <item> - Adds an item ban."
@ -1197,7 +1197,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6009
msgid "All alive NPCs (excluding town NPCs) on the server will be killed if you do not input a name or ID."
msgstr ""
msgstr "Все живые неигровые персонажи (за исключением городских) на сервере будут убиты, если вы не введете имя или ID."
#: ../../TShockAPI/Commands.cs:2622
msgid "all bosses"
@ -1234,15 +1234,15 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6663
msgid "Amber Gemtree"
msgstr ""
msgstr "Янтарное дерево"
#: ../../TShockAPI/Commands.cs:6643
msgid "Amethyst Gemtree"
msgstr ""
msgstr "Аметистовое дерево"
#: ../../TShockAPI/TShock.cs:981
msgid "An account has been detected in the user database, but setup-code.txt is still present."
msgstr ""
msgstr "В базе данных пользователя обнаружена учетная запись, но setup-code.txt до сих пор присутствует."
#: ../../TShockAPI/DB/GroupManager.cs:474
#, csharp-format
@ -1277,7 +1277,7 @@ msgstr "Проверка обновлений добавлена в очеред
#: ../../TShockAPI/Commands.cs:5595
msgid "Annoy Syntax"
msgstr ""
msgstr "Синтаксис Annoy"
#: ../../TShockAPI/Commands.cs:5612
#, csharp-format
@ -1368,7 +1368,7 @@ msgstr "Неудачная попытка входа."
#: ../../TShockAPI/Commands.cs:1367
#, csharp-format
msgid "ban {0}"
msgstr ""
msgstr "ban {0}"
#: ../../TShockAPI/Commands.cs:1366
#: ../../TShockAPI/Commands.cs:1368
@ -1393,7 +1393,7 @@ msgstr "Бан {0} был отмечен как истекший."
#: ../../TShockAPI/Commands.cs:1379
msgid "Ban Add Syntax"
msgstr ""
msgstr "Синтаксис Ban Add"
#: ../../TShockAPI/Commands.cs:1486
#, csharp-format
@ -1407,15 +1407,15 @@ msgstr "Бан добавлен. Номер тикета: {0}"
#: ../../TShockAPI/Commands.cs:1392
msgid "Ban Del Syntax"
msgstr ""
msgstr "Синтаксис Ban Del"
#: ../../TShockAPI/Commands.cs:1408
msgid "Ban Details Syntax"
msgstr ""
msgstr "Синтаксис Ban Details"
#: ../../TShockAPI/Commands.cs:1400
msgid "Ban List Syntax"
msgstr ""
msgstr "Синтаксис Ban List"
#: ../../TShockAPI/Rest/RestManager.cs:695
msgid "Ban removed."
@ -1423,7 +1423,7 @@ msgstr "Бан снят."
#: ../../TShockAPI/Commands.cs:1438
msgid "Ban Usage Examples"
msgstr ""
msgstr "Примеры использования ban"
#: ../../TShockAPI/Commands.cs:3837
#, csharp-format
@ -1443,7 +1443,7 @@ msgstr "Блок {0} заблокирован."
#: ../../TShockAPI/TSPlayer.cs:1950
#, csharp-format
msgid "Banned: {0}"
msgstr ""
msgstr "Забанен: {0}"
#: ../../TShockAPI/Commands.cs:1513
msgid "Banned."
@ -1451,7 +1451,7 @@ msgstr "Забанен."
#: ../../TShockAPI/Commands.cs:1666
msgid "Bans ({{0}}/{{1}}):"
msgstr ""
msgstr "Баны ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:6585
msgid "Basic Tree"
@ -1469,11 +1469,11 @@ msgstr "Кровавая Луна была установлена на {0}"
#: ../../TShockAPI/Rest/RestManager.cs:904
#, csharp-format
msgid "Bloodmoon state: {0}"
msgstr ""
msgstr "Состояние Кровавой Луны: {0}"
#: ../../TShockAPI/Commands.cs:6589
msgid "Boreal Tree"
msgstr ""
msgstr "Заснеженное дерево"
#: ../../TShockAPI/Bouncer.cs:1447
#, csharp-format
@ -2417,11 +2417,11 @@ msgstr "Объявляет сообщение на весь сервер."
#: ../../TShockAPI/Commands.cs:6363
msgid "Buff Syntax and Example"
msgstr ""
msgstr "Синтаксис и пример Buff"
#: ../../TShockAPI/Commands.cs:6006
msgid "Butcher Syntax and Example"
msgstr ""
msgstr "Синтаксис и пример Butcher"
#: ../../TShockAPI/GetDataHandlers.cs:2619
msgid "Bypass SSC is enabled for your account. SSC data will not be loaded or saved."
@ -2429,7 +2429,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6669
msgid "Cactus"
msgstr ""
msgstr "Кактус"
#: ../../TShockAPI/DB/IQueryBuilder.cs:319
msgid "Can't set to true SqlColumn.DefaultCurrentTimestamp when the MySqlDbType is not DateTime"
@ -2494,11 +2494,11 @@ msgstr "Проверяет наличие обновлений TShock."
#: ../../TShockAPI/Commands.cs:5182
msgid "clear - Clears the temporary region points."
msgstr ""
msgstr "clear - очищает временные точки региона."
#: ../../TShockAPI/Commands.cs:5810
msgid "Clear Syntax"
msgstr ""
msgstr "Синтаксис Clear"
#: ../../TShockAPI/Commands.cs:2527
msgid "Cleared all users from the angler quest completion list for today."
@ -2523,7 +2523,7 @@ msgstr "Не удалось выполнить команду, проверьт
#: ../../TShockAPI/Commands.cs:5256
msgid "Commands ({{0}}/{{1}}):"
msgstr ""
msgstr "Команды ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:3199
msgid "Commands: add, del, hide, list, send, [warpname]."
@ -2540,7 +2540,7 @@ msgstr "Правильное использование: {0}overridessc|{0}ossc
#: ../../TShockAPI/Commands.cs:6634
msgid "Corruption Palm"
msgstr ""
msgstr "Искаженная пальма"
#: ../../TShockAPI/DB/BanManager.cs:82
#: ../../TShockAPI/DB/ResearchDatastore.cs:54
@ -2559,17 +2559,17 @@ msgstr "Не удалось найти варп с названием {0} для
#: ../../TShockAPI/Commands.cs:5968
#, csharp-format
msgid "Could not find any player named \"{0}\""
msgstr ""
msgstr "Не удалось найти игрока с именем \"{0}\""
#: ../../TShockAPI/Commands.cs:5924
#, csharp-format
msgid "Could not find any player named \"{0}\"."
msgstr ""
msgstr "Не удалось найти игрока с именем \"{0}\"."
#: ../../TShockAPI/Commands.cs:5467
#, csharp-format
msgid "Could not find any players named \"{0}\""
msgstr ""
msgstr "Не удалось найти игроков по имени \"{0}\""
#: ../../TShockAPI/Commands.cs:1930
#, csharp-format
@ -2583,7 +2583,7 @@ msgstr "Не удалось найти игрока {0}."
#: ../../TShockAPI/Commands.cs:5040
msgid "Could not find specified region"
msgstr ""
msgstr "Не удалось найти указанный регион"
#: ../../TShockAPI/Commands.cs:3287
msgid "Could not find specified warp."
@ -2608,7 +2608,7 @@ msgstr "Не удалось найти указанную цель. Провер
#: ../../TShockAPI/Commands.cs:6196
#, csharp-format
msgid "Could not rename {0}!"
msgstr ""
msgstr "Не удалось переименовать {0}!"
#: ../../TShockAPI/Commands.cs:595
msgid "Creates a reference tables for Terraria data types and the TShock permission system in the server folder."
@ -2629,7 +2629,7 @@ msgstr "CreativeUnlocksHandler получил нестандартный зап
#: ../../TShockAPI/Commands.cs:6629
msgid "Crimson Palm"
msgstr ""
msgstr "Багровая пальма"
#: ../../TShockAPI/Commands.cs:4430
#, csharp-format
@ -2699,7 +2699,7 @@ msgstr "Обнаружено, что DOOM был включен."
#: ../../TShockAPI/Commands.cs:6659
msgid "Diamond Gemtree"
msgstr ""
msgstr "Алмазное дерево"
#: ../../TShockAPI/Commands.cs:1877
msgid "Disabled halloween mode."
@ -2744,7 +2744,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6651
msgid "Emerald Gemtree"
msgstr ""
msgstr "Изумрудное дерево"
#: ../../TShockAPI/Commands.cs:1875
msgid "Enabled halloween mode."
@ -2765,7 +2765,7 @@ msgstr "Ошибка перезагрузки групп: {0}"
#: ../../TShockAPI/Commands.cs:5115
msgid "Error: both names are the same."
msgstr ""
msgstr "Ошибка: оба имени совпадают."
#: ../../TShockAPI/Commands.cs:2773
msgid "Everscream"
@ -2869,7 +2869,7 @@ msgstr "Ошибка при переименовании группы {0}."
#: ../../TShockAPI/Commands.cs:5141
msgid "Failed to rename the region."
msgstr ""
msgstr "Не удалось переименовать регион"
#: ../../TShockAPI/Bouncer.cs:2665
msgid "Failed to shade polygon normals."
@ -2899,7 +2899,7 @@ msgstr "FetchHashedPasswordAndGroup SQL выдал ошибку: {0}"
#: ../../TShockAPI/Commands.cs:5679
msgid "Firework Syntax"
msgstr ""
msgstr "Синтаксис Firework"
#: ../../TShockAPI/Commands.cs:1940
msgid "For example, 1d and 10h-30m+2m are both valid time strings, but 2 is not."
@ -2949,7 +2949,7 @@ msgstr "GetUser SQL выдал ошибку {0}"
#: ../../TShockAPI/Commands.cs:6413
msgid "Give Buff Syntax and Example"
msgstr ""
msgstr "Синтаксис и пример Gbuff"
#: ../../TShockAPI/Commands.cs:541
msgid "Gives another player a buff or debuff for an amount of time. Putting -1 for time will set it to 415 days."
@ -3076,11 +3076,11 @@ msgstr "Группа {0} успешно добавлена."
#: ../../TShockAPI/Commands.cs:3450
msgid "Group Sub-Commands ({{0}}/{{1}}):"
msgstr ""
msgstr "Подкоманды группы ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:3741
msgid "Groups ({{0}}/{{1}}):"
msgstr ""
msgstr "Группы ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:476
msgid "Grows plants at your location."
@ -3104,7 +3104,7 @@ msgstr "Режим Hardmode включен."
#: ../../TShockAPI/Commands.cs:6303
msgid "Heal Syntax and Example"
msgstr ""
msgstr "Синтаксис и пример Heal"
#: ../../TShockAPI/Bouncer.cs:2082
msgid "HealOtherPlayer cheat attempt!"
@ -3279,7 +3279,7 @@ msgstr "Недопустимый тип босса!"
#: ../../TShockAPI/Commands.cs:6463
msgid "Invalid buff ID!"
msgstr ""
msgstr "Неверный ID эффекта!"
#: ../../TShockAPI/Commands.cs:652
#: ../../TShockAPI/Commands.cs:680
@ -3289,7 +3289,7 @@ msgstr "Введена неправильная команда. Введите {
#: ../../TShockAPI/Commands.cs:5271
msgid "Invalid command."
msgstr ""
msgstr "Неверная команда"
#: ../../TShockAPI/Commands.cs:3127
msgid "Invalid destination NPC."
@ -3330,7 +3330,7 @@ msgstr "Недопустимый тип нашествия. Допустимые
#: ../../TShockAPI/Commands.cs:6228
#: ../../TShockAPI/Commands.cs:6291
msgid "Invalid item type!"
msgstr ""
msgstr "Неверный тип предмета!"
#: ../../TShockAPI/Commands.cs:3803
#: ../../TShockAPI/Commands.cs:3854
@ -3380,7 +3380,7 @@ msgstr "Неверный пароль."
#: ../../TShockAPI/Commands.cs:6259
#: ../../TShockAPI/Commands.cs:6711
msgid "Invalid player!"
msgstr ""
msgstr "Неверный игрок!"
#: ../../TShockAPI/Commands.cs:1251
msgid "Invalid player."
@ -3403,7 +3403,7 @@ msgstr "Недопустимая волна тыквенной луны."
#: ../../TShockAPI/Commands.cs:5123
#, csharp-format
msgid "Invalid region \"{0}\"."
msgstr ""
msgstr "Неверный регион \"{0}\"."
#: ../../TShockAPI/Rest/Rest.cs:247
#, csharp-format
@ -3860,7 +3860,7 @@ msgstr "Вы исключены по причине: {0}."
#: ../../TShockAPI/Commands.cs:5913
msgid "Kill syntax and example"
msgstr ""
msgstr "Синтаксис и пример Kill"
#: ../../TShockAPI/Commands.cs:553
msgid "Kills another player."
@ -4058,7 +4058,7 @@ msgstr "Неадекватное поведение."
#: ../../TShockAPI/Commands.cs:6210
msgid "Missing item name/id."
msgstr ""
msgstr "Отсутствует имя/id предмета."
#: ../../TShockAPI/Rest/RestManager.cs:1268
#, csharp-format
@ -4072,7 +4072,7 @@ msgstr "Параметр {0} недопустим или отсутствует"
#: ../../TShockAPI/Commands.cs:6215
msgid "Missing player name."
msgstr ""
msgstr "Отсутствует имя игрока."
#: ../../TShockAPI/Commands.cs:1233
#, csharp-format
@ -4098,7 +4098,7 @@ msgstr "Найдено несколько учетных записей для {
#: ../../TShockAPI/Commands.cs:5457
msgid "Mute Syntax"
msgstr ""
msgstr "Синтаксис Mute"
#: ../../TShockAPI/Commands.cs:1289
msgid "N/A"
@ -4124,12 +4124,12 @@ msgstr "Никогда."
#: ../../TShockAPI/Commands.cs:6172
msgid "New name is too large!"
msgstr ""
msgstr "Новое имя слишком большое!"
#: ../../TShockAPI/TShock.cs:849
#, csharp-format
msgid "New worlds will be generated with the {0} world evil type!"
msgstr ""
msgstr "Новые миры будут создаваться с {0} типом зла!"
#: ../../TShockAPI/Commands.cs:1690
msgid "No bans found matching the provided ticket number."
@ -4689,7 +4689,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:5623
msgid "Rocket Syntax"
msgstr ""
msgstr "Синтаксис Rocket"
#: ../../TShockAPI/Commands.cs:342
msgid "Rockets a player upwards. Requires SSC."
@ -4701,7 +4701,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6597
msgid "Sakura Tree"
msgstr ""
msgstr "Сакура"
#: ../../TShockAPI/Commands.cs:2779
msgid "Santa-NK1"
@ -4709,7 +4709,7 @@ msgstr "Санта-НК1"
#: ../../TShockAPI/Commands.cs:6647
msgid "Sapphire Gemtree"
msgstr ""
msgstr "Сапфировое дерево"
#: ../../TShockAPI/Commands.cs:312
msgid "Saves all serverside characters."
@ -5549,7 +5549,7 @@ msgstr "Слишком много неудачных попыток входа
#: ../../TShockAPI/Commands.cs:6639
msgid "Topaz Gemtree"
msgstr ""
msgstr "Топазовое дерево"
#: ../../TShockAPI/Commands.cs:1220
#, csharp-format
@ -5588,7 +5588,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:5295
#, csharp-format
msgid "TShock: {0} {1}."
msgstr ""
msgstr "TShock: {0} {1}."
#: ../../TShockAPI/Commands.cs:1429
#, csharp-format
@ -5769,7 +5769,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:6687
msgid "Unknown plant!"
msgstr ""
msgstr "Неизвестное растение!"
#: ../../TShockAPI/Bouncer.cs:246
msgid "Unrecognized player direction"
@ -5907,17 +5907,17 @@ msgstr "Доступные режимы мира: {0}"
#: ../../TShockAPI/Commands.cs:3246
#, csharp-format
msgid "Warp {0} already exists."
msgstr ""
msgstr "Варп {0} уже существует."
#: ../../TShockAPI/Commands.cs:3282
#, csharp-format
msgid "Warp {0} is now private."
msgstr ""
msgstr "Варп {0} теперь приватный."
#: ../../TShockAPI/Commands.cs:3284
#, csharp-format
msgid "Warp {0} is now public."
msgstr ""
msgstr "Варп {0} теперь публичный."
#: ../../TShockAPI/Commands.cs:3242
#, csharp-format
@ -5936,11 +5936,11 @@ msgstr "В были телепортированы на варп {0}."
#: ../../TShockAPI/Commands.cs:3224
msgid "Warps ({{0}}/{{1}}):"
msgstr ""
msgstr "Варпы ({{0}}/{{1}}):"
#: ../../TShockAPI/Commands.cs:5514
msgid "Whisper Syntax"
msgstr ""
msgstr "Синтаксис Whisper"
#: ../../TShockAPI/Commands.cs:6601
msgid "Willow Tree"
@ -5963,16 +5963,16 @@ msgstr "Режим мира изменен на {0}."
#: ../../TShockAPI/TShock.cs:803
#, csharp-format
msgid "World name will be overridden by: {0}"
msgstr ""
msgstr "Название мира будет изменено на: {0}"
#: ../../TShockAPI/SaveManager.cs:137
#, csharp-format
msgid "World saved at ({0})"
msgstr ""
msgstr "Мир сохранен в ({0})"
#: ../../TShockAPI/SaveManager.cs:135
msgid "World saved."
msgstr ""
msgstr "Мир сохранен."
#: ../../TShockAPI/Commands.cs:4944
#, csharp-format

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-11-02 04:50\n"
"PO-Revision-Date: 2022-11-06 07:13\n"
"Last-Translator: \n"
"Language-Team: toki pona\n"
"MIME-Version: 1.0\n"
@ -261,22 +261,22 @@ msgstr "{0} {1} (tan tenpo weka {2})"
#: ../../TShockAPI/Commands.cs:1477
#, csharp-format
msgid "{0} {1} ({2})"
msgstr ""
msgstr "{0} {1} ({2})"
#: ../../TShockAPI/Commands.cs:5324
#, csharp-format
msgid "{0} {1} {2}"
msgstr ""
msgstr "{0} {1} {2}"
#: ../../TShockAPI/Commands.cs:1460
#, csharp-format
msgid "{0} {1} on {2} ({3} ago)"
msgstr ""
msgstr "{0} {1} lon {2} (weka tenpo {3})"
#: ../../TShockAPI/Commands.cs:6364
#, csharp-format
msgid "{0} <\"{1}|{2}\"> [{3}]"
msgstr ""
msgstr "{0} <\"{1}|{2}\"> [{3}]"
#: ../../TShockAPI/Commands.cs:1393
#: ../../TShockAPI/Commands.cs:1409
@ -284,184 +284,184 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:5914
#, csharp-format
msgid "{0} <{1}>"
msgstr ""
msgstr "{0} <{1}>"
#: ../../TShockAPI/Commands.cs:5458
#: ../../TShockAPI/Commands.cs:6304
#, csharp-format
msgid "{0} <{1}> [{2}]"
msgstr ""
msgstr "{0} <{1}> [{2}]"
#: ../../TShockAPI/Commands.cs:1380
#, csharp-format
msgid "{0} <{1}> [{2}] [{3}] [{4}]"
msgstr ""
msgstr "{0} <{1}> [{2}] [{3}] [{4}]"
#: ../../TShockAPI/Commands.cs:5680
#, csharp-format
msgid "{0} <{1}> [{2}|{3}|{4}|{5}]"
msgstr ""
msgstr "{0} <{1}> [{2}|{3}|{4}|{5}]"
#: ../../TShockAPI/Commands.cs:5515
#: ../../TShockAPI/Commands.cs:5596
#, csharp-format
msgid "{0} <{1}> <{2}>"
msgstr ""
msgstr "{0} <{1}> <{2}>"
#: ../../TShockAPI/Commands.cs:6414
#, csharp-format
msgid "{0} <{1}> <{2}|{3}> [{4}]"
msgstr ""
msgstr "{0} <{1}> <{2}|{3}> [{4}]"
#: ../../TShockAPI/Commands.cs:5811
#, csharp-format
msgid "{0} <{1}|{2}|{3}> [{4}]"
msgstr ""
msgstr "{0} <{1}|{2}|{3}> [{4}]"
#: ../../TShockAPI/Commands.cs:1102
#, csharp-format
msgid "{0} added account {1} to group {2}."
msgstr ""
msgstr "{0} li kama e jan {1} tawa kulupu {2}."
#: ../../TShockAPI/GetDataHandlers.cs:3554
#, csharp-format
msgid "{0} applied advanced combat techniques!"
msgstr ""
msgstr "{0} li kepeken e sona wawa utala!"
#: ../../TShockAPI/Commands.cs:1060
#, csharp-format
msgid "{0} attempted to register for the account {1} but it was already taken."
msgstr ""
msgstr "jan {0} li wile kama jo e nimi {1}. taso jan ante li jo e nimi {1}."
#: ../../TShockAPI/Commands.cs:901
#, csharp-format
msgid "{0} authenticated successfully as user: {1}."
msgstr ""
msgstr "jan {0} li ken kama sijelo {1}."
#: ../../TShockAPI/TSPlayer.cs:1955
#, csharp-format
msgid "{0} banned {1} for '{2}'."
msgstr ""
msgstr "jan {0} li weka e {1} tan ni: {2}."
#: ../../TShockAPI/Commands.cs:6047
#, csharp-format
msgid "{0} butchered {1} NPC."
msgid_plural "{0} butchered {1} NPCs."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[0] "jan {0} li moli e ijo wan."
msgstr[1] "jan {0} li moli e ijo tu."
msgstr[2] "jan {0} li moli e ijo pi luka {1}."
msgstr[3] "jan {0} li moli e ijo pi mute {1}."
msgstr[4] "jan {0} li moli e ijo {1}."
#: ../../TShockAPI/Commands.cs:2458
#, csharp-format
msgid "{0} caused it to rain slime."
msgstr ""
msgstr "jan {0} li open e telo sewi ko."
#: ../../TShockAPI/Commands.cs:2473
#, csharp-format
msgid "{0} caused it to rain."
msgstr ""
msgstr "jan {0} li open e telo sewi."
#: ../../TShockAPI/Commands.cs:1176
#, csharp-format
msgid "{0} changed account {1} to group {2}."
msgstr ""
msgstr "jan {0} li ante e sijelo {1} tawa kulupu {2}."
#: ../../TShockAPI/Commands.cs:4462
#, csharp-format
msgid "{0} changed the maximum spawns to {1}."
msgstr ""
msgstr "jan {0} li ante e nanpa sewi monsuta tawa {1}."
#: ../../TShockAPI/Commands.cs:4443
#, csharp-format
msgid "{0} changed the maximum spawns to 5."
msgstr ""
msgstr "jan {0} li ante e nanpa sewi monsuta tawa 5."
#: ../../TShockAPI/Commands.cs:1150
#, csharp-format
msgid "{0} changed the password for account {1}"
msgstr ""
msgstr "jan {0} li ante e nimi len tawa sijelo {1}"
#: ../../TShockAPI/Commands.cs:4501
#, csharp-format
msgid "{0} changed the spawn rate to {1}."
msgstr ""
msgstr "jan {0} li ante e wawa pi kama monsuta tawa {1}."
#: ../../TShockAPI/Commands.cs:4483
#, csharp-format
msgid "{0} changed the spawn rate to 600."
msgstr ""
msgstr "jan {0} li ante e wawa pi kama monsuta tawa 600."
#: ../../TShockAPI/Commands.cs:4635
#, csharp-format
msgid "{0} changed the wind speed to {1}."
msgstr ""
msgstr "jan {0} li ante e wawa kon tawa {1}."
#: ../../TShockAPI/Commands.cs:5849
#, csharp-format
msgid "{0} deleted {1} item within a radius of {2}."
msgid_plural "{0} deleted {1} items within a radius of {2}."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[0] "jan {0} li weka e ijo wan lon sike pi suli {2}."
msgstr[1] "jan {0} li weka e ijo tu lon sike pi suli {2}."
msgstr[2] "jan {0} li weka e ijo pi luka {1} lon sike pi suli {2}."
msgstr[3] "jan {0} li weka e ijo pi mute {1} lon sike pi suli {2}."
msgstr[4] "jan {0} li weka e ijo pi luka {1} lon sike pi suli {2}."
#: ../../TShockAPI/Commands.cs:5873
#, csharp-format
msgid "{0} deleted {1} NPC within a radius of {2}."
msgid_plural "{0} deleted {1} NPCs within a radius of {2}."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[0] "jan {0} li weka e ijo tawa wan lon sike pi suli {2}."
msgstr[1] "jan {0} li weka e ijo tawa tu lon sike pi suli {2}."
msgstr[2] "jan {0} li weka e ijo tawa pi luka {1} lon sike pi suli {2}."
msgstr[3] "jan {0} li weka e ijo tawa pi mute {1} lon sike pi suli {2}."
msgstr[4] "jan {0} li weka e ijo tawa pi mute {1} lon sike pi suli {2}."
#: ../../TShockAPI/Commands.cs:5898
#, csharp-format
msgid "{0} deleted {1} projectile within a radius of {2}."
msgid_plural "{0} deleted {1} projectiles within a radius of {2}."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[0] "jan {0} li weka e ijo utala wan lon sike pi suli {2}."
msgstr[1] "jan {0} li weka e ijo utala tu lon sike pi suli {2}."
msgstr[2] "jan {0} li weka e ijo utala pi luka {1} lon sike pi suli {2}."
msgstr[3] "jan {0} li weka e ijo utala pi mute {1} lon sike pi suli {2}."
msgstr[4] "jan {0} li weka e ijo utala pi mute {1} lon sike pi suli {2}."
#: ../../TShockAPI/Commands.cs:1883
#, csharp-format
msgid "{0} disabled halloween mode."
msgstr ""
msgstr "jan {0} li weka e musi Alowin."
#: ../../TShockAPI/Commands.cs:1903
#, csharp-format
msgid "{0} disabled xmas mode."
msgstr ""
msgstr "jan {0} li weka e musi pi suno Jesuwa."
#: ../../TShockAPI/Commands.cs:1881
#, csharp-format
msgid "{0} enabled halloween mode."
msgstr ""
msgstr "jan {0} li kama e musi Alowin."
#: ../../TShockAPI/Commands.cs:1901
#, csharp-format
msgid "{0} enabled xmas mode."
msgstr ""
msgstr "jan {0} li kama e musi pi suno Jesuwa."
#: ../../TShockAPI/Commands.cs:2465
#, csharp-format
msgid "{0} ended the rain."
msgstr ""
msgstr "jan {0} li weka e telo sewi."
#: ../../TShockAPI/Commands.cs:2450
#, csharp-format
msgid "{0} ended the slime rain."
msgstr ""
msgstr "jan {0} li weka e telo sewi ko."
#: ../../TShockAPI/Commands.cs:706
#, csharp-format
msgid "{0} executed (args omitted): {1}{2}."
msgstr ""
msgstr "jan {0} li kepeken (toki li weka): {1}{2}"
#: ../../TShockAPI/Commands.cs:704
#, csharp-format
@ -471,79 +471,79 @@ msgstr "jan {0} li kepeken {1}{2}."
#: ../../TShockAPI/Commands.cs:926
#, csharp-format
msgid "{0} failed to authenticate as user: {1}."
msgstr ""
msgstr "jan {0} li ken ala kama tawa sijelo {1}."
#: ../../TShockAPI/Commands.cs:6275
#, csharp-format
msgid "{0} gave you {1} {2}."
msgid_plural "{0} gave you {1} {2}s."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[0] "jan {0} li pana e {2} wan tawa sina."
msgstr[1] "jan {0} li pana e {2} tu tawa sina."
msgstr[2] "jan {0} li pana e {2} pi luka {1} tawa sina."
msgstr[3] "jan {0} li pana e {2} pi mute {1} tawa sina."
msgstr[4] "jan {0} li pana e {2} pi mute {1} tawa sina."
#: ../../TShockAPI/Commands.cs:4243
#, csharp-format
msgid "{0} has been allowed to place tile {1}."
msgstr ""
msgstr "jan {0} li ken pana e leko {1}."
#: ../../TShockAPI/Commands.cs:3877
#, csharp-format
msgid "{0} has been allowed to use {1}."
msgstr ""
msgstr "jan {0} li ken kepeken {1}."
#: ../../TShockAPI/Commands.cs:4067
#, csharp-format
msgid "{0} has been allowed to use projectile {1}."
msgstr ""
msgstr "jan {0} li ken kepeken utala tawa {1}."
#: ../../TShockAPI/Commands.cs:4301
#, csharp-format
msgid "{0} has been disallowed from placing tile {1}."
msgstr ""
msgstr "jan {0} li ken ala pana e leko {1}."
#: ../../TShockAPI/Commands.cs:4125
#, csharp-format
msgid "{0} has been disallowed from using projectile {1}."
msgstr ""
msgstr "jan {0} li ken ala kepeken utala tawa {1}."
#: ../../TShockAPI/Commands.cs:3948
#, csharp-format
msgid "{0} has been disallowed to use {1}."
msgstr ""
msgstr "jan {0} li ken ala kepeken {1}."
#: ../../TShockAPI/Commands.cs:6460
#, csharp-format
msgid "{0} has buffed you with {1} ({2}) for {3} seconds!"
msgstr ""
msgstr "jan {0} li wawa e sina kepeken {1} ({2}) tawa tenpo lili {3}!"
#: ../../TShockAPI/Commands.cs:1182
#, csharp-format
msgid "{0} has changed your group to {1}."
msgstr ""
msgstr "jan {0} li ante e kulupu sina tawa kulupu {1}."
#: ../../TShockAPI/Commands.cs:2945
#: ../../TShockAPI/Commands.cs:3016
#: ../../TShockAPI/Commands.cs:3022
#, csharp-format
msgid "{0} has disabled incoming teleports."
msgstr ""
msgstr "jan {0} li weka e tawa wawa kama."
#: ../../TShockAPI/Commands.cs:2408
#, csharp-format
msgid "{0} has ended the current invasion event."
msgstr ""
msgstr "jan {0} li weka e utala suli lon."
#: ../../TShockAPI/Commands.cs:2404
#, csharp-format
msgid "{0} has ended the Old One's Army event."
msgstr ""
msgstr "jan {0} li weka e utala suli pi ijo majuna."
#: ../../TShockAPI/TShock.cs:1652
#, csharp-format
msgid "{0} has joined."
msgstr ""
msgstr "jan {0} li kama lon."
#: ../../TShockAPI/TShock.cs:1656
#, csharp-format
@ -705,7 +705,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:5986
#, csharp-format
msgid "{0} is not dead!"
msgstr ""
msgstr "{0} li moli ala a!"
#: ../../TShockAPI/Commands.cs:6743
#, csharp-format
@ -863,85 +863,85 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:1128
#, csharp-format
msgid "{0} successfully deleted account: {1}."
msgstr ""
msgstr "jan {0} li weka e sijelo {1}."
#: ../../TShockAPI/GetDataHandlers.cs:3557
#, csharp-format
msgid "{0} summoned a Blood Moon!"
msgstr ""
msgstr "jan {0} li kama e mun loje!"
#: ../../TShockAPI/GetDataHandlers.cs:3569
#, csharp-format
msgid "{0} summoned a frost moon!"
msgstr ""
msgstr "jan {0} li kama e mun lete!"
#: ../../TShockAPI/GetDataHandlers.cs:3581
#, csharp-format
msgid "{0} summoned a Goblin Invasion!"
msgstr ""
msgstr "jan {0} li kama e utala suli pi jan mani!"
#: ../../TShockAPI/GetDataHandlers.cs:3563
#, csharp-format
msgid "{0} summoned a Martian invasion!"
msgstr ""
msgstr "jan {0} li kama e utala suli pi jan tan ma ante!"
#: ../../TShockAPI/GetDataHandlers.cs:3560
#, csharp-format
msgid "{0} summoned a Moon Lord!"
msgstr ""
msgstr "jan {0} li kama e lawa mun!"
#: ../../TShockAPI/GetDataHandlers.cs:3572
#, csharp-format
msgid "{0} summoned a pumpkin moon!"
msgstr ""
msgstr "jan {0} li kama e mun pi kasi loje!"
#: ../../TShockAPI/GetDataHandlers.cs:3566
#, csharp-format
msgid "{0} summoned an eclipse!"
msgstr ""
msgstr "jan {0} li kama e suno pake!"
#: ../../TShockAPI/GetDataHandlers.cs:3584
#, csharp-format
msgid "{0} summoned the {1}!"
msgstr ""
msgstr "jan {0} li kama e {1}!"
#: ../../TShockAPI/GetDataHandlers.cs:2977
#: ../../TShockAPI/GetDataHandlers.cs:2980
#, csharp-format
msgid "{0} summoned the Empress of Light!"
msgstr ""
msgstr "jan {0} li kama e sewi suno!"
#: ../../TShockAPI/GetDataHandlers.cs:3575
#, csharp-format
msgid "{0} summoned the Pirates!"
msgstr ""
msgstr "jan {0} li kama e jan jasima telo!"
#: ../../TShockAPI/GetDataHandlers.cs:3578
#, csharp-format
msgid "{0} summoned the Snow Legion!"
msgstr ""
msgstr "jan {0} li kama e utala suli lete!"
#: ../../TShockAPI/Commands.cs:3000
#: ../../TShockAPI/Commands.cs:3040
#, csharp-format
msgid "{0} teleported {1} to you."
msgstr ""
msgstr "jan {0} li tawa e jan {1} tawa sina."
#: ../../TShockAPI/Commands.cs:2952
#, csharp-format
msgid "{0} teleported to you."
msgstr ""
msgstr "jan {0} li tawa sina."
#: ../../TShockAPI/Commands.cs:2993
#: ../../TShockAPI/Commands.cs:3033
#, csharp-format
msgid "{0} teleported you to {1}."
msgstr ""
msgstr "jan {0} li tawa e sina tawa jan {1}."
#: ../../TShockAPI/Commands.cs:690
#, csharp-format
msgid "{0} tried to execute (args omitted) {1}{2}."
msgstr ""
msgstr "jan {0} li wile kepeken (toki li weka): {1}{2}"
#: ../../TShockAPI/Commands.cs:688
#, csharp-format
@ -951,167 +951,167 @@ msgstr "jan {0} li wile kepeken {1}{2}. taso ona li ken ala."
#: ../../TShockAPI/Commands.cs:2251
#, csharp-format
msgid "{0} triggered a meteor."
msgstr ""
msgstr "jan {0} li kama e kiwen mun anpa."
#: ../../TShockAPI/Commands.cs:3324
#, csharp-format
msgid "{0} warped you to {1}."
msgstr ""
msgstr "jan {0} li tawa e sina tawa ma {1}."
#: ../../TShockAPI/TSPlayer.cs:1953
#, csharp-format
msgid "{0} was banned for '{1}'."
msgstr ""
msgstr "jan {0} li weka awen tan ni: {1}."
#: ../../TShockAPI/TSPlayer.cs:1924
#, csharp-format
msgid "{0} was kicked for '{1}'"
msgstr ""
msgstr "jan {0} li weka tan ni: {1}."
#: ../../TShockAPI/Commands.cs:2998
#: ../../TShockAPI/Commands.cs:3038
#, csharp-format
msgid "{0} was teleported to you."
msgstr ""
msgstr "jan {0} li tawa sina."
#: ../../TShockAPI/Commands.cs:1292
#, csharp-format
msgid "{0}'s group is {1}."
msgstr ""
msgstr "kulupu pi jan {0} li {1}."
#: ../../TShockAPI/Commands.cs:1293
#, csharp-format
msgid "{0}'s last known IP is {1}."
msgstr ""
msgstr "nanpa IP sona pi jan {0} li {1}."
#: ../../TShockAPI/Commands.cs:1282
#, csharp-format
msgid "{0}'s last login occurred {1} {2} UTC{3}."
msgstr ""
msgstr "kama sijelo pi jan {0} li lon tenpo {1} {2} UTC{3}"
#: ../../TShockAPI/Commands.cs:1294
#, csharp-format
msgid "{0}'s register date is {1} {2} UTC{3}."
msgstr ""
msgstr "kama lon pi sijelo sin pi jan {0} li lon tenpo {1} {2} UTC{3}"
#: ../../TShockAPI/Commands.cs:5774
#, csharp-format
msgid "{0}{1} defines no aliases."
msgstr ""
msgstr "{0}{1} li jo ala e nimi ante."
#: ../../TShockAPI/Commands.cs:5280
#, csharp-format
msgid "{0}{1} help: "
msgstr ""
msgstr "{0}{1} sona: "
#: ../../TShockAPI/Utils.cs:1066
#, csharp-format
msgid "{0}{1}/{2} on {3} @ {4}:{5} (TShock for Terraria v{6})"
msgstr ""
msgstr "ma {3} lon tomo {0} (jan {1}/{2}) @ {4}:{5} (ilo TShock pi musi Terraria nanpa {6})"
#: ../../TShockAPI/Commands.cs:846
#, csharp-format
msgid "{0}login - Authenticates you using your UUID and character name."
msgstr ""
msgstr "{0}login - kama e sijelo sina kepeken nanpa sina en nimi pi musi sina."
#: ../../TShockAPI/Commands.cs:851
#, csharp-format
msgid "{0}login <password> - Authenticates you using your password and character name."
msgstr ""
msgstr "{0}login <nimi len> - kama e sijelo sina kepeken nimi len en nimi pi musi sina."
#: ../../TShockAPI/Commands.cs:849
#, csharp-format
msgid "{0}login <username> <password> - Authenticates you using your username and password."
msgstr ""
msgstr "{0}login <nimi sijelo> <nimi len> - kama e sijelo sina kepeken nimi len en nimi sijelo."
#: ../../TShockAPI/Commands.cs:5409
#, csharp-format
msgid "{0}user add <username> <password> owner"
msgstr ""
msgstr "{0}user add <nimi> <nimi len> owner"
#: ../../TShockAPI/Commands.cs:1201
#, csharp-format
msgid "{0}user add username password group -- Adds a specified user"
msgstr ""
msgstr "{0}user add nimi nimilen kulupu -- o lon e sijelo sin"
#: ../../TShockAPI/Commands.cs:1202
#, csharp-format
msgid "{0}user del username -- Removes a specified user"
msgstr ""
msgstr "{0}user del nimi -- weka e sijelo"
#: ../../TShockAPI/Commands.cs:1204
#, csharp-format
msgid "{0}user group username newgroup -- Changes a user's group"
msgstr ""
msgstr "{0}user group nimi kulupu -- ante e kulupu sijelo"
#: ../../TShockAPI/Commands.cs:1203
#, csharp-format
msgid "{0}user password username newpassword -- Changes a user's password"
msgstr ""
msgstr "{0}user password nimi nimilen -- ante e nimi len sijelo"
#: ../../TShockAPI/Commands.cs:5426
#, csharp-format
msgid "*{0} {1}"
msgstr ""
msgstr "* jan {0} {1}"
#: ../../TShockAPI/Commands.cs:1609
#, csharp-format
msgid "#{0} - You have been banned: {1}."
msgstr ""
msgstr "#{0} - weka sina li pake tan ni: {1}."
#: ../../TShockAPI/Commands.cs:5442
#, csharp-format
msgid "<{0}> {1}"
msgstr ""
msgstr "<{0}> {1}"
#: ../../TShockAPI/Commands.cs:5546
#: ../../TShockAPI/Commands.cs:5577
#, csharp-format
msgid "<From {0}> {1}"
msgstr ""
msgstr "<tan {0}> {1}"
#: ../../TShockAPI/Commands.cs:5547
#: ../../TShockAPI/Commands.cs:5578
#, csharp-format
msgid "<To {0}> {1}"
msgstr ""
msgstr "<tawa {0}> {1}"
#: ../../TShockAPI/Commands.cs:2814
msgid "a Deerclops"
msgstr ""
msgstr "monsuta Deerclops"
#: ../../TShockAPI/Commands.cs:3380
msgid "A group with the same name already exists."
msgstr ""
msgstr "kulupu pi nimi ni li awen lon."
#: ../../TShockAPI/DB/RegionManager.cs:108
msgid "A lot of things will fail because of this. You must manually delete and re-create the allowed field."
msgstr ""
msgstr "ijo mute li pakala tan ni. sina o weka o lon sin e sona ni."
#: ../../TShockAPI/Commands.cs:2789
msgid "a Martian Saucer"
msgstr ""
msgstr "monsuta sewi pi ma ante"
#: ../../TShockAPI/Commands.cs:2247
msgid "A meteor has been triggered."
msgstr ""
msgstr "kiwen sewi li kama."
#: ../../TShockAPI/Commands.cs:2799
msgid "a Nebula Pillar"
msgstr ""
msgstr "sinpin Nepula"
#: ../../TShockAPI/Commands.cs:1312
msgid "A player name must be provided to kick a player. Please provide one."
msgstr ""
msgstr "nimi sijelo li wile tawa weka jan. o pana e nimi."
#: ../../TShockAPI/Rest/SecureRest.cs:120
#, csharp-format
msgid "A REST login from {0} was blocked as it currently has {1} rate-limit tokens and is at the RESTMaximumRequestsPerInterval threshold."
msgstr ""
msgstr "kama sijelo REST tan {0} li pake tan ni: ona li jo e ken {1} li lon nanpa RESTMaximumRequestsPerInterval."
#: ../../TShockAPI/Commands.cs:2794
msgid "a Solar Pillar"
msgstr ""
msgstr "sinpin Sola"
#: ../../TShockAPI/Commands.cs:2809
msgid "a Stardust Pillar"
@ -5396,7 +5396,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:2718
msgid "the Wall of Flesh"
msgstr ""
msgstr "sinpin monsuta"
#: ../../TShockAPI/Bouncer.cs:788
msgid "The world's chest limit has been reached - unable to place more."
@ -5453,7 +5453,7 @@ msgstr ""
#: ../../TShockAPI/Commands.cs:2709
msgid "There is already a Wall of Flesh."
msgstr ""
msgstr "sinpin monsuta li lon."
#: ../../TShockAPI/Commands.cs:932
msgid "There was an error processing your login or authentication related request."

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tshock\n"
"POT-Creation-Date: 2022-10-31 22:50:21+0000\n"
"PO-Revision-Date: 2022-11-01 11:35\n"
"PO-Revision-Date: 2022-11-10 01:22\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"
@ -1568,21 +1568,21 @@ msgstr "Bouncer / OnGetSection 拒绝来自 {0} 的 GetSection 数据包"
#: ../../TShockAPI/Bouncer.cs:2081
#, csharp-format
msgid "Bouncer / OnHealOtherPlayer 0.2 check from {0}"
msgstr "Bouncer / OnHealOtherPlayer 0.2 检查从{0}"
msgstr "Bouncer / OnHealOtherPlayer(治疗友方防护)因比例数值检查而阻止了{0}治疗友方。"
#: ../../TShockAPI/Bouncer.cs:2105
#, csharp-format
msgid "Bouncer / OnHealOtherPlayer rejected disabled/throttled from {0}"
msgstr "Bouncer / OnHealOtherPlayer 拒绝了来自 {0} 的禁用/调整"
msgstr "Bouncer / OnHealOtherPlayer(治疗友方防护) 因被限制行动而阻止了{0}治疗友方。"
#: ../../TShockAPI/Bouncer.cs:2097
#, csharp-format
msgid "Bouncer / OnHealOtherPlayer rejected heal other threshold from {0} {1}/{2}"
msgstr "Bouncer / OnHealOtherPlayer 因治疗量超过上限而拒绝了 {0} {1}/{2}"
msgstr "Bouncer / OnHealOtherPlayer(治疗友方防护) 因治疗速度{1}超过上限{2}而阻止了{0}治疗友方。"
#: ../../TShockAPI/Bouncer.cs:2071
msgid "Bouncer / OnHealOtherPlayer rejected null checks"
msgstr "Bouncer / OnHealOtherPlayer 拒绝了无效检查"
msgstr "Bouncer / OnHealOtherPlayer(治疗友方防护)因目标玩家不存在而阻止了治疗。"
#: ../../TShockAPI/Bouncer.cs:1057
#, csharp-format
@ -1782,7 +1782,7 @@ msgstr "Bouncer / OnNewProjectile弹幕防护因超过弹幕伤害上限
#: ../../TShockAPI/Bouncer.cs:1277
#, csharp-format
msgid "Bouncer / OnNewProjectile rejected from projectile update threshold from {0} {1}/{2}"
msgstr "Bouncer / OnNewProjectile弹幕防护超过弹幕更新上限({1}/{2})阻止了{0}"
msgstr "Bouncer / OnNewProjectile弹幕防护射弹创建速度{1}超过上限{2}而阻止了{0}创建射弹。"
#: ../../TShockAPI/Bouncer.cs:1232
#, csharp-format
@ -1962,7 +1962,7 @@ msgstr "Bouncer / OnPlaceObject 拒绝使用堆石器—此位置已存在碎石
#: ../../TShockAPI/Bouncer.cs:2355
#, csharp-format
msgid "Bouncer / OnPlaceObject rejected tile place threshold from {0} {1}/{2}"
msgstr "Bouncer / OnPlaceObject 拒绝超阈值放置方块 {0} {1}/{2}"
msgstr "Bouncer / OnPlaceObject(大型物体放置防护)因物块放置速度{1}超过上限{2}而阻止了{0}放置大型物体。"
#: ../../TShockAPI/Bouncer.cs:2207
#, csharp-format
@ -2181,7 +2181,7 @@ msgstr "Bouncer / OnReleaseNPC 因限流而拒绝了{0}"
#: ../../TShockAPI/Bouncer.cs:2145
#, csharp-format
msgid "Bouncer / OnReleaseNPC released different critter from {0}"
msgstr "Bouncer / OnReleaseNPC 从{0}生成了不同的生物"
msgstr "Bouncer / OnReleaseNPC(小动物防护) 因物品和释放的小动物不匹配而阻止了{0}释放小动物。"
#: ../../TShockAPI/Bouncer.cs:684
#, csharp-format
@ -2287,12 +2287,12 @@ msgstr "Bouncer / OnTileEdit物块防护因限流阻止了{0}的操作。{
#: ../../TShockAPI/Bouncer.cs:909
#, csharp-format
msgid "Bouncer / OnTileEdit rejected from tile kill threshold from {0}, (value: {1})"
msgstr "Bouncer / OnTileEdit物块防护超过物块破坏上限阻止了{0}。(值:{1}"
msgstr "Bouncer / OnTileEdit物块防护因物块破坏速度{1}超过上限阻止了{0}破坏物块。"
#: ../../TShockAPI/Bouncer.cs:927
#, csharp-format
msgid "Bouncer / OnTileEdit rejected from tile place threshold from {0}, (value: {1})"
msgstr "Bouncer / OnTileEdit物块防护超过物块放置上限阻止了{0}。(值:{1}"
msgstr "Bouncer / OnTileEdit物块防护因物块放置速度{1}超过上限阻止了{0}放置物块。"
#: ../../TShockAPI/Bouncer.cs:769
#, csharp-format
@ -2671,7 +2671,7 @@ msgstr "destroytokens - 删除当前所有REST令牌"
#: ../../TShockAPI/Bouncer.cs:470
#: ../../TShockAPI/Bouncer.cs:478
msgid "Detected DOOM set to ON position."
msgstr "检测到 DOM 已设置为开启位置。"
msgstr "毁灭战士已启动"
#: ../../TShockAPI/Commands.cs:6659
msgid "Diamond Gemtree"
@ -3078,12 +3078,12 @@ msgstr "生命值和示例"
#: ../../TShockAPI/Bouncer.cs:2082
msgid "HealOtherPlayer cheat attempt!"
msgstr "有人正在尝试作弊治疗其他玩家!"
msgstr "通过作弊手段治疗友方"
#: ../../TShockAPI/Bouncer.cs:2091
#, csharp-format
msgid "HealOtherPlayer threshold exceeded {0}."
msgstr "治疗其他玩家阈值超过 {0}。"
msgstr "治疗友方速度超过{0}"
#: ../../TShockAPI/Commands.cs:549
msgid "Heals a player in HP and MP."
@ -3117,11 +3117,11 @@ msgstr "如果这个玩家没有作弊请向TShock报告此处的伤害上限
#: ../../TShockAPI/Bouncer.cs:2098
msgid "If this player wasn't hacking, please report the HealOtherPlayer threshold they were disabled for to TShock so we can improve this!"
msgstr "如果这个玩家没有作弊请向TShock报告此处的治疗量上限以便更正。"
msgstr "如果这个玩家没有作弊请向TShock报告此处的治疗友方速度以便更正。"
#: ../../TShockAPI/Bouncer.cs:1278
msgid "If this player wasn't hacking, please report the projectile update threshold they were disabled for to TShock so we can improve this!"
msgstr "如果这个玩家没有作弊请向TShock报告此处的射弹更新上限以便更正。"
msgstr "如果这个玩家没有作弊请向TShock报告此处的射弹创建速度上限以便更正。"
#: ../../TShockAPI/Bouncer.cs:910
msgid "If this player wasn't hacking, please report the tile kill threshold they were disabled for to TShock so we can improve this!"
@ -3523,7 +3523,7 @@ msgstr "语法错误。正确的语法是:{0}me <text>"
#: ../../TShockAPI/Commands.cs:5433
#, csharp-format
msgid "Invalid syntax. Proper syntax: {0}p <team chat text>"
msgstr "语法错误。正确的语法是:{0}p <team chat text>"
msgstr "语法错误。正确的语法是:{0}p <聊天内容>"
#: ../../TShockAPI/Commands.cs:4026
#, csharp-format
@ -3960,7 +3960,7 @@ msgstr "机器名称:{0}"
#: ../../TShockAPI/Bouncer.cs:2451
msgid "Malicious portal attempt."
msgstr "尝试放置非法的传送门。"
msgstr "试图伪造传送其他玩家"
#: ../../TShockAPI/Commands.cs:280
msgid "Manages groups."
@ -4182,7 +4182,7 @@ msgstr "没有升级Work Factor因为BCrypt的哈希值格式有误。"
#: ../../TShockAPI/Bouncer.cs:1369
#, csharp-format
msgid "NPC damage exceeded {0}."
msgstr "NPC 伤害超过 {0}。"
msgstr "对NPC造成的伤害高于{0}"
#: ../../TShockAPI/DB/RegionManager.cs:102
#, csharp-format
@ -4293,7 +4293,7 @@ msgstr "玩家 {0} 已经登录。"
#: ../../TShockAPI/TSPlayer.cs:1887
#, csharp-format
msgid "Player {0} has been disabled for {1}."
msgstr "玩家{0}因为{1}而被禁用"
msgstr "玩家{0}因为{1}而被限制行动。"
#: ../../TShockAPI/Rest/RestManager.cs:1388
#, csharp-format
@ -4336,7 +4336,7 @@ msgstr "未找到玩家{0}"
#: ../../TShockAPI/Bouncer.cs:2591
#, csharp-format
msgid "Player damage exceeded {0}."
msgstr "玩家伤害超过了{0}。"
msgstr "对玩家造成的伤害高于{0}"
#: ../../TShockAPI/Commands.cs:6285
msgid "Player does not have free slots!"
@ -4345,7 +4345,7 @@ msgstr "玩家没有空闲的背包空间!"
#: ../../TShockAPI/Bouncer.cs:1165
#, csharp-format
msgid "Player does not have permission to create projectile {0}."
msgstr "玩家没有权限创建射弹{0}。"
msgstr "没有创建射弹{0}的权限"
#: ../../TShockAPI/Commands.cs:1320
msgid "Player not found. Unable to kick the player."
@ -4422,12 +4422,12 @@ msgstr "封禁射弹 ({{0}}/{{1}}):"
#: ../../TShockAPI/Bouncer.cs:1175
#, csharp-format
msgid "Projectile damage is higher than {0}."
msgstr "射弹伤害高于{0}"
msgstr "射弹伤害高于{0}"
#: ../../TShockAPI/Bouncer.cs:1269
#, csharp-format
msgid "Projectile update threshold exceeded {0}."
msgstr "射弹更新阈值超过 {0}。"
msgstr "射弹创建速度超过每秒{0}个"
#: ../../TShockAPI/Commands.cs:5194
msgid "protect <name> <true/false> - Sets whether the tiles inside the region are protected or not."
@ -4454,29 +4454,29 @@ msgstr "{0}的范围检查失败({1}{2})(范围:{3}/{5}{4}/{5}"
#: ../../TShockAPI/Bouncer.cs:2095
msgid "Reached HealOtherPlayer threshold."
msgstr "达到了治愈其他玩家的临界值。"
msgstr "治疗友方速度过快"
#: ../../TShockAPI/Bouncer.cs:1273
msgid "Reached projectile update threshold."
msgstr "已达到弹幕更新阈值。"
msgstr "射弹创建速度过快"
#: ../../TShockAPI/Bouncer.cs:905
msgid "Reached TileKill threshold."
msgstr "已达到图格破坏阈值。"
msgstr "物块破坏速度过快"
#: ../../TShockAPI/Bouncer.cs:1668
#, csharp-format
msgid "Reached TileLiquid threshold {0}."
msgstr "已到达液体阈值{0}。"
msgstr "液体放置速度超过{0}"
#: ../../TShockAPI/Bouncer.cs:1672
msgid "Reached TileLiquid threshold."
msgstr "已到达液体阈值。"
msgstr "液体放置速度过快"
#: ../../TShockAPI/Bouncer.cs:923
#: ../../TShockAPI/Bouncer.cs:2356
msgid "Reached TilePlace threshold."
msgstr "以达到图格防止阈值。"
msgstr "物块破坏速度过快"
#: ../../TShockAPI/Commands.cs:1491
#, csharp-format
@ -4946,19 +4946,19 @@ msgstr "指定的API端点不存在。请参阅文档以获取有效的端点列
#: ../../TShockAPI/Bouncer.cs:1798
msgid "Spreading honey without holding a honey bucket"
msgstr "在不手持蜂蜜桶的情况下撒蜂蜜"
msgstr "凭空放置蜂蜜"
#: ../../TShockAPI/Bouncer.cs:1758
msgid "Spreading lava without holding a lava bucket"
msgstr "在不手持岩浆桶的情况下撒岩浆"
msgstr "凭空放置岩浆"
#: ../../TShockAPI/Bouncer.cs:1818
msgid "Spreading shimmer without holding a shimmer bucket"
msgstr "在没有手持微光桶的情况下放置微光液体"
msgstr "凭空放置微光液体"
#: ../../TShockAPI/Bouncer.cs:1778
msgid "Spreading water without holding a water bucket"
msgstr "在手上没有水桶的时候放置水"
msgstr "凭空放置水"
#: ../../TShockAPI/SqlLog.cs:346
#, csharp-format
@ -5437,12 +5437,12 @@ msgstr "封禁物块 ({{0}}/{{1}}):"
#: ../../TShockAPI/Bouncer.cs:901
#, csharp-format
msgid "Tile kill threshold exceeded {0}."
msgstr "破坏图格速度超出最大值{0}。"
msgstr "物块破坏速度超过每秒{0}个"
#: ../../TShockAPI/Bouncer.cs:919
#, csharp-format
msgid "Tile place threshold exceeded {0}."
msgstr "放置图格速度超出最大值{0}。"
msgstr "物块放置速度超过每秒{0}个"
#: ../../TShockAPI/Commands.cs:6416
#, csharp-format
@ -5830,19 +5830,19 @@ msgstr "用户名或密码错误,也可能是该用户没有足够的权限。
#: ../../TShockAPI/Bouncer.cs:1829
msgid "Using banned bottomless shimmer bucket without permissions"
msgstr "没有权限使用被禁止的无底微光桶"
msgstr "没有使用无底微光桶的权限"
#: ../../TShockAPI/Bouncer.cs:1808
msgid "Using banned honey bucket without permissions"
msgstr "没有权限使用被禁止的蜂蜜桶"
msgstr "没有使用蜂蜜桶的权限"
#: ../../TShockAPI/Bouncer.cs:1768
msgid "Using banned lava bucket without permissions"
msgstr "没有权限使用被禁止的岩浆桶"
msgstr "没有使用岩浆桶的权限"
#: ../../TShockAPI/Bouncer.cs:1788
msgid "Using banned water bucket without permissions"
msgstr "没有权限使用被禁止的水桶"
msgstr "没有使用水桶的权限"
#: ../../TShockAPI/Commands.cs:920
msgid "UUID does not match this character."
@ -5977,7 +5977,7 @@ msgstr "你没有死亡!"
#: ../../TShockAPI/Commands.cs:5450
msgid "You are not in a party!"
msgstr "你没有在派对中!"
msgstr "你不在任何队伍当中,无法使用队内聊天。"
#: ../../TShockAPI/Commands.cs:941
msgid "You are not logged-in. Therefore, you cannot logout."
@ -6062,7 +6062,7 @@ msgstr "复活只能对真实的玩家使用。"
#: ../../TShockAPI/Commands.cs:810
msgid "You cannot login whilst crowd controlled."
msgstr "你无法在被控制时登录。"
msgstr "在无法行动时不能登录。"
#: ../../TShockAPI/Commands.cs:796
msgid "You cannot login whilst dead."
@ -6498,7 +6498,7 @@ msgstr "你的用户组无法被加载,请联系服务器管理员处理此错
#: ../../TShockAPI/Bouncer.cs:436
msgid "Your client sent a blank character name."
msgstr "你的客户端发送了一个空白的角色名称。"
msgstr "玩家名为空"
#: ../../TShockAPI/DB/RegionManager.cs:107
msgid "Your database contains invalid UserIDs (they should be integers)."