I devised a simple method for ensuring that players are using the right version of my haks.
Each hak contains a uniquely-named custom 2da file, containing one row with one field - the hak version number.
It's checked OnClientEnter:
float fHakMain = 0.01;
float fHakTile = 0.01;
string sHakMain = Get2DAString("_main_version", "Version", 0);
string sHakTile = Get2DAString("_tile_version", "Version", 0);
if ((StringToFloat(sHakMain) < fHakMain)
|| (StringToFloat(sHakTile) < fHakTile))
PopUpDeathGUIPanel(oPC, FALSE, FALSE, 0,
"Fatal error : dark_energy.hak version " + sHakMain
+ " dark_energy_tile.hak version " + sHakTile
+ " are out-of-date. Please download the latest versions from proleric.com");
It occurs to me that this would be a useful feature to have in CEP and other commonly-used systems, on a forward basis.