Fix spawnpoint saving for floats containing ,
This commit is contained in:
parent
89089c9397
commit
690c796d38
1 changed files with 71 additions and 0 deletions
71
CLre/Fixes/OfflineSpawnpointSavingFloatFix.cs
Normal file
71
CLre/Fixes/OfflineSpawnpointSavingFloatFix.cs
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
using HarmonyLib;
|
||||||
|
using SQL;
|
||||||
|
using Svelto.DataStructures;
|
||||||
|
|
||||||
|
namespace CLre.Fixes
|
||||||
|
{
|
||||||
|
public class OfflineSpawnpointSavingFloatFix
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[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 OfflineSavePlayerSpawnPointRequest_DoRequest_Patch
|
||||||
|
{
|
||||||
|
private const string QUERY = "INSERT OR REPLACE INTO spawnpoints (gameId, uniqueId, PublicID, x, y, z, selected) VALUES (@GameId, @UniqueId, @PublicId, @X, @Y, @Z, @Selected)";
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
public static bool BeforeMethodCall(object __instance, object ____dependency)
|
||||||
|
{
|
||||||
|
API.Utility.Logging.Log("Intercepting OfflineSavePlayerSpawnPointRequest.DoRequest");
|
||||||
|
if (____dependency == null) return true;
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.Log("Replacing OfflineSavePlayerSpawnPointRequest.DoRequest SQL squery with safer alternative");
|
||||||
|
#endif
|
||||||
|
// TODO optimise
|
||||||
|
ISQL sql = Traverse.Create(__instance).Property<ISQL>("sql").Value;
|
||||||
|
Traverse dep = Traverse.Create(____dependency);
|
||||||
|
// populate params
|
||||||
|
FasterList<SQLParam> sqlParams = new FasterList<SQLParam>();
|
||||||
|
sqlParams.Add(new SQLParam("@GameId", dep.Field<long>("gameId").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@UniqueId", dep.Field<int>("uniqueId").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@PublicId", dep.Field<string>("PublicId").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@X", dep.Field<float>("x").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@Y", dep.Field<float>("y").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@Z", dep.Field<float>("z").Value));
|
||||||
|
sqlParams.Add(new SQLParam("@Selected", dep.Field<bool>("selected").Value? 1 : 0));
|
||||||
|
// actually perform query
|
||||||
|
sql.ExecuteSaveQuery(QUERY, OnComplete, OnError, sqlParams);
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.Log("Executed corrected spawnpoint saving SQL query");
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnComplete(int numberRowsEdited)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.Log($"Completed OfflineSavePlayerSpawnPointRequest_DoRequest_Patch SQL Query ({numberRowsEdited} rows)");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnError(Exception e)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
API.Utility.Logging.LogError($"Error in OfflineSavePlayerSpawnPointRequest_DoRequest_Patch SQL Query: {e}\n{e.StackTrace}");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
[HarmonyTargetMethod]
|
||||||
|
public static MethodBase Target()
|
||||||
|
{
|
||||||
|
return AccessTools.Method("Requests.Offline.Server.OfflineSavePlayerSpawnPointRequest:DoRequest");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue