Switch berween player destruction capture zones

Simulacron

L-3: Simulated Member
aa
Feb 17, 2016
313
326
At the last imp Muddy had the interesting idea to change my map (pd_ritual), so there are two capture zone that switch between each other. I want to try this out, the problem is that I don't really know how to do that. I know that you can enable/disable capture zones, but I don't know which entity I should use to trigger/time it.
 

Jekyllson

L3: Member
Jun 20, 2015
115
67
This is a really good idea, because a dynamically changing capture zone makes players less likely to constantly be fighting over the same piece of land, making any Player Destruction map feel way less like a KotH map and encouraging people to explore the map more, looking for enemies to kill, instead of camping any one area. It's like how the Beam in Watergate appeared every so often but could be accessed from almost anywhere in the central area.

You could even go further and either have a capture zone only be active every once in awhile (similar to the Beam), or even use three or more possible capture zones, only one of which is ever active at a time. More than two possible capture zones (and having the next active one selected randomly) could make camping specific zones significantly less effective, and having a capture zone only be active every once in awhile would encourage players to amble around the environment in the search of players to kill rather than scrambling to the next point all the time.

Unfortunately, though, I don't know what entity you would use to enable/disable capture zones, sorry. :(
 

Egan

aa
Feb 14, 2010
1,375
1,721
The PD logic entity comes built in with a timer function (was used for the UFO arrival / departure timer) with HUD support - if you want to use that.
tf_logic_player_destruction:
Inputs:
SetCountdownTimer <integer> Set the countdown time and start the timer.
SetCountdownImage <string> Set the countdown image.
Outputs:
OnCountdownTimerExpired Sent when the countdown timer expires.

I would start with two logic_relay, one that starts enabled (relay_A), and one that starts disabled (relay_B).
The one to start Enabled (relay A) will be the first controlpoint configuration change - for example to 'disable point A' and 'enable point B'.
The relay to start Disabled (relay B) would be the second configuration - to revert back to the original (if you are just having two configurations).

Somewhere make a logic_auto entity, and give it this putput:
OnMultiNewRound > pd_logic > SetCountdownTimer > 60

and then from the pd_logic:
OnCountdownTimerExpired > !self > SetCountdownTimer > 60
OnCountdownTimerExpired > relay* > Trigger
OnCountdownTimerExpired > relay* > Toggle > (after a delay of) 0.05

So you can see these outputs will trigger both relays when the countdown ends (by using the asterisk as a wildcard), but only one of the relays will ever be enabled at a time. Which relay is enabled at a time is toggled 0.05 seconds after the trigger.


Alternatively, you can just use a logic_timer to keep track of time and OnTimer outputs (based on refire time keyvalue), instead of the built-in timer. And if you want more than just two relays you might need to set up a logic_case to handle the specific cases.