Fix inconsistent float<->string conversion causing map pins to break
This commit is contained in:
parent
690c796d38
commit
34df2bcf39
3 changed files with 64 additions and 1 deletions
|
@ -58,7 +58,7 @@ namespace CLre.Fixes
|
||||||
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent,
|
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent,
|
||||||
NumberFormatInfo.InvariantInfo, out __result);
|
NumberFormatInfo.InvariantInfo, out __result);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
API.Utility.Logging.Log($"Parsed \"{s}\" into {__result}");
|
API.Utility.Logging.Log($"Parsed \"{s}\" into {__result} (successfully? {success})");
|
||||||
#endif
|
#endif
|
||||||
return !success;
|
return !success;
|
||||||
}
|
}
|
||||||
|
|
4
CLre/Fixes/FloatLanguageFix.cs
Normal file
4
CLre/Fixes/FloatLanguageFix.cs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
$HEADER$namespace $NAMESPACE$
|
||||||
|
{
|
||||||
|
public class $CLASS$ {$END$}
|
||||||
|
}
|
59
CLre/Fixes/MapPinPointsFloatFix.cs
Normal file
59
CLre/Fixes/MapPinPointsFloatFix.cs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using Game.UI.WorldMapScreen;
|
||||||
|
using HarmonyLib;
|
||||||
|
using Svelto.DataStructures;
|
||||||
|
|
||||||
|
namespace CLre.Fixes
|
||||||
|
{
|
||||||
|
public class MapPinPointsFloatFix
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Bugfix(name = "OfflineSpawnpointSavingFloatFix",
|
||||||
|
description = "Make spawnpoints save properly for everyone, even when floats contain a comma",
|
||||||
|
more = "https://trello.com/c/hpADhDhQ/21-login-goes-to-original-spawn",
|
||||||
|
component = BugfixType.HarmonyPatch, id = 9)]
|
||||||
|
[HarmonyPatch]
|
||||||
|
class WorldMapPinPointsMessage_InjectValues_Patch
|
||||||
|
{
|
||||||
|
private static StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
public static bool BeforeMethodCall(WorldMapPinPointsMessage __instance,
|
||||||
|
FasterList<PinsPosition> pinPositions)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.Log("Intercepting Game.UI.WorldMapScreen.WorldMapPinPointsMessage:InjectValues");
|
||||||
|
#endif
|
||||||
|
sb.Length = 0;
|
||||||
|
for (int i = 0; i < pinPositions.Count; i++)
|
||||||
|
{
|
||||||
|
if (pinPositions[i].IsOnMap)
|
||||||
|
{
|
||||||
|
// force culture invariant float format (with a . as decimal point)
|
||||||
|
sb.AppendFormat("{0};{1};",
|
||||||
|
pinPositions[i].PinPosition.x.ToString("0.0", CultureInfo.InvariantCulture),
|
||||||
|
pinPositions[i].PinPosition.y.ToString("0.0", CultureInfo.InvariantCulture));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.AppendFormat("{0};{1};", "x", "x");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__instance.pinPoints = sb.ToString();
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.Log($"Corrected pin point string to culture invariant: {sb.ToString()}");
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyTargetMethod]
|
||||||
|
public static MethodBase Target()
|
||||||
|
{
|
||||||
|
return AccessTools.Method(typeof(WorldMapPinPointsMessage), "InjectValues");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue