diff --git a/Templates/BaseGame/game/core/clientServer/Core_ClientServer.tscript b/Templates/BaseGame/game/core/clientServer/Core_ClientServer.tscript index 494c5014a..8df5cc8eb 100644 --- a/Templates/BaseGame/game/core/clientServer/Core_ClientServer.tscript +++ b/Templates/BaseGame/game/core/clientServer/Core_ClientServer.tscript @@ -39,6 +39,32 @@ function Core_ClientServerListener::onMapLoadComplete(%this) } } +function Core_ClientServerListener::onmapLoadFail(%this, %isFine) +{ + if (%isFine) + { + %this.onMapLoadComplete(); + return; + } + + $moduleLoadedFailed++; + echo("onmapLoadFail!"); + if ($moduleLoadedFailed>1) return; // yeah, we know + + $Server::LoadFailMsg = "Failed to load map!"; + // Inform clients that are already connected + + for (%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++) + { + %cl = ClientGroup.getObject( %clientIndex ); + %cl.onConnectionDropped($Server::LoadFailMsg); + %cl.endMission(); + %cl.resetGhosting(); + %cl.clearPaths(); + } + destroyServer(); +} + function Core_ClientServer::onCreate( %this ) { echo("\n--------- Initializing Directory: scripts ---------"); @@ -61,8 +87,10 @@ function Core_ClientServer::onCreate( %this ) initClient(); } %this.GetEventManager().registerEvent("mapLoadComplete"); + %this.GetEventManager().registerEvent("mapLoadFail"); %this.listener = new ScriptMsgListener() {class = Core_ClientServerListener;}; %this.GetEventManager().subscribe( %this.listener, "mapLoadComplete" ); + %this.GetEventManager().subscribe( %this.listener, "mapLoadFail" ); } function Core_ClientServer::onDestroy( %this ) diff --git a/Templates/BaseGame/game/core/clientServer/scripts/server/levelLoad.tscript b/Templates/BaseGame/game/core/clientServer/scripts/server/levelLoad.tscript index b1c6d1262..ee8e43dba 100644 --- a/Templates/BaseGame/game/core/clientServer/scripts/server/levelLoad.tscript +++ b/Templates/BaseGame/game/core/clientServer/scripts/server/levelLoad.tscript @@ -127,6 +127,7 @@ function loadMissionStage2() if( isObject( theLevelInfo ) ) $Server::MissionName = theLevelInfo.levelName; $moduleLoadedDone = 0; + $moduleLoadedFailed = 0; callOnModules("onLoadMap"); }