Watch Only Mode

This commit is contained in:
ChocoTaco 2023-04-16 16:12:36 -04:00
parent 9e87ca02a0
commit 0127da46b4
4 changed files with 36 additions and 20 deletions

View file

@ -86,7 +86,9 @@ function Observer::onTrigger(%data, %obj, %trigger, %state)
if(%client.observeClient != -1) if(%client.observeClient != -1)
{ {
observerFollowUpdate(%client, -1, false); observerFollowUpdate(%client, -1, false);
messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); if(!%client.isAdmin && !%client.isWatchOnly){
messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);
}
%client.observeClient = -1; %client.observeClient = -1;
} }
%obj.mode = "observerFly"; %obj.mode = "observerFly";
@ -219,7 +221,9 @@ function observeFlag(%client, %target, %type, %flagTeam)
if(%client.observeClient != -1) if(%client.observeClient != -1)
{ {
observerFollowUpdate(%client, -1, false); observerFollowUpdate(%client, -1, false);
messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); if(!%client.isAdmin && !%client.isWatchOnly){
messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);
}
%client.observeClient = -1; %client.observeClient = -1;
} }
} }
@ -246,10 +250,12 @@ function observeFlag(%client, %target, %type, %flagTeam)
observerFollowUpdate(%client, %target, true); observerFollowUpdate(%client, %target, true);
displayObserverHud(%client, %target); displayObserverHud(%client, %target);
messageClient(%target, 'Observer', '\c1%1 is now observing you.', %client.name); if(!%client.isAdmin && !%client.isWatchOnly){
messageClient(%target, 'Observer', '\c1%1 is now observing you.', %client.name);
}
// was the client observing a player before? // was the client observing a player before?
if(%client.observeClient != -1) if(%client.observeClient != -1 && !%client.isAdmin && !%client.isWatchOnly)
messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);
%client.camera.getDataBlock().setMode(%client.camera, "observerFollow", %target.player); %client.camera.getDataBlock().setMode(%client.camera, "observerFollow", %target.player);

View file

@ -2340,7 +2340,7 @@ function dtGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4, %arg5){
serverCmdObserveClient(%client, %targetClient); serverCmdObserveClient(%client, %targetClient);
displayObserverHud(%client, %targetClient); displayObserverHud(%client, %targetClient);
if (%targetClient != %prevObsClient) if (!%client.isAdmin && !%client.isWatchOnly && %targetClient != %prevObsClient)
{ {
messageClient(%targetClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%targetClient, 'Observer', '\c1%1 is now observing you.', %client.name);
messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);

View file

@ -80,7 +80,7 @@ function Observer::onTrigger(%data,%obj,%trigger,%state)
serverCmdObserveClient(%client, -1); serverCmdObserveClient(%client, -1);
displayObserverHud(%client, %client.observeClient); displayObserverHud(%client, %client.observeClient);
if(!%client.isAdmin) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching. if(!%client.isAdmin && !%client.isWatchOnly) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching.
messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name);
} }
@ -172,7 +172,7 @@ function Observer::onTrigger(%data,%obj,%trigger,%state)
observerFollowUpdate( %client, %client.observeClient, false ); observerFollowUpdate( %client, %client.observeClient, false );
displayObserverHud(%client, %client.observeClient); displayObserverHud(%client, %client.observeClient);
if(!%client.isAdmin) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching. if(!%client.isAdmin && !%client.isWatchOnly) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching.
messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name);
} }
@ -224,7 +224,7 @@ function Observer::onTrigger(%data,%obj,%trigger,%state)
observerFollowUpdate( %client, %client.observeClient, false ); observerFollowUpdate( %client, %client.observeClient, false );
displayObserverHud(%client, %client.observeClient); displayObserverHud(%client, %client.observeClient);
if(!%client.isAdmin) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching. if(!%client.isAdmin && !%client.isWatchOnly) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching.
messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name);
} }
@ -265,7 +265,7 @@ function Observer::onTrigger(%data,%obj,%trigger,%state)
//send the message(s) //send the message(s)
displayObserverHud(%client, %nextClient); displayObserverHud(%client, %nextClient);
if(!%client.isAdmin) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching. if(!%client.isAdmin && !%client.isWatchOnly) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching.
{ {
messageClient(%nextClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%nextClient, 'Observer', '\c1%1 is now observing you.', %client.name);
messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);
@ -305,7 +305,7 @@ function Observer::onTrigger(%data,%obj,%trigger,%state)
} }
//send the message(s) //send the message(s)
displayObserverHud(%client, %prevClient); displayObserverHud(%client, %prevClient);
if(!%client.isAdmin) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching. if(!%client.isAdmin && !%client.isWatchOnly) // z0dd - ZOD, 7/15/03. Only warn them if it isn't an admin watching.
{ {
messageClient(%prevClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%prevClient, 'Observer', '\c1%1 is now observing you.', %client.name);
messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);

20
Classic/scripts/defaultGame.cs Executable file → Normal file
View file

@ -1162,7 +1162,7 @@ function DefaultGame::forceObserver( %game, %client, %reason )
%scheduleAutoKick = true; %scheduleAutoKick = true;
} }
if(%scheduleAutoKick && !%client.isAdmin && !$Host::TournamentMode && $Host::KickObserverTimeout) if(%scheduleAutoKick && !%client.isAdmin && !%client.isWatchOnly && !$Host::TournamentMode && $Host::KickObserverTimeout)
{ {
if(isEventPending(%client.okschedule)) if(isEventPending(%client.okschedule))
cancel(%client.okschedule); cancel(%client.okschedule);
@ -1204,11 +1204,21 @@ function DefaultGame::forceObserver( %game, %client, %reason )
} }
function serverCmdWatchOnly(%client, %pass){
if($Host::ObserverOnlyPass $= ""){
$Host::ObserverOnlyPass = "ImaWatcher";// set a default one if not defined
}
if(%pass $= $Host::ObserverOnlyPass){
%client.isWatchOnly = 1;
}
}
// cmdAutoKickObserver(%client) // cmdAutoKickObserver(%client)
// Info: Will kick the player if he/she is still in observer. // Info: Will kick the player if he/she is still in observer.
function cmdAutoKickObserver(%client, %key) // Edit GG function cmdAutoKickObserver(%client, %key) // Edit GG
{ {
if (($Host::TournamentMode) || (!$MissionRunning) || (%client.isAdmin) || (%client.team != 0) || (!%client.okkey) || (%client.okkey != %key)) if (($Host::TournamentMode) || (!$MissionRunning) || (%client.isWatchOnly) || (%client.isAdmin) || (%client.team != 0) || (!%client.okkey) || (%client.okkey != %key))
return; return;
if(isEventPending(%client.okschedule)) if(isEventPending(%client.okschedule))
@ -1826,9 +1836,9 @@ function DefaultGame::clientMissionDropReady(%game, %client)
for(%i = 1; %i <= 13; %i++) for(%i = 1; %i <= 13; %i++)
$stats::weapon_damage[%client, %i] = ""; $stats::weapon_damage[%client, %i] = "";
if(%client.team $=0 && $Host::KickObserverStartOnJoin) //Observer only if(%client.team $= 0 && $Host::KickObserverStartOnJoin) //Observer only
{ {
if(!%client.isAdmin && !$Host::TournamentMode && $Host::KickObserverTimeout) if(!%client.isAdmin && !%client.isWatchOnly && !$Host::TournamentMode && $Host::KickObserverTimeout)
{ {
if(isEventPending(%client.okschedule)) if(isEventPending(%client.okschedule))
cancel(%client.okschedule); cancel(%client.okschedule);
@ -3423,7 +3433,7 @@ function DefaultGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4
serverCmdObserveClient(%client, %targetClient); serverCmdObserveClient(%client, %targetClient);
displayObserverHud(%client, %targetClient); displayObserverHud(%client, %targetClient);
if (%targetClient != %prevObsClient) if (%targetClient != %prevObsClient && !%client.isWatchOnly)
{ {
messageClient(%targetClient, 'Observer', '\c1%1 is now observing you.', %client.name); messageClient(%targetClient, 'Observer', '\c1%1 is now observing you.', %client.name);
messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name);