2019-02-23 00:25:53 +00:00
// TribesNext Minimum Version Enforcement
// Written by Thyth
// 2014-08-18
// Updated on 2014-08-31 after testing/feedback from Heat Killer.
// This script prevents clients from joining a non-observer team if they are not running
// TribesNext RC2a or newer, with the tournamentNetClient.vl2 installed. An early form of
// anticheat was added to the RC2 patch that kills HM2. This script allows detecting of
// a new enough version by the interaction with the TribesNext community/browser system.
// Support for clan tags (and account renaming) was added along with the HM2 killer in RC2,
// but no client side code to talk to the browser server was in yet. Now that the browser
// system backend is complete, all clients can install the tournamentNetClient to the
// browser, and users running RC2 (with HM2 killer) can be detected.
// The variable on the client object:
// %client.t2csri_sentComCertDone
// Will be 1 if they are running RC2+ with tournamentNetClient.vl2
// Admins can override this restriction when forcing players to join a team.
2019-09-11 14:10:07 +00:00
// Added some things so it can be toggled in game. -ChocoTaco
2019-09-13 19:30:22 +00:00
// Toggle Tourney Net Client
// $Host::EnableNetTourneyClient = 1;
2019-02-23 00:25:53 +00:00
2019-09-13 19:30:22 +00:00
// Original
2019-02-23 00:25:53 +00:00
function checkVer_showBanner ( % client )
{
// customize me
2020-03-23 20:23:42 +00:00
commandToClient ( % client , ' CenterPrint ' , "<font:Sui Generis:22><color:3cb4b4>Version Check Failed!\n<font:Univers:16><color:3cb4b4>You need the latest TribesNext patch and TourneyNetClient2 to play.\n Download it from playt2.com and drop it into your GameData/Base folder." , 10 , 3 ) ;
2019-02-23 00:25:53 +00:00
}
package checkver
{
function serverCmdClientJoinTeam ( % client , % team )
{
2019-09-11 14:10:07 +00:00
if ( ! % client . t2csri_sentComCertDone )
2019-02-23 00:25:53 +00:00
{
2019-09-11 14:10:07 +00:00
checkVer_showBanner ( % client ) ;
return ;
2019-02-23 00:25:53 +00:00
}
Parent : : serverCmdClientJoinTeam ( % client , % team ) ;
}
function serverCmdClientJoinGame ( % client )
{
2019-09-11 14:10:07 +00:00
if ( ! % client . t2csri_sentComCertDone )
{
checkVer_showBanner ( % client ) ;
return ;
2019-02-23 00:25:53 +00:00
}
Parent : : serverCmdClientJoinGame ( % client ) ;
}
function serverCmdClientPickedTeam ( % client , % option )
{
2019-09-11 14:10:07 +00:00
Parent : : serverCmdClientPickedTeam ( % client , % option ) ; //Put first
2019-02-25 00:55:50 +00:00
2019-09-11 14:10:07 +00:00
if ( $ Host : : EnableNetTourneyClient ) //Added
2019-02-23 00:25:53 +00:00
{
if ( ! % client . t2csri_sentComCertDone )
{
2019-09-11 14:10:07 +00:00
if ( $ Host : : TournamentMode & & % client . team ! $ = 0 ) //Added
2019-02-25 22:26:57 +00:00
{
serverCmdClientMakeObserver ( % client ) ;
messageAll ( ' ' , ' \ cr % 1 has failed the Tribesnext version check . ' , % client . name ) ;
2019-03-08 21:53:43 +00:00
}
2019-02-23 00:25:53 +00:00
checkVer_showBanner ( % client ) ;
return ;
}
}
}
function serverCmdClientTeamChange ( % client , % option )
{
2019-09-11 14:10:07 +00:00
if ( ! % client . t2csri_sentComCertDone )
{
checkVer_showBanner ( % client ) ;
return ;
2019-02-23 00:25:53 +00:00
}
Parent : : serverCmdClientTeamChange ( % client , % option ) ;
}
function Observer : : onTrigger ( % data , % obj , % trigger , % state )
2019-09-11 14:10:07 +00:00
{
% client = % obj . getControllingClient ( ) ;
if ( ! % client . t2csri_sentComCertDone )
{
checkVer_showBanner ( % client ) ;
return ;
2019-02-23 00:25:53 +00:00
}
Parent : : onTrigger ( % data , % obj , % trigger , % state ) ;
}
} ;
2019-02-23 20:23:46 +00:00
2019-09-13 19:30:22 +00:00
package StartCheckVer
{
function loadMissionStage2 ( )
{
//Activate NetTourneyClient package if enabled.
if ( $ Host : : EnableNetTourneyClient & & ! isActivePackage ( checkver ) ) //Added
activatePackage ( checkver ) ;
parent : : loadMissionStage2 ( ) ;
}
} ;
// Prevent package from being activated if it is already
if ( ! isActivePackage ( StartCheckVer ) )
activatePackage ( StartCheckVer ) ;
// Throw offenders to observer when enabled
2019-09-11 14:10:07 +00:00
function CheckVerObserver ( % client )
{
if ( $ Host : : EnableNetTourneyClient & & ! $ Host : : TournamentMode )
{
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + )
{
% client = ClientGroup . getObject ( % i ) ;
//Check ver
if ( ! % client . isAIControlled ( ) & & ! % client . t2csri_sentComCertDone ) //No bots
{
messageClient ( % client , ' MsgClientCheckObserver ' , ' \ c2Tribesnext version check has failed . ' ) ;
serverCmdClientMakeObserver ( % client ) ;
}
}
}
}
2019-02-23 20:23:46 +00:00
2019-09-13 19:30:22 +00:00
// List Names of players without NTC
2019-09-11 14:10:07 +00:00
function CheckVerList ( % client )
{
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + )
{
% client = ClientGroup . getObject ( % i ) ;
//Check ver
if ( ! % client . isAIControlled ( ) & & ! % client . t2csri_sentComCertDone ) //No bots
echo ( % client . nameBase ) ;
}
}
2019-02-23 20:23:46 +00:00
//Added -ChocoTaco
2019-09-11 14:10:07 +00:00
//Evo Code
2019-02-23 20:23:46 +00:00
//
//In defaultgame.ovl DefaultGame::sendGameVoteMenu(%game, %client, %key)
//
// //Toggle Tournament Net Client
2019-03-08 21:53:43 +00:00
// if(%client.isAdmin && $Host::EnableNetTourneyClient)
2019-02-23 20:23:46 +00:00
// messageClient( %client, 'MsgVoteItem', "", %key, 'ToggleTourneyNetClient', 'Disable Tournament Net Client', "Disable Tournament Net Client" );
2019-03-08 21:53:43 +00:00
// else if(%client.isAdmin)
2019-02-23 20:23:46 +00:00
// messageClient( %client, 'MsgVoteItem', "", %key, 'ToggleTourneyNetClient', 'Enable Tournament Net Client', "Enable Tournament Net Client" );
//
//
//In admin.ovl serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %playerVote)
//
// case "ToggleTourneyNetClient":
// if (%client.isAdmin)
// {
// if($Host::EnableNetTourneyClient)
// {
// $Host::EnableNetTourneyClient = 0;
2019-09-11 14:10:07 +00:00
//
// if(isActivePackage(checkver))
// deactivatePackage(checkver);
//
2019-02-23 20:23:46 +00:00
// messageClient( %client, '', "Tournament Net Client checking has been disabled.~wfx/powered/vehicle_screen_on.wav" );
2019-09-11 14:10:07 +00:00
// adminLog(%client, " has disabled Net Tourney Client checking.");
2019-02-23 20:23:46 +00:00
// }
// else
// {
// $Host::EnableNetTourneyClient = 1;
2019-09-11 14:10:07 +00:00
//
// if(!isActivePackage(checkver))
// activatePackage(checkver);
//
// //Boot Offenders into Obs
// CheckVerObserver(%client);
//
2019-02-23 20:23:46 +00:00
// messageClient( %client, '', "Tournament Net Client checking has been enabled.~wfx/powered/vehicle_screen_on.wav" );
// ResetClientChangedTeams();
2019-09-11 14:10:07 +00:00
// adminLog(%client, " has enabled Net Tourney Client checking.");
2019-02-23 20:23:46 +00:00
// }
2019-09-11 14:10:07 +00:00
// }