Fix INetworkSerializable if class has vtable offset
This commit is contained in:
@@ -148,12 +148,14 @@ NetworkReplicationService NetworkReplicationServiceInstance;
|
||||
|
||||
void INetworkSerializable_Serialize(void* instance, NetworkStream* stream, void* tag)
|
||||
{
|
||||
((INetworkSerializable*)instance)->Serialize(stream);
|
||||
const int16 vtableOffset = (int16)tag;
|
||||
((INetworkSerializable*)((byte*)instance + vtableOffset))->Serialize(stream);
|
||||
}
|
||||
|
||||
void INetworkSerializable_Deserialize(void* instance, NetworkStream* stream, void* tag)
|
||||
{
|
||||
((INetworkSerializable*)instance)->Deserialize(stream);
|
||||
const int16 vtableOffset = (int16)tag;
|
||||
((INetworkSerializable*)((byte*)instance + vtableOffset))->Deserialize(stream);
|
||||
}
|
||||
|
||||
NetworkReplicatedObject* ResolveObject(Guid objectId)
|
||||
@@ -320,6 +322,7 @@ bool NetworkReplicator::InvokeSerializer(const ScriptingTypeHandle& typeHandle,
|
||||
{
|
||||
serializer.Methods[0] = INetworkSerializable_Serialize;
|
||||
serializer.Methods[1] = INetworkSerializable_Deserialize;
|
||||
serializer.Tags[0] = serializer.Tags[1] = (void*)interface->VTableOffset; // Pass VTableOffset to the callback
|
||||
SerializersTable.Add(typeHandle, serializer);
|
||||
}
|
||||
else if (const ScriptingTypeHandle baseTypeHandle = typeHandle.GetType().GetBaseType())
|
||||
|
||||
Reference in New Issue
Block a user