Core/DBStorage: Fixed sending hotfix data, was sending it wrong. Now custom hotfix data will work.

This commit is contained in:
hondacrx
2021-01-19 18:53:43 -05:00
parent 3ac5695333
commit 40b190ac30
@@ -39,11 +39,11 @@ namespace Game.DataStorage
[Serializable] [Serializable]
public class DB6Storage<T> : Dictionary<uint, T>, IDB2Storage where T : new() public class DB6Storage<T> : Dictionary<uint, T>, IDB2Storage where T : new()
{ {
uint _tableHash; WDCHeader _header;
public void LoadData(WDCHeader header, BitSet availableDb2Locales, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale) public void LoadData(WDCHeader header, BitSet availableDb2Locales, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
{ {
_tableHash = header.TableHash; _header = header;
SQLResult result = DB.Hotfix.Query(DB.Hotfix.GetPreparedStatement(preparedStatement)); SQLResult result = DB.Hotfix.Query(DB.Hotfix.GetPreparedStatement(preparedStatement));
if (!result.IsEmpty()) if (!result.IsEmpty())
@@ -246,7 +246,7 @@ namespace Game.DataStorage
foreach (var fieldInfo in entry.GetType().GetFields()) foreach (var fieldInfo in entry.GetType().GetFields())
{ {
if (fieldInfo.Name == "Id") if (fieldInfo.Name == "Id" && _header.HasIndexTable())
continue; continue;
var type = fieldInfo.FieldType; var type = fieldInfo.FieldType;
@@ -288,6 +288,9 @@ namespace Game.DataStorage
case TypeCode.Single: case TypeCode.Single:
buffer.WriteFloat((float)fieldInfo.GetValue(entry)); buffer.WriteFloat((float)fieldInfo.GetValue(entry));
break; break;
case TypeCode.String:
buffer.WriteCString((string)fieldInfo.GetValue(entry));
break;
case TypeCode.Object: case TypeCode.Object:
switch (type.Name) switch (type.Name)
{ {
@@ -306,6 +309,23 @@ namespace Game.DataStorage
string str = locStr[locale]; string str = locStr[locale];
buffer.WriteCString(str); buffer.WriteCString(str);
break; break;
case "Vector2":
Vector2 vector2 = (Vector2)fieldInfo.GetValue(entry);
buffer.WriteVector2(vector2);
break;
case "Vector3":
Vector3 vector3 = (Vector3)fieldInfo.GetValue(entry);
buffer.WriteVector3(vector3);
break;
case "FlagArray128":
FlagArray128 flagArray128 = (FlagArray128)fieldInfo.GetValue(entry);
buffer.WriteUInt32(flagArray128[0]);
buffer.WriteUInt32(flagArray128[1]);
buffer.WriteUInt32(flagArray128[2]);
buffer.WriteUInt32(flagArray128[3]);
break;
default:
throw new Exception($"Unhandled Custom type: {type.Name}");
} }
break; break;
} }
@@ -363,6 +383,6 @@ namespace Game.DataStorage
Remove(id); Remove(id);
} }
public uint GetTableHash() { return _tableHash; } public uint GetTableHash() { return _header.TableHash; }
} }
} }