/// <summary> /// Constructor. /// </summary> internal CampaignDatabaseHook() { if (!ALFA.SystemInfo.IsRunningInNWN2Server()) { Logger.Log("CampaignDatabaseHook.CampaignDatabaseHook: Not running in NWN2SERVER.EXE, disabling campaign database integration."); return; } // // Create delegates. // CCodeBase_GetBinaryData_HookDelegate = new CCodeBase_GetBinaryData(GetBinaryDataHook); CCodeBase_AddBinaryData_HookDelegate = new CCodeBase_AddBinaryData(AddBinaryDataHook); CCodeBase_GetBinaryData_OriginalDelegate = (CCodeBase_GetBinaryData)Marshal.GetDelegateForFunctionPointer(CCodeBase_GetBinaryData_Offset, typeof(CCodeBase_GetBinaryData)); CCodeBase_AddBinaryData_OriginalDelegate = (CCodeBase_AddBinaryData)Marshal.GetDelegateForFunctionPointer(CCodeBase_AddBinaryData_Offset, typeof(CCodeBase_AddBinaryData)); // // Install hooks. // GetBinaryDataPatch = new CodePatch( ServerInterop.CCodeBase_GetBinaryData_Call, Marshal.GetFunctionPointerForDelegate(CCodeBase_GetBinaryData_HookDelegate), true); AddBinaryDataPatch = new CodePatch( ServerInterop.CCodeBase_AddBinaryData_Call, Marshal.GetFunctionPointerForDelegate(CCodeBase_AddBinaryData_HookDelegate), true); }