From 76511f893800fe7a02a2d4cf3bdbfc51ae55f724 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 29 Mar 2020 01:38:04 -0400 Subject: [PATCH] More ObsFlag Things --- Classic/scripts/CTFGame.cs | 13 +++++++++++++ Classic/scripts/SCtFGame.cs | 12 ++++++++++++ Classic/scripts/autoexec/ObserveFlag.cs | 25 +++++++++++++++++++++++++ Classic/scripts/defaultGame.cs | 6 ++++++ 4 files changed, 56 insertions(+) diff --git a/Classic/scripts/CTFGame.cs b/Classic/scripts/CTFGame.cs index c9fc1c0..b4143d8 100644 --- a/Classic/scripts/CTFGame.cs +++ b/Classic/scripts/CTFGame.cs @@ -584,6 +584,7 @@ function CTFGame::playerDroppedFlag(%game, %player) { %client = %player.client; %flag = %player.holdingFlag; + %game.updateFlagTransform(%flag); // z0dd - ZOD, 8/4/02, Call to KineticPoet's flag updater %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); // z0dd - ZOD, 8/15/02. How long did player hold flag? @@ -628,6 +629,18 @@ function CTFGame::flagCap(%game, %player) %client = %player.client; %flag = %player.holdingFlag; %flag.carrier = ""; + + // when a player cap the flag, continue observing the player + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl.team <= 0 && %cl.observingFlag && %cl.flagObsTeam == %flag.team) + { + %cl.observingFlag = false; + %cl.flagObserved = ""; + %cl.flagObsTeam = ""; + } + } %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); // z0dd - ZOD, 8/15/02. How long did player hold flag? diff --git a/Classic/scripts/SCtFGame.cs b/Classic/scripts/SCtFGame.cs index 81a081d..2993353 100644 --- a/Classic/scripts/SCtFGame.cs +++ b/Classic/scripts/SCtFGame.cs @@ -906,6 +906,18 @@ function SCtFGame::flagCap(%game, %player) %client = %player.client; %flag = %player.holdingFlag; %flag.carrier = ""; + + // when a player cap the flag, continue observing the player + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl.team <= 0 && %cl.observingFlag && %cl.flagObsTeam == %flag.team) + { + %cl.observingFlag = false; + %cl.flagObserved = ""; + %cl.flagObsTeam = ""; + } + } %held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); // z0dd - ZOD, 8/15/02. How long did player hold flag? diff --git a/Classic/scripts/autoexec/ObserveFlag.cs b/Classic/scripts/autoexec/ObserveFlag.cs index 059b7da..7ed9994 100644 --- a/Classic/scripts/autoexec/ObserveFlag.cs +++ b/Classic/scripts/autoexec/ObserveFlag.cs @@ -102,6 +102,28 @@ function Observer::onTrigger(%data, %obj, %trigger, %state) } } +function Observer::setMode(%data, %obj, %mode, %targetObj) +{ + if(%mode $= "") + return; + + %client = %obj.getControllingClient(); + if(%client $= "") + return; + + switch$(%mode) + { + case "followFlag": + %transform = %targetObj.getTransform(); + // observe the flag 2x more far than the normal + %obj.setOrbitMode(%targetObj, %transform, 1.0, 9.0, 9.0); + + default: + Parent::setMode(%data, %obj, %mode, %targetObj); + } + %obj.mode = %mode; +} + }; // Prevent package from being activated if it is already @@ -146,6 +168,9 @@ function serverCmdObserveSecondFlag(%client) observeFlag(%client, %player.client, 2, 2); } +// observeFlag(%client, %target, %type, %flagTeam) +// Info: handle the observe flag feature +// observeFlag(%cl, $TeamFlag[%flag.team], 1, %flag.team); function observeFlag(%client, %target, %type, %flagTeam) { if(!isObject(%client) || !isObject(%target) || !isObject(%client.camera)) diff --git a/Classic/scripts/defaultGame.cs b/Classic/scripts/defaultGame.cs index ef227f2..bde18fd 100644 --- a/Classic/scripts/defaultGame.cs +++ b/Classic/scripts/defaultGame.cs @@ -1718,9 +1718,15 @@ function DefaultGame::clientMissionDropReady(%game, %client) if( %client.camera.mode $= "observerFly" || %client.camera.mode $= "justJoined") { %observer = true; + + %client.observingFlag = false; + %client.flagObserved = ""; + %client.flagObsTeam = ""; + %client.observerStartTime = getSimTime(); commandToClient(%client, 'setHudMode', 'Observer'); %client.setControlObject( %client.camera ); + //displayObserverHud( %client, 0 ); // Eolk - flag stats stuff //updateObserverFlyHud(%client);