Template:Metrics/Capture return
| Multiplier | Adjustment | Rate |
|---|---|---|
| x1 | 1 | 100% |
| x2 | 0.66666666666667 | 150% |
| x3 | 0.54545454545455 | 183% |
| x4 | 0.48 | 208% |
| x5 | 0.43795620437956 | 228% |
| x6 | 0.40816326530612 | 245% |
| x7 | 0.38567493112948 | 259% |
| x8 | 0.36793692509855 | 272% |
| x9 | 0.35348576237902 | 283% |
| x10 | 0.34141715214741 | 293% |
| x11 | 0.33113927679755 | 302% |
| x12 | 0.3222468932005 | 310% |
| x13 | 0.31445218251769 | 318% |
| x14 | 0.30754446618812 | 325% |
| x15 | 0.30136557845783 | 332% |
| x16 | 0.29579419172694 | 338% |
| x17 | 0.29073549347409 | 344% |
| x18 | 0.28611418520599 | 350% |
| x19 | 0.2818696118207 | 355% |
| x20 | 0.2779522965244 | 360% |
| x21 | 0.27432142650145 | 365% |
| x22 | 0.27094299608389 | 369% |
| x23 | 0.26778841368733 | 373% |
| x24 | 0.26483344171861 | 378% |
| x25 | 0.26205737940994 | 382% |
| x26 | 0.25944242548188 | 385% |
| x27 | 0.25697317570452 | 389% |
| x28 | 0.25463622288863 | 393% |
| x29 | 0.25241983552654 | 396% |
| x30 | 0.25031369744854 | 399% |
| x31 | 0.24830869526721 | 403% |
| x32 | 0.24639674358231 | 406% |
The values are computed using the equation sum(1/i for i=1 to n), where n is the number of capturing players, a harmonic number. This equation is derived from the source file trigger_area_capture.cpp that is available as part of the Source SDK. Values generated from WolframAlpha using the input Table[1/HarmonicNumber[n], {n, 32}]
Previous experimental results
These decay rates were determined by creating a map with a 100 second capture point, then using Puppet Bots to capture said point. I am unable to derive a simple equation that explains these values. These times were generated using a SourceMod script as follows:
#include <sourcemod>
public Plugin:myinfo =
{
name = "Capture Timing",
author = "Org",
description = "Console out debug info",
version = "1.0.0.2",
url = "example.org"
};
public OnPluginStart()
{
HookEvent("controlpoint_starttouch", Event_StartCapture)
HookEvent("teamplay_point_captured", Event_EndCapture)
}
public Action:Event_StartCapture(Handle:event, const String:name[], bool:dontBroadcast)
{
new Float:time = GetEngineTime()
PrintToServer("Control Point Entered : %f", time)
return Plugin_Continue
}
public Action:Event_EndCapture(Handle:event, const String:name[], bool:dontBroadcast)
{
new Float:time = GetEngineTime()
PrintToServer("Control Point Captured: %f", time)
return Plugin_Continue
}