Template:Metrics/Capture return/doc
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 [1] 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 }