private Int32 AddBinaryDataHook(IntPtr CodeBaseObject, IntPtr CampaignName, IntPtr VarName, IntPtr PlayerName, Byte Cls, IntPtr Data, UInt32 Size)
{
string CampaignNameStr = ServerInterop.ReadCExoString(CampaignName);
//
// If the campaign is the virtual database, call registered
// event handlers.
//
if (CampaignNameStr.StartsWith("VDB_"))
{
try
{
StoreCampaignDatabaseEventArgs EventArgs;
string VarNameStr = ServerInterop.ReadCExoString(VarName);
string PlayerNameStr = ServerInterop.ReadCExoString(PlayerName);
byte[] GFF = new byte[(int)Size];
Marshal.Copy(Data, GFF, 0, (int)Size);
EventArgs = new StoreCampaignDatabaseEventArgs(CampaignNameStr.Substring(4), VarNameStr, PlayerNameStr, GFF);
CampaignDatabase.StoreCampaignDatabaseEvent(null, EventArgs);
return EventArgs.Handled ? 1 : 0;
}
catch (Exception e)
{
Logger.Log("CampaignDatabaseHook.AddBinaryDataHook: Exception: {0}", e);
return 0;
}
}
//
// Pass through to the original server implementation that uses
// the standard campaign database.
//
return CCodeBase_AddBinaryData_OriginalDelegate(CodeBaseObject, CampaignName, VarName, PlayerName, Cls, Data, Size);
}