Merge remote-tracking branch 'upstream/general-devel' into config/WorldTileProvider

This commit is contained in:
Luke 2022-11-27 15:16:32 +10:00
commit b24fd4fe43
7 changed files with 144 additions and 80 deletions

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/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Terraria; using Terraria;
@ -35,6 +35,8 @@ namespace TShockAPI.Localization
private static readonly Dictionary<int, string> Prefixs = new Dictionary<int, string>(); private static readonly Dictionary<int, string> Prefixs = new Dictionary<int, string>();
private static readonly Dictionary<int, string> Buffs = new Dictionary<int, string>();
internal static void Initialize() internal static void Initialize()
{ {
var culture = Language.ActiveCulture; var culture = Language.ActiveCulture;
@ -58,10 +60,16 @@ namespace TShockAPI.Localization
NpcNames.Add(i, Lang.GetNPCNameValue(i)); NpcNames.Add(i, Lang.GetNPCNameValue(i));
} }
for (var i = 0; i < Terraria.ID.BuffID.Count; i++)
{
Buffs.Add(i, Lang.GetBuffName(i));
}
foreach (var field in typeof(Main).Assembly.GetType("Terraria.ID.PrefixID") foreach (var field in typeof(Main).Assembly.GetType("Terraria.ID.PrefixID")
.GetFields().Where(f => !f.Name.Equals("Count", StringComparison.Ordinal))) .GetFields().Where(f => !f.Name.Equals("Count", StringComparison.Ordinal)))
{ {
Prefixs.Add((int) field.GetValue(null), field.Name); var i = (int)field.GetValue(null);
Prefixs.Add(i, Lang.prefix[i].Value);
} }
} }
finally finally
@ -114,5 +122,19 @@ namespace TShockAPI.Localization
return null; return null;
} }
/// <summary>
/// Get buff name in English
/// </summary>
/// <param name="id">Buff Id</param>
/// <returns>Buff name in English</returns>
public static string GetBuffNameById(int id)
{
string buff;
if (Buffs.TryGetValue(id, out buff))
return buff;
return null;
}
} }
} }

View file

@ -59,7 +59,7 @@ namespace TShockAPI
/// <summary>VersionNum - The version number the TerrariaAPI will return back to the API. We just use the Assembly info.</summary> /// <summary>VersionNum - The version number the TerrariaAPI will return back to the API. We just use the Assembly info.</summary>
public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version; public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version;
/// <summary>VersionCodename - The version codename is displayed when the server starts. Inspired by software codenames conventions.</summary> /// <summary>VersionCodename - The version codename is displayed when the server starts. Inspired by software codenames conventions.</summary>
public static readonly string VersionCodename = "ζ Ori"; public static readonly string VersionCodename = "Thank you, everyone, for your support of TShock all these years! <3";
/// <summary>SavePath - This is the path TShock saves its data in. This path is relative to the TerrariaServer.exe (not in ServerPlugins).</summary> /// <summary>SavePath - This is the path TShock saves its data in. This path is relative to the TerrariaServer.exe (not in ServerPlugins).</summary>
public static string SavePath = "tshock"; public static string SavePath = "tshock";

View file

@ -18,7 +18,7 @@
Also, be sure to release on github with the exact assembly version tag as below Also, be sure to release on github with the exact assembly version tag as below
so that the update manager works correctly (via the Github releases api and mimic) so that the update manager works correctly (via the Github releases api and mimic)
--> -->
<Version>5.1.2</Version> <Version>5.1.3</Version>
<AssemblyTitle>TShock for Terraria</AssemblyTitle> <AssemblyTitle>TShock for Terraria</AssemblyTitle>
<Company>Pryaxis &amp; TShock Contributors</Company> <Company>Pryaxis &amp; TShock Contributors</Company>
<Product>TShockAPI</Product> <Product>TShockAPI</Product>

View file

@ -81,7 +81,7 @@ namespace TShockAPI
private static readonly Utils instance = new Utils(); private static readonly Utils instance = new Utils();
/// <summary>Utils - Creates a utilities object.</summary> /// <summary>Utils - Creates a utilities object.</summary>
private Utils() {} private Utils() { }
/// <summary>Instance - An instance of the utils class.</summary> /// <summary>Instance - An instance of the utils class.</summary>
/// <value>value - the Utils instance</value> /// <value>value - the Utils instance</value>
@ -210,8 +210,8 @@ namespace TShockAPI
tileY = startTileY; tileY = startTileY;
break; break;
} }
tileX = startTileX + r.Next(tileXRange*-1, tileXRange); tileX = startTileX + r.Next(tileXRange * -1, tileXRange);
tileY = startTileY + r.Next(tileYRange*-1, tileYRange); tileY = startTileY + r.Next(tileYRange * -1, tileYRange);
j++; j++;
} while (TilePlacementValid(tileX, tileY) && TileSolid(tileX, tileY)); } while (TilePlacementValid(tileX, tileY) && TileSolid(tileX, tileY));
} }
@ -253,7 +253,7 @@ namespace TShockAPI
{ {
if (type >= Terraria.ID.ItemID.Count) if (type >= Terraria.ID.ItemID.Count)
return new List<Item>(); return new List<Item>();
return new List<Item> {GetItemById(type)}; return new List<Item> { GetItemById(type) };
} }
Item item = GetItemFromTag(text); Item item = GetItemFromTag(text);
if (item != null) if (item != null)
@ -280,37 +280,35 @@ namespace TShockAPI
/// <returns>List of Items</returns> /// <returns>List of Items</returns>
public List<Item> GetItemByName(string name) public List<Item> GetItemByName(string name)
{ {
var found = new List<Item>(); var startswith = new List<int>();
Item item = new Item(); var contains = new List<int>();
string nameLower = name.ToLowerInvariant(); for (int i = 1; i < ItemID.Count; i++)
var checkEnglish = Language.ActiveCulture != GameCulture.FromCultureName(GameCulture.CultureName.English);
for (int i = 1; i < Terraria.ID.ItemID.Count; i++)
{ {
item.netDefaults(i); var currentName = Lang.GetItemNameValue(i);
if (!String.IsNullOrWhiteSpace(item.Name)) if (!string.IsNullOrEmpty(currentName))
{ {
if (item.Name.ToLowerInvariant() == nameLower) if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<Item> { item }; return new List<Item> { GetItemById(i) };
if (item.Name.ToLowerInvariant().StartsWith(nameLower)) if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
found.Add(item.Clone()); startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
}
currentName = EnglishLanguage.GetItemNameById(i);
if (!string.IsNullOrEmpty(currentName))
{
if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<Item> { GetItemById(i) };
if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
}
} }
if (!checkEnglish) if (startswith.Count != 1)
{ startswith.AddRange(contains);
continue; return startswith.Select(GetItemById).ToList();
}
string englishName = EnglishLanguage.GetItemNameById(i).ToLowerInvariant();
if (!String.IsNullOrEmpty(englishName))
{
if (englishName == nameLower)
return new List<Item> { item };
if (englishName.StartsWith(nameLower))
found.Add(item.Clone());
}
}
return found;
} }
/// <summary> /// <summary>
@ -369,22 +367,35 @@ namespace TShockAPI
/// <returns>List of matching NPCs</returns> /// <returns>List of matching NPCs</returns>
public List<NPC> GetNPCByName(string name) public List<NPC> GetNPCByName(string name)
{ {
var found = new List<NPC>(); var startswith = new List<int>();
NPC npc = new NPC(); var contains = new List<int>();
string nameLower = name.ToLowerInvariant(); for (int i = -17; i < NPCID.Count; i++)
for (int i = -17; i < Terraria.ID.NPCID.Count; i++)
{ {
string englishName = EnglishLanguage.GetNpcNameById(i).ToLowerInvariant(); var currentName = Lang.GetNPCNameValue(i);
if (!string.IsNullOrEmpty(currentName))
npc.SetDefaults(i); {
if (npc.FullName.ToLowerInvariant() == nameLower || npc.TypeName.ToLowerInvariant() == nameLower if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
|| nameLower == englishName) return new List<NPC> { GetNPCById(i) };
return new List<NPC> { npc }; if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
if (npc.FullName.ToLowerInvariant().StartsWith(nameLower) || npc.TypeName.ToLowerInvariant().StartsWith(nameLower) startswith.Add(i);
|| englishName?.StartsWith(nameLower) == true) else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
found.Add((NPC)npc.Clone()); contains.Add(i);
} }
return found; currentName = EnglishLanguage.GetNpcNameById(i);
if (!string.IsNullOrEmpty(currentName))
{
if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<NPC> { GetNPCById(i) };
if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
}
}
if (startswith.Count != 1)
startswith.AddRange(contains);
return startswith.Select(GetNPCById).ToList();
} }
/// <summary> /// <summary>
@ -414,22 +425,35 @@ namespace TShockAPI
/// <returns>Matching list of buff ids</returns> /// <returns>Matching list of buff ids</returns>
public List<int> GetBuffByName(string name) public List<int> GetBuffByName(string name)
{ {
string nameLower = name.ToLower(); var startswith = new List<int>();
string buffname; var contains = new List<int>();
for (int i = 1; i < Terraria.ID.BuffID.Count; i++) for (int i = 1; i < BuffID.Count; i++)
{ {
buffname = Lang.GetBuffName(i); var currentName = Lang.GetBuffName(i);
if (!String.IsNullOrWhiteSpace(buffname) && buffname.ToLower() == nameLower) if (!string.IsNullOrWhiteSpace(currentName))
return new List<int> {i};
}
var found = new List<int>();
for (int i = 1; i < Terraria.ID.BuffID.Count; i++)
{ {
buffname = Lang.GetBuffName(i); if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
if (!String.IsNullOrWhiteSpace(buffname) && buffname.ToLower().StartsWith(nameLower)) return new List<int> { i };
found.Add(i); if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
} }
return found; currentName = EnglishLanguage.GetBuffNameById(i);
if (!string.IsNullOrWhiteSpace(currentName))
{
if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<int> { i };
if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
}
}
if (startswith.Count != 1)
startswith.AddRange(contains);
return startswith;
} }
/// <summary> /// <summary>
@ -449,21 +473,35 @@ namespace TShockAPI
/// <returns>List of prefix IDs</returns> /// <returns>List of prefix IDs</returns>
public List<int> GetPrefixByName(string name) public List<int> GetPrefixByName(string name)
{ {
Item item = new Item(); var startswith = new List<int>();
item.SetDefaults(0); var contains = new List<int>();
string lowerName = name.ToLowerInvariant();
var found = new List<int>();
for (int i = FirstItemPrefix; i <= LastItemPrefix; i++) for (int i = FirstItemPrefix; i <= LastItemPrefix; i++)
{ {
item.prefix = (byte)i; var currentName = Lang.prefix[i].ToString();
string prefixName = item.AffixName().Trim().ToLowerInvariant(); if (!string.IsNullOrWhiteSpace(currentName))
string englishName = EnglishLanguage.GetPrefixById(i).ToLowerInvariant(); {
if (prefixName == lowerName || englishName == lowerName) if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<int>() { i }; return new List<int> { i };
else if (prefixName.StartsWith(lowerName) || englishName?.StartsWith(lowerName) == true) // Partial match if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
found.Add(i); startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
} }
return found; currentName = EnglishLanguage.GetPrefixById(i);
if (!string.IsNullOrWhiteSpace(currentName))
{
if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return new List<int> { i };
if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
startswith.Add(i);
else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase))
contains.Add(i);
}
}
if (startswith.Count != 1)
startswith.AddRange(contains);
return startswith;
} }
/// <summary> /// <summary>
@ -476,7 +514,7 @@ namespace TShockAPI
int type = -1; int type = -1;
if (int.TryParse(idOrName, out type) && type >= FirstItemPrefix && type <= LastItemPrefix) if (int.TryParse(idOrName, out type) && type >= FirstItemPrefix && type <= LastItemPrefix)
{ {
return new List<int> {type}; return new List<int> { type };
} }
return GetPrefixByName(idOrName); return GetPrefixByName(idOrName);
} }
@ -961,7 +999,7 @@ namespace TShockAPI
internal void PrepareLangForDump() internal void PrepareLangForDump()
{ {
for(int i = 0; i < Main.recipe.Length; i++) for (int i = 0; i < Main.recipe.Length; i++)
Main.recipe[i] = new Recipe(); Main.recipe[i] = new Recipe();
} }
@ -993,12 +1031,12 @@ namespace TShockAPI
foreach (var field in typeof(Permissions).GetFields().OrderBy(f => f.Name)) foreach (var field in typeof(Permissions).GetFields().OrderBy(f => f.Name))
{ {
output.Append("|[["); output.Append("|[[");
output.Append((string) field.GetValue(null)); output.Append((string)field.GetValue(null));
output.Append("]]|"); output.Append("]]|");
foreach (Group g in TShock.Groups.groups) foreach (Group g in TShock.Groups.groups)
{ {
if (g.HasPermission((string) field.GetValue(null))) if (g.HasPermission((string)field.GetValue(null)))
{ {
output.Append("✔|"); output.Append("✔|");
} }

View file

@ -35,7 +35,7 @@
<PackageReference Include="GetText.NET" Version="1.7.14" /> <!-- 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 --> <!-- 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.19" ExcludeAssets="all" GeneratePathProperty="true" /> <PackageReference Include="OTAPI.Upcoming" Version="3.1.20" ExcludeAssets="all" GeneratePathProperty="true" />
<None Include="$(PkgOTAPI_Upcoming)\lib\net6.0\OTAPI.dll"> <None Include="$(PkgOTAPI_Upcoming)\lib\net6.0\OTAPI.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile> <ExcludeFromSingleFile>true</ExcludeFromSingleFile>

@ -1 +1 @@
Subproject commit 5ed35f3791e07b87a6e15320cd9e50803c5d50dd Subproject commit e0e2df24dbc618683cc75595c59bf7f88acada08

View file

@ -80,6 +80,10 @@ Use past tense when adding new entries; sign your name off when you add or chang
## Upcoming changes ## Upcoming changes
* Your changes could be here! * Your changes could be here!
* Added `WorldTileProvider` to the tshock config with values `default`, `constileation` or `heaptile`. This allows tile providers to be changed in environments where CLI args cannot be altered. See the documentation website for more info about these providers. (@SignatureBeef) * Added `WorldTileProvider` to the tshock config with values `default`, `constileation` or `heaptile`. This allows tile providers to be changed in environments where CLI args cannot be altered. See the documentation website for more info about these providers. (@SignatureBeef)
* Updated the Utils.FindByIdOrName to follow same logic. Now fuzzy match fallback to `StartsWith` and then `Contains`. (@sgkoishi)
## TShock 5.1.3
* Added support for Terraria 1.4.4.9 via OTAPI 3.1.20. (@SignatureBeef)
## TShock 5.1.2 ## TShock 5.1.2
* Added support for Terraria 1.4.4.8.1 via OTAPI 3.1.19. (@SignatureBeef) * Added support for Terraria 1.4.4.8.1 via OTAPI 3.1.19. (@SignatureBeef)